YOLOv5 自从问世以来,让多目标检测任务在速度和精度上都达到了非常好的表现效果。所以最近被国内优秀的人工智能产品和解决方案公司https://www.megvii.com/
开源的 YOLOX 全面超越
https://github.com/Megvii-BaseDetection/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。https://github.com/OAID/Tengine/tree/tengine-lite/tools/optimize
顿时清爽了
ONNX2Tengine
建议直接使用 Tengine 仓库自带的 convert_tool,原有的项目Tengine-Convert-Tools 后续会停止维护。编译的时候需要手动打开 convert_tool 的编译选项。
cmake -DTENGINE_BUILD_CONVERT_TOOL=ON
其余过程,及模型量化相关的操作,可以参考之前 YOLOv5 的文章https://zhuanlan.zhihu.com/p/360138163
运行结果
最终在 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 量化模型检测结果
总结
主要贡献:
- 尝试了从 YOLOX-Nano、YOLOX-Tiny、YOLOX-S 在 Khadas VIM3 中 NPU 上的适配;
- 进一步探索用 HardSwish 直接替换(不做 finetune)Swish 激活函数的可行性;
- 分享社区贡献者提出的一种更高效的 Focus 计算方案(待验证)。
遗留问题:
YOLOX 继续发扬了 YOLOv5s 奇怪的激活函数,对边缘 AI 计算加速器不太友好。
好气!
原文:知乎
作者:圈圈虫
相关文章
我是圈圈虫,一个热爱技术的中年大叔。快加入 OPEN AI LAB 开发者技术 QQ 群(829565581)来找我吧!溜了~~
入群秘令:CNN
更多Tengine相关内容请关注Tengine-边缘AI推理框架专栏。