Tengine 支持 NPU 模型部署-YOLOX

Tengine 支持 NPU 模型部署-YOLOX

YOLOv5 自从问世以来,让多目标检测任务在速度和精度上都达到了非常好的表现效果。

所以最近被国内优秀的人工智能产品和解决方案公司

开源的 YOLOX 全面超越

LOGO 很美!
全面超越

旷视的同学这次的开源非常符合开(bai)源(piao)精神,提供了 ncnn、TensorRT、OpenVINO 的 example 示例(居然没有 Tengine……)

加油鸭

还好 Tengine 社区的小伙伴很给力,很快就 PR 了 YOLOX 的 example,既然这样看看 YOLOX-S 在 Khadas VIM3 上的表现结果吧。

峰值算力 5Tops 的 SBC,非常好玩。

Tengine 同国内优秀 NPU IP 厂商的开源项目 TIM-VX 早已完成适配,进一步提高了神经网络模型在 Khadas VIM3 部署效率。

准备 YOLOX-S 的模型

参考 YOLOX 提供的文档,导出 ONNX 模型

使用 大缺弦 的 onnx-sim 优化 ONNX 网络结构

大老师 yyds !

移除模型中原有的 focus 结构,Tengine 已提供相关工具,很好用的。同时由于 VIM3 暂时不支持 swish 所以使用该工具的同时也强行转换成了 hardswish。

顿时清爽了

ONNX2Tengine

建议直接使用 Tengine 仓库自带的 convert_tool,原有的项目Tengine-Convert-Tools 后续会停止维护。编译的时候需要手动打开 convert_tool 的编译选项。

cmake -DTENGINE_BUILD_CONVERT_TOOL=ON

其余过程,及模型量化相关的操作,可以参考之前 YOLOv5 的文章

运行结果

最终在 Khadas VIM3 上的耗时表现,输入尺寸采用 416*416

khadas@Khadas:~/qtang/tengine-lite/build$ ./examples/tm_yolox_timvx -m ~/models/yolox_s_u8.tmfile -i ~/images/ssd_dog.jpg -r 10
tengine-lite library version: 1.4-dev
Repeat 10 times, thread 1, avg time 26.19 ms, max_time 26.43 ms, min_time 25.83 ms
--------------------------------------
detection num: 3
 1:  78%, [ 111,  130,  566,  415], bicycle
 7:  38%, [ 471,   67,  680,  164], truck
16:  38%, [ 128,  216,  315,  551], dog
Khadas VIM3 NPU Uint8 量化模型检测结果

耗时统计(ms)

Modelsize 416*416size 640*640
YOLOX-Tiny2039
YOLOX-S2657
YOLOv5-Snull65

总结

主要贡献:

  1. 尝试了从 YOLOX-Nano、YOLOX-Tiny、YOLOX-S 在 Khadas VIM3 中 NPU 上的适配;
  2. 进一步探索用 HardSwish 直接替换(不做 finetune)Swish 激活函数的可行性;
  3. 分享社区贡献者提出的一种更高效的 Focus 计算方案(待验证)。

遗留问题:

YOLOX 继续发扬了 YOLOv5s 奇怪的激活函数,对边缘 AI 计算加速器不太友好。

好气!

传送门


我是 圈圈虫,一个热爱技术的中年大叔。快加入 OPEN AI LAB 开发者技术 QQ 群(829565581、625546458)来找我吧!溜了~~

入群秘令:CNN

编辑于 2021-07-23 23:59