前言
Nanodet和YOLOv5都是我很喜欢的检测算法,Nanodet超轻量对嵌入式设备极其友好,u版yolo训练起来速度快效果好,功能强大
前两天旷视开源了YOLOX,我看了一下算法大体和代码实现,总的来讲还是比较有新意,去掉了anchors,有点融合FCOS的意思,不过纸面上的mAP比yolov5的p6系列还是有一定差距的 不过YOLOX代码写的真不错,比u版yolo简洁多了。
以下测试均在python中完成
PC上的模型推理速度
mAP我就不比了,这几个算法在原repo里都有coco数据集上的精度测试结果
PC配置:CPU:i7-10875H GPU:RTX2070super Max-Q
将YOLOX、YOLOv5、Nanodet仓库里的模型,对30张图片进行测速,取均值
model | size | pytorch | onnx |
---|
YOLOXnano | 416x416 | 63.5ms | 14.9ms | YOLOXtiny | 416x416 | 88.0ms | 26.0ms | YOLOXs | 640x640 | 273.5ms | 70.6ms | YOLOXx | 640x640 | 1607.2ms | 528.6ms | – | – | – | – | YOLOv5s | 640x640 | 157ms | 58ms (134ms opencv) | YOLOv5s6 | 640x640 | 156ms | 67ms | YOLOv5x | 640x640 | 998ms | 428ms | YOLOv5x6 | 640x640 | 1067ms | 447ms | – | – | – | – | Nanodet_s | 320x320 | 54ms | 70ms opencv | Nanodet_m | 416x416 | 87ms | 119ms opencv |
pytorch列是直接用的官方demo的测速结果 onnx列是将pytorch模型转成onnx后,分别采用onnxruntime和opencv的dnn module的测速结果,因为opencv中部分onnx算子实现较慢,因此推理速度比onnxruntime慢很多
Atlas200DK推理测速结果
Atlas200dk配置:CPU: 8xArm Cortex A55 NPU: Ascend310(8~22TOPs算力) 由于前几天调试atlas碰到了很多坑,到现在才终于成功部署了v5和nanodet的模型,YOLOX的模型将尽量进行测试
model | size | cann(npu) | onnx(cpu) |
---|
YOLOXnano | 416x416 | | | YOLOXtiny | 416x416 | | | YOLOXs | 416x416 | | | – | – | – | – | YOLOv5s | 640x640 | 74.3ms | 1187ms | YOLOv5s6 | 640x640 | | | YOLOv5x | 640x640 | 249ms | 11813ms | – | – | – | – | Nanodet_s | 320x320 | 8ms | 170.5ms | Nanodet_m | 416x416 | 11ms | 280.0ms |
在Atlas200dk上运行yolov5x和以及yolov4的速度差不多都是4FPS,与cpu相比提升了15到250倍。
查了下其他人在英伟达的xavier nx (22 TOPs算力)上跑yolov4和v5的速度也差不多是3~4fps,这俩板子的算力差不多,都挺强的,而且使用C++做部署应该还可以再提升百分之四五十的推理速度。
过两天把YOLOX的数据放上来(不过推理速度肯定比这俩慢了)
并且还会更新一个在Atlas上部署模型的教程,包括pytorch转onnx,onnx模型优化,atc工具将onnx转om模型,acl模型部署方法,踩到的坑巨多,都是辛酸泪啊…
|