深度学习算法如何做嵌入式部署?

目标检测与深度学习

共 2290字,需浏览 5分钟

 ·

2021-03-22 00:07


1

什么是TIDL?

TIDL是TI的深度学习解决方案,将深度学习应用程序转移到TI芯片的EVE和DSP上的SDK接口。


深度学习分为两个阶段:

网络训练:设计神经网络模型,使用服务器或者具有外部图形处理单元或GPU的PC上通过大型数据集离线训练以调整模型参数,通常在PC上使用Caffe 、TensorFlow等框架完成。

模型部署:采用包含参数的预训练模型,对输入的数据预测输出结果,可以用TIDL转换工具将开源框架得到的网络和参数转换成TIDL支持的bin文件。

所以TIDL支持在C66x DSP和EVE子系统上以低功耗运行深度学习实时推理部分。


2

TIDL支持哪些功能?

TIDL支持将开源框架下训练的模型文件转换到自己的格式进行推理,开发者可以采用TensorFlow,Caffe,ONNX三种开源框架训练模型,同时TIDL支持以下格式的转换:pb或tflite文件、onnx文件、caffemodel和prototxt文件。如下图所示:


模型导入的流程如下图所示:

  • 将开源框架训练的网络转换成TIDL用于推理的bin文件格式;

  • 将浮点模型进行8位量化的同时提供测评工具度量每个层级上量化带来的损失;

  • 模型转换的过程中支持层级的优化和融合;


图形编译器是用于解析深度神经网络,根据处理器和可用内存系统的功能,为所需网络提供执行信息和内存布局:

  • 在进行图形编译过程中通过内存管理,优化网络操作的执行顺序,从而提高推理性能;

  • 支持网络性能的评估,包括网络所需带宽、计算周期、推理时间等;


环境仿真:

  • 可以在PC上安装TI开发板上的仿真环境,对转换的模型bin文件验证推理效果,运行无误后再移植到开发板上运行,有助于模型和代码的调试。


3

TIDL支持哪些网络和操作呢?

大多数硬件厂商提供都深度学习SDK都会针对主流网络进行测试验证,并且对不同开源框架的支持力度也有所区别,如下图所示针对四种深度学习开源框架的ops支持情况:

从操作节点可以看出,TIDL中对Caffe的支持相对更好些,但是仍然有许多不支持的操作,所以研发人员在原型开发阶段需要考虑操作层的选择,以免后期进行网络嵌入式移植时无法转换模型。


下图是TIDL支持的现有网络,原型开发时可以参考使用已经支持的模型结构组建自己的模型:


从实际测试角度,建议用Caffe框架搭建神经网络,或者后期将pb等权重转换成caffemodel格式。小编使用Tensorflow的权重进行转换遇到各种不支持的操作。


TI的深度学习SDK不支持自定义层的功能,这点其实严重影响开发者效率,遇到不支持的层基本只能放弃。小编觉得还是Nvidia支持的好,既支持自定义插件的功能又提供CUDA编程加速前后处理。


4

如何使用TIDL做推理?

TIDL的使用流程主要分为两个阶段:转换阶段和推理阶段,如下图所示:


a.模型导入的具体步骤包括:

  • 读取配置文件;

  • 合并转换图层并统计缓冲区大小;

  • 生成量化配置文件,并统计每层的量化区间;

  • 生成编译配置文件,调用图形编译器优化性能;

  • 可视化网络结构并检查模型;


b. 模型导入后根据记录各层的区间范围做量化:

嵌入式开发板一般没有浮点加速单元或者对浮点运算支持不佳,所以采用8位/16位量化是不可或缺的环节。量化的操作是通过参考当前层参数的最大值、最小值,使用定点数和比例系数来表示浮点数。


TIDL支持对以下几种层的量化:

  • 卷积层

  • 反卷积层

  • 内积层

  • 批归一化层


c. 模型可视化功能:

TIDL提供名为GraphViz的工具进行网络结构的可视化,方便开发者分析和调试。


GraphViz的具体内容包括:

  • 可视化网络各层的卷积核参数;

  • 包含一些TIDL层的调试信息;


类似于Tensorboard的功能,如下图所示:记录了每一层的输入输出维度、卷积核尺寸、步长、空洞大小等等信息。


d. 构建输入和输出的张量缓存,并检验转换输入数据的格式进行前向推理:

模型准备好后就需要加载数据进行推理操作,通常需要先分配好输入和输出的内存占用,在TIDL中定义张量的形式需要设定好宽,高,通道数以及上下左右补齐的大小:


对于数据类型,目标只支持以下四种:

  • TIDL_UnsignedChar

  • TIDL_SignedChar

  • TIDL_UnsignedShort

  • TIDL_SignedShort


e. 网络输出的后处理:

官方文档描述的后处理内容指的可视化或者测评时需要的数据及显示效果。比如在显示时用不同的颜色画出不同类别的外接框等:


工程应用中的后处理往往是对网络输出的结构结合先验信息进行修正和过滤以达到更好的算法性能。


最后将不同算法环节拆分开来分别部署到合适的计算单元上最大化推理效率,比如将图像颜色空间的转换,尺度缩放归一化等前处理操作放在C66上计算,将网络的推理放在C7x上进行,对输出的外接框删选和修正放在C66上计算从而达到分工合作的目的。


------------------------------------------------


欢迎微信搜索并关注「目标检测与深度学习」,不被垃圾信息干扰,只分享有价值知识!


10000+人已加入目标检测与深度学习

       

       



敬最努力的我们! 

浏览 261
点赞
评论
收藏
分享

手机扫一扫分享

举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

举报