点击上方“小白学视觉”,选择加"星标"或“置顶”
重磅干货,第一时间送达

文章导读

本文介绍一款TI公司提供的神经网络加速框架TIDL,该工具主要用于算法原型开发后,将得到的模型移植到嵌入式环境做部署。文中通过讲解TIDL工具提供的功能、支持的主流模型、部署的操作流程,让算法开发者进一步熟悉AI算法的落地方法。

1

什么是TIDL?

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

深度学习分为两个阶段:

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

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

4b82762aa1284b882bd66a1f2549cda8.png

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

2

TIDL支持哪些功能?

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

24dbe9375b8cd4ea46d659c36db31a8e.png

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

9796ac14a3c7a5d452c484e6a5e7ff35.jpeg

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

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

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

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

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

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

环境仿真:

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

3

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

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

e0952aa9e26a54987651a743924bf6ab.png

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

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

078335e8694e6f6c7421841c3f4658f0.png

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

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

4

如何使用TIDL做推理?

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

e08f8230d5a691dab84d3682d3d70817.png

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

  • 读取配置文件;

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

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

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

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

b63e19febf3634e8568dcd3ded052366.png

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

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

db870f8949516fe4a86d0c0fd713afc2.png

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

  • 卷积层

  • 反卷积层

  • 内积层

  • 批归一化层

c. 模型可视化功能:

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

GraphViz的具体内容包括:

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

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

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

d44be8a94606fcf1dbe9ef9cbbc8a580.png

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

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

92fbe1572bc8d13ffcc082f35f71eda4.png

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

  • TIDL_UnsignedChar

  • TIDL_SignedChar

  • TIDL_UnsignedShort

  • TIDL_SignedShort

e. 网络输出的后处理:

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

41765c3e8a900eefdc75312798c6a7b5.jpeg

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

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


好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇

 
 

f64100882925d93c18b99d470b200bb2.jpeg

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐