(说明:如果您认为下面的文章对您有帮助,请您花费一秒时间点击一下最底部的广告以此来激励本人创作,谢谢)
基于Yolo改进的轻量级目标检测算法,参数仅为250k,智能手机可以达到300fps。
Yolo Fastest专注于单核、实时推理性能和实时条件下的低CPU使用率。它不仅可以在手机上实现实时性能,还可以在RK3399、树莓派Pi 4和各种Cortex-A53上实现,同时保持低成本。功耗设备满足某些实时性能标准。毕竟,这些嵌入式设备比手机弱得多,但它们的应用范围更广,价格也更便宜。
让我谈谈Yolo的初衷。大多数人在早期轻型物体检测中使用Mobilenet SSD。在实际测试中,难以在常用的ARM设备上实现实时性;这只能在一些高端手机上实现。所有大内核在启动时几乎都无法达到实时性,更不用说“强大”的RK3399和业界其他常用的ARM CPU了。实时性基本上是不可能的。
与Yolo网络对比
首先,将Yolo-FastestV2与Yolo-FastestV1.1进行比较:
作者没有优化精度,而是优化了速度。毕竟,作者追求的是最快的。然而,0.3%的精度损失已被替换为推理速度提高30%,参数数量减少25%。不追求速度,但更注重算法效果和推理效率的成本效益。
后来,作者用mobilenet优化了YOLOV3的轻量级。Kirin 990的运算速度为1.8B次,性能可达~55fps,大内核完全开启。虽然高端手机可以实现良好的速度,但业内常用的一些低端手机CPU和高端芯片RK3399仍无法满足实时性要求。
其次,在实际应用中,考虑到功耗和系统资源占用,通常没有充分利用多核对模型进行推理。毕竟,有些资源是为其他应用程序保留的,所以通常使用单核,最多使用双核。尤其是在手机上,功耗问题尤为严重。如果在模型推断期间CPU使用率过高,将导致过热和频率降低,这将适得其反。
最后,电池寿命将缩短。尤其是在手机上,功耗问题尤为严重。如果在模型推断期间CPU使用率过高,将导致过热和频率降低,这将适得其反。
Yolo-FastestV2的改进
首先,将模型的主干替换为ShuffleNet V2。与原始主干相比,内存访问减少且更轻。其次,Anchor的匹配机制指的是YOLOV5,它实际上是Yolov 5和Darknet的官方版本。YOLOV4在Anchor中的匹配机制是完全不同的。
下一步是检测头的解耦。这也是对YoloX的参考。它将返回检测帧并对前景和背景进行分类。检测类别的分类将Yolo的特征图耦合到三个不同的特征图中,其中前景背景的分类和检测类别的归类共享相同的网络分支参数。
最后,用s形软最大值代替检测损失类别分类。
顺便说一句,这次只有两个刻度检测头输出11x11和22x22,因为三个检测头(11x11、22x22、44x44)和两个检测头的精度在coco中没有太大差异。我认为原因如下:
- 主干线对应于44x44分辨率的特征图太少;
- 正archors和负archors严重失衡;
- 小对象是困难的样本,需要很高的模型学习能力;
因此,我们不仅应该关注耗时的模型推理,还应该关注模型推理所消耗的系统资源、内存和CPU使用。例如,两种型号的CPU都可以达到30fps,但在单核实时的情况下,CPU仅占型号A的20%。当四个内核完全打开时,B型可以实现实时性。CPU使用率可能为100%,但B型性能可能更好。在这种情况下,需要权衡利弊。
稍后,您可能会更关注与yolox和nanoDet的比较。准确度肯定无法与之相比,但速度应该快两到三倍。PP-YOLO Tiny的体积仅为1.3M(“比YOLO更轻,更快?”)与Yolo最快fp32相比,int8的容量有点短。Yolo-FastestV2 int8只有250kb,虽然我还没有运行PP-Yolo Tiny,但它应该仍然比这快。因此,模式的选择取决于每个人的需求。
RK3399和树莓Pi 4与ncnn bf16s匹配,但YOLO-FastestV2可以是实时的。
模型的最终测量效果:
github链接:https://github.com/dog-qiuqiu/Yolo-FastestV2