YOLO-FastestV2:更快,更轻!移动端高达300 FPS!参数量仅250k

2021-08-24 15:33:13 浏览数 (1)

YOLO-FastestV2项目链接:

https://github.com/dog-qiuqiu/Yolo-FastestV2

贴图先和yolo-fastest-1.1对比下:

是的,这次我没有优化精度,这次优化的是速度,毕竟追求的是fastest..,不过,用0.3%的精度损失换取30%推理速度的提升以及25%的参数量的减少,至少我觉得还是挺值,与其说追求的速度,其实更加注重的是算法效果与推理效率的性价比。

先说说Yolo-Fastest的初衷吧,其实早期轻量的目标检测大家多是用的Mobilenet-SSD,其实在实际测试中,在常用的ARM设备上是很难达到实时的,只有在一些高端手机大核全开勉强达到实时,更别说工业界常用的"性能强悍的"RK3399等ARM CPU呢,达到实时基本是不可能的。包括后来自己用mobilenet对yolov3进行轻量级的优化,用1.8BFlops的计算量在Kirin 990性能上大核全开达到~55fps,虽然能在高端手机上达到很好的速度,但是在一些低端的手机CPU以及工业界常用的高端芯片RK3399,还是没法满足实时的。其次,在实际的应用中,考虑功耗,系统资源占用,一般也不会多核全开去推理模型,毕竟还得留些资源给其他应用,所以我一般部署模型只会设置单核,最多也是双核。尤其在手机上,功耗问题特别严重,假如模型推理时CPU占用过高的话,会引起过热降频,反而会适得其反,其次还有续航的减少。

所以,不光只单单看模型的推理耗时,还得着重关注模型推理所消耗的系统资源,内存,CPU占用等,例如两个模型都可以在cpu上达到30fps,但是模型A是在单核的情况下达到实时,cpu占用才20%,模型B是在4核全开的情况下达到实时,cpu占用可能100%,但是模型B效果可能要好一些,这种情况下需要权衡利弊。

Yolo-Fastest注重的就是单核的实时推理性能,在满足实时的条件下的低CPU占用,不单单只是能在手机移动端达到实时,还要在RK3399,树莓派4以及多种Cortex-A53低成本低功耗设备上满足一定实时性,毕竟这些嵌入式的设备相比与移动端手机要弱很多,但是使用更加广泛,成本更加低廉。

先说这一版的改进吧,首先模型的backbone替换为了shufflenetV2,相比原先的backbone,访存减少了一些,更加轻量,其次Anchor的匹配机制,参考的YOLOV5,其实YOLOV5与Darknet的官版YOLOV4在Anchor的匹配机制的区别还是挺大的,这点不细讲了,网上解析一大堆,其次是检测头的解耦合,这个也是参考YOLOX的,将检测框的回归,前景背景的分类以及检测类别的分类有yolo的一个特征图解耦成3个不同的特征图,其中前景背景的分类以及检测类别的分类采用同一网络分支参数共享。最后将检测类别分类的loss由sigmoid替换为softmax。对了,这次还是只有输出11x11和22x22两个尺度的检测头,因为发现在coco上三个检测头(11x11,22x22,44x44)和两个检测头(11x11,22x22)的精度无太大差异,个人感觉原因如下:

  1. backbone对应44x44分辨率的特征图太少
  2. 正负anchor的严重不平衡
  3. 小物体属于难样本对于模型学习能力要求高

Yolo-FastestV2检测头

最后,大家可能关心的是和yolox和nanoDet的对比,精度肯定比不过啊, 不过速度应该会快个两三倍,那体积只有 1.3M 的 PP-YOLO Tiny("比 YOLO-Fastest 更轻、更快?")呢,Emmm...用int8的量化后体积和yolo-fastest的fp32的体积比,有点亏...YOLO-FastestV2 int8可是仅仅只有250kb哦,虽然我没跑过PP-YOLO Tiny,但是应该还是比他快。所以,模型的选择还是看大家需求哦。

RK3399和树莓派4搭配ncnn bf16s,YOLO-FastestV2 是可以实时的哦

模型的最终实测效果:

YOLO-FastestV2项目链接:

https://github.com/dog-qiuqiu/Yolo-FastestV2

0 人点赞