近两年目标检测算法发展非常的快,恍惚一看,单阶段算法几乎统一了目标检测,各种高性能的目标检测算法层出不穷,印象中是在YOLOv4出来后,基于YOLO的改进变得一发不可收拾,各种改进版本精度越来越高、速度越来越快,同时模型体积也越来越小,越来越多的轻量型模型涌现,更适合移动端部署。这篇文章花点时间来盘点一下一些在github上比较火的轻量型目标检测算法,收藏也方便以后工程中实践。
github:https://github.com/ultralytics/yolov5
说到目前最火的目标检测算法,yolov5绝对当仁不让,如果说yolov4是导火线,那yolov5就是引爆目标检测界的那个火石,记得当初刚出来的时候,还被大家扣上一个“名不正,言不顺”的帽子,因为没有论文产出,甚者很多工作和yolov4高度重合,很多业内人事都不愿意承认它作为yolo系列的“正统”,但是随着时间的演进,yolov5逐渐为自己证明,其高精度、低耗时、易训练、易部署、好上手等特点,让yolov5的热度一举超过yolov4,成为当前目标检测界的主流,并且作者也一直在维护,新版本精度越来越高、速度越来越快、模型越来越小,截至目前为止,yolov5已经迭代到了第六个版本。
关于yolov5的原理我就不多介绍了,hub中提供了五个基线版本,x、l、m、s、n,前四个模型是一直都有的,虽然说它们模型体积相对于其他算法而言已经很小了,但是对于移动端而言还是太大了一些,所以作者推出了了n版本,专门为了移动端设计,参数量仅为1.9M,map精度也达到了28.4,各个模型精度指标如下所示:
github:https://github.com/Megvii-BaseDetection/YOLOX
yolox是作为今年的yolo系列的后起之秀,一出来各种夸张的标题就把我吓到了(不得不说有些公众号的标题党太恶心了),还好自身实力过硬,也收割了一波粉丝,最关键的是把部署的代码都帮你写好了,可谓业界良心,这也为了后面的目标检测算法竖立了标杆。
yolox的原理网上也很多,篇幅原因我就不详细讲解了,来看下yolox的精度指标,与yolov5对比,似乎每个版本的精度都有很大提升,实际项目情况我也没有对比过,不过在发布后的大半年时间里业内认可度非常不错,两者都是非常优秀的算法,只能说萝卜青菜,各有所爱了,小孩子才做选择,我全都要!!
因为本文主要介绍的是轻量型模型,所以重点关注轻量的模型Nano和tiny版本,nano版本在0.91M参数量的情况下,416尺度推理精度达到了25.8,还是非常不错的;再看tiny版本,tiny版本一直是yolo系列中的一个特色,所以yolox也继续发扬了这一项工作,在参数量减少的情况下,大幅提高了tiny版本的精度,达到了32.8,要知道18年yolov3刚出来的时候,最高的精度也才33,现在tiny版本的精度已经赶上v3正版了,不得不感叹这两年的目标检测技术发展的迅猛,隐约有种被卷死的不详预感,所以各种同学一定要坚持学习啊,千万不要懈。
github:https://github.com/RangiLyu/nanodet
YOLO之外的另一选择,手机端97FPS的Anchor-Free目标检测模型NanoDet现已开源
超简单辅助模块加速训练收敛,精度大幅提升!移动端实时的NanoDet升级版NanoDet-Plus来了!
nanodet去年刚出来的时候非常的火,基于FCOS改进的anchor-free算法,在速度和精度上都有很好的权衡,并且部署比较友好,当时我也试过这个模型,但是训练出来的效果并不是特别好,所以就一直没怎么用,就当我快忘了它的时候,NanoDet-Plus版本出来了!!
超简单辅助模块加速训练收敛,精度大幅提升!与上一代的NanoDet相比,在仅增加1毫秒多的延时的情况下,精度提升了30%。与YOLOv5-n, YOLOX-Nano等其他轻量级模型相比,在精度和速度上也都高了不少!同时NanoDet-Plus改进了代码和架构,提出了一种非常简单的训练辅助模块,使模型变得更易训练!同时新版本也更易部署,同时提供ncnn、OpenVINO、MNN以及安卓APP的Demo!!
nanodet-plus精度指标看下图,以1.17M的参数量,在416大小的推理下,map达到了30.4,1.5x的版本甚至达到了34.1,且参数量仅为2.44M:
github:https://github.com/PaddlePaddle/PaddleDetection
ARM-CPU150FPS | PicoDet助力移动端达到超实时检测(强烈建议工程人员学习)
算法是好算法,但是百度的宣传标题一如既往的夸张,以至于刚出来就被很多人吐槽,不过无伤大雅,算法本身实力够硬,宣传夸张点也不影响我们学习。
作者研究了anchor-free 策略在轻量级目标检测模型中的适用性,增强了Backbone结构,设计了Neck的轻量化结构,提高了网络的特征提取能力。改进了标签分配策略和损失函数,使训练更加稳定和高效。
通过这些优化,创建了一个新的实时物体检测系列架构,名为PP-PicoDet,它在移动设备上实现了优越的物体检测性能。与其他流行的模型相比,该模型架构在准确性和延迟之间实现了更好的权衡。PicoDet-S只有0.99M参数,mAP值为30.6%,与YOLOX-Nano相比,mAP提高了4.8%,同时移动CPU延迟降低了55%,与NanoDet相比,mAP提高了7.1%。当输入尺寸为320时,在移动ARM CPU上达到123 FPS(使用Paddle Lite时达到150 FPS)。PicoDet-L仅3.3M参数的mAP值为40.9%,mAP值提高了3.7%,比YOLOv5s快44%。如下图所示,本文模型远远优于轻量级目标检测的最新结果。
这项工作是百度开源的项目,pp-picoDet也加入了PaddleDetetion的大家庭,如果想用的话需要先熟悉一下paddlepaddle框架,不过说句题外话,paddlepaddle最近的开源工作都做的非常多,基本上覆盖了各个领域,并且效果也停不错的,奈何框架生态一直不太行。
github:https://github.com/dog-qiuqiu/Yolo-Fastest
github:https://github.com/dog-qiuqiu/Yolo-FastestV2
Yolo-Fastest:超超超快的开源ARM实时目标检测算法
Yolo-FastestV2:更快,更轻,移动端可达300FPS,参数量仅250k
yolo-fastest应该是第一个把yolo系列参数量逼到1M以内的目标检测算法,由记得刚出来的时候非常的震惊,模型大小仅为1.3M,让我第一次直观的感受到原来目标检测算法也可以设计得这么小。感兴趣的可以看上面两篇文章介绍,目前已经更新到V2版本,精度指标如下:
github:https://github.com/ppogg/YOLOv5-Lite
YOLOv5-Lite:更轻更快易于部署的YOLOv5
一个非常优秀的轻量型yolov5改进版本,整体算法与yolov5基本一致,通过修改了yolov5的backbone达到了模型压缩的目的。
根据不同的backbone分别提供了s、c、g版本,s版本的backbone为shufflenet,c版本的backbone为LCNet,g版本的backbone为Repvgg,与各个轻量型算法的精度对比如下:
这个项目用起来比较友好,开箱方式与yolov5一样,上手起来比较简单,精度也不错,非常值得学习。
github:https://github.com/ZHANGHeng19931123/MutualGuide
【BMVC2021】新一代紧凑型目标检测器MutualGuide
这个项目是偶然间看到了,其实也不算是轻量型吧,因为提供的各个模型参数量其实还是挺大的,但是因为使用的backbone都是偏轻量的,所以还是决定把它算进来。
项目特点:
相较于众多已经存在的general目标检测框架,MutualGuide专门针对嵌入式设备设计,在检测速度上有很大优势。
支持RetinaNet、FCOS、YOLOF等多种检测头,ResNet、VGG、RepVGG、ShuffleNet等多种特征提取网络,灵活客制化你自己的模型结构。
融入Mixup、EMA、Cosine lr decay、Context Enhancement Module、GFocal
loss、Balanced L1 loss、GIOU loss等提升检测性能的工程技巧。
支持custom数据集训练与测试、支持混合精度训练和TensorRT推理加速。
项目结构清晰,适合初学者入门并熟悉目标检测的pipeline。
github:https://github.com/meituan/YOLOv6
YOLOv6:又快又准的目标检测框架开源啦
YOLOv6 是美团视觉智能部研发的一款目标检测框架,致力于工业应用。本框架同时专注于检测的精度和推理效率,在工业界常用的尺寸模型中:YOLOv6-nano 在 COCO 上精度可达 35.0% AP,在 T4 上推理速度可达 1242 FPS;YOLOv6-s 在 COCO 上精度可达 43.1% AP,在 T4 上推理速度可达 520 FPS。在部署方面,YOLOv6 支持 GPU(TensorRT)、CPU(OPENVINO)、ARM(MNN、TNN、NCNN)等不同平台的部署,极大地简化工程部署时的适配工作。
目前只放出了三个小模型,大模型不知道是性能达不到前面几个的标准还是啥,迟迟没有放出来,不过通过对放出来的小模型精度速度等性能对比,效果还是很不错的,不妨在项目中使用试试。
github:https://github.com/dog-qiuqiu/FastestDet
FastestDet: 比yolo-fastest更快!更强!更简单!全新设计的超实时Anchor-free目标检测算法
这可能是目前最小的目标检测网络,作者还是上面的fastest-yolo原作,参数量极致的压缩,虽然精度差了点,但是考虑到能把模型参数量压缩得这么小,还是很值的学习一下的,对于一些精度要求不是很高的场景,还是值的去试一试。
FastestDet是设计用来接替yolo-fastest系列算法,相比于业界已有的轻量级目标检测算法如yolov5n, yolox-nano, nanoDet, pp-yolo-tiny, FastestDet和这些算法压根儿不是一个量级,FastestDet无论在速度还是参数量上,都是要小好几个数量级的(不要在拿int8的模型和我fp32的模型比体积了,不公平),但是精度自然而然也比不过。FastestDet是针对计算资源紧缺的ARM平台设计的,突出单核效能,因为在实际业务场景中,不会把所有CPU资源都给推理框架做模型推理的,假如说你想在例如树莓派, RK3399, RK3568去跑实时目标检测,那么FastestDet是比较好的选择,或者移动端上不想占用太多cpu资源,也可以去用单核并设置cpu sleep去推理FastestDet,在低功耗的条件下运行算法。