0.99M,150FPS,移动端超轻量目标检测算法PP-PicoDet来了!

Posted Python中文社区

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了0.99M,150FPS,移动端超轻量目标检测算法PP-PicoDet来了!相关的知识,希望对你有一定的参考价值。

说到目标检测,那可谓当前的自动驾驶、新零售、智慧工业等热门行业中的关键技术之一。目标检测不仅在行人、车辆、商品以及火灾检测等任务中发挥着极其关键的价值,在目标跟踪、姿态识别、手势控制、图像搜索等复合任务中也至关重要。

注*:以上视频引用于公开数据集[1]

图1 PaddleDetection产业应用效果示例

而在当前端侧智能、端云协同的行业发展趋势下,算法在移动端的部署应用则显得尤其重要。相较于统一的中心化处理,智能终端可以更好的适应差异化的环境,运维成本也更低。然而开发一个高质量的轻量目标检测模型却并不那么容易,现实环境中往往存在诸多挑战:

  1. 速度要快。比如工业视觉质量检测、自动驾驶等实时场景,延迟可以接受的范围往往需要在毫秒级别,要求极其严苛。

  2. 精度要高。在自动驾驶、火灾检测等场景,一个微小的错误都可能带来严重的损失,对误检、漏检的容忍度非常低。

  3. 体积要小。在手机端、车载、IOT等边缘端部署,算力和内存都有限,算法需要做到极致压缩。

  4. 部署环境复杂多样。硬件设备功耗、规格各色各样。适配和部署成本简直不要太大!

而今天介绍的最新开源的轻量级目标检测PP-PicoDet正是为了解决以上痛难点问题,针对模型的速度、精度和部署友好性做出优化,并取得了显著的成果。

其系列中的PP-PicoDet-S参数量仅有0.99M,却有30.6%mAP的精度,当输入尺寸为320时,推理速度甚至可达150FPS,不仅mAP比YOLOX-Nano高4.8%端侧推理速度还提升了55%相比NanoDet,mAP也高出了7.1%。

而PP-PicoDet-L则在仅有3.3M参数量的情况下mAP达到40.9%比YOLOv5s高3.7%,推理速度提升44%。

注*:以上图片引用于报告[2]

图2 PP-PicoDet性能对比图

注*:GIF中FPS是包含前处理、预测、后处理的端到端耗时,以上视频引用于公开数据集[1]

图3 PP-PicoDet移动端和不同模型效果对比

不仅如此,在此次飞桨目标检测开发套件PaddleDetection v2.3推出的多目标实时跟踪系统PP-Tracking超轻量人体关键点模型PP-TinyPose中,PP-PicoDet也是极其关键的技术模块。甚至在近日引起业界广泛关注的通用图像识别系统PP-ShiTu中,PP-PicoDet也被用作主体检测模块,以超轻量的体积实现了超越服务端大模型的效果!

话不多说,直接奉上开源代码实现:

https://github.com/PaddlePaddle/PaddleDetection

强烈建议各位Star收藏,深入研究使用。

PP-PicoDet技术报告地址:

https://arxiv.org/abs/2111.00902

PP-PicoDet android APP下载体验指路:

https://paddledet.bj.bcebos.com/deploy/third_engine/PP-PicoDet.apk

(如链接不能正常访问,可复制到浏览器进行下载)

下面,就让我们来一起看看具体都有哪些优化策略,让PP-PicoDet又小又快又准

更高性能的骨干网络

一个高性能的骨干网络对目标检测模型的性能提升有着至关重要的作用,PP-PicoDet采用了百度自研的超轻量、高精度骨干网络--ESNet(Enhanced ShuffleNet),使得整个目标检测模型不仅计算量更小、延迟更低、精度更高,同时还拥有更好的鲁棒性,能够更好地适配多种硬件环境。

ESNet是在ShuffleNetV2的基础上引入了SE模块和GhostNet中的Ghost模块,并新增深度可分离卷积,对不同通道信息进行融合来提升模型精度,同时还使用神经网络搜索(NAS)搜索更高效的模型结构,进一步提升模型性能,最终得到了在精度、速度全方面提升的骨干网络。

注*:以上图片和数据引用于报告[2]

图4 ESNet & ShuffleNetV2性能对比

更轻量的Neck和Head

在Neck部分,PP-PicoDet提出了CSP-PAN结构,使用1*1的卷积将特征的通道数与BackBone输出的最小通道数进行统一,从而减少计算量,并保证特征融合性能不受影响。此外,PP-PicoDet还在CSP-PAN的基础上再下采样一次,添加一个更小的特征尺度来提升大物体的检测效果(见下图P6分支)。

与此同时,PP-PicoDet在Neck和Head部分均采用深度可分离卷积,将3 x 3卷积核增大至5×5,来增大感受野,还保持了速度不变。并且PP-PicoDet采用了通道数和Neck一致的“耦合头”,相比于小通道数的“解耦头”有更快的预测速度。

注*:以上图片和数据引用于报告[2]

图5 PP-PicoDet整体架构示意图

更精准的采样策略

PP-PicoDet受到YOLOX等优秀算法的启发,使用了更精准的SimOTA采样策略,随训练过程动态变换标签分配方式,通过在目标区域采集高质量的样本来有效加速模型收敛。在此基础上对其中的cost矩阵计算进行改造,使用VFL+GIoU替代原本的CELoss+IoU,在速度无损的情况下还能有效提升1%的精度。

除此之外,PP-PicoDet还使用了H-Swish激活函数替代Relu;使用Cosine学习率衰减策略;使用Cycle-EMA;加入少量的如Crop、Flip、Multi-Scale等数据增强策略进行更稳定的训练,使得模型精度再次提升3%。

下面就让我们一起看看以上这一系列优化策略的最终效果,从中可以看到:无论是精度还是速度,PP-PicoDet都表现卓越!

注*:测试设备为骁龙865,Threads=4,FP16,NCNN(Paddle Lite测试结果为*),以上图片和数据引用于报告[2]

图6 PP-PicoDet在COCO上和其他轻量级检测器性能试验对比

更完备的部署支持

作为真正的产业级开发利器,PaddleDetection通过完备支持飞桨原生推理库Paddle Inference、飞桨轻量化推理引擎Paddle Lite,使开发者可以快速在主流服务器、端侧芯片上实现高性能部署。

并且支持快速导出为ONNX格式,使开发者可以通过ONNX生态能力进行更广泛的算法部署应用,可以通过自己熟悉的移动端引擎进行PP-PicoDet的部署和推理。

除此以外,还提供OpenVINO加速部署方案、Android Demo,并且所有流程代码均已开源,全方位满足各类硬件环境部署需求,让深度学习落地的最后一公里再无障碍!

这样的一个目标检测开发神器已经被多家像国家电网、武汉铁路局、宁德时代这样的行业巨头公司所应用,真正实现了助力开发者,赋能产业智能化!

链接指路:

https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.3/configs/picodet

后续工作

PP-PicoDet的诞生源于开源,也是回馈开源。考虑到工业、互联网、自动驾驶等各行各业对移动端、边缘端部署轻量化目标检测模型的需求越来越强烈,PP-PicoDet致力于提供一种真正面向产业实践的,更高性能、轻量化、更易落地的目标检测方案,而非单纯追求模型指标。

与此同时,希望PP-PicoDet的算法本身以及优化思路,可以在给业界开发者带来更好算法的同时,也带来更多的算法优化启发,能够在此基础上继续提升产出更多优秀成果,也欢迎大家通过用户群、Issue等方式和我们探讨交流。在此希望和业界开发者携手为中国的开源技术而努力!

以上所有代码实现,均在PaddleDetection飞桨目标检测开发套件中开源提供:

https://github.com/PaddlePaddle/PaddleDetection/tree/release/2.3

欢迎感兴趣的小伙伴一起体验、反馈建议并参与共建!你的Star是对我们工作的最大鼓励~

课程预告

百度飞桨为了帮助大家能快速、深入、全面地了解目标检测技术,将于11月23-26日19:00-20:00特地开设“目标检测4日直播课”。由资深研发工程师倾囊相授多年“炼丹”经验,配套真实工业落地场景案例,最先进的调优方式、训练技巧、优化技巧和工业部署方案,带您一网打尽,千万不要错过!

微信扫码报名课程,即可加入官方技术交流群,在这里您可以获得更高效的问题答疑,与各行各业开发者充分交流,期待您的加入!更多飞桨的相关内容,请参阅以下内容。

扫码报名直播课,加入技术交流群

精彩内容抢先看

官网地址:

https://www.paddlepaddle.org.cn

飞桨PaddleDetection项目地址:

GitHub: https://github.com/PaddlePaddle/PaddleDetection

Gitee: https://gitee.com/paddlepaddle/PaddleDetection

(如果您觉得PP-PicoDet对您带来了一些启发或者的确实用的话,也欢迎您可以给PaddleDetection项目点亮Star。)

飞桨开源框架项目地址:

GitHub: https://github.com/PaddlePaddle/Paddle

Gitee: https://gitee.com/paddlepaddle/Paddle

图片数据引用说明:

[1] 所用到的所有数据分别来源于以下数据集:

《表计读数》数据来源于:中兴克拉数据集

《安全帽检测》数据来源于:https://github.com/njvisionpower/Safety-Helmet-Wearing-Dataset   

《自动驾驶》数据集来源于:Yu F, Chen H, Wang X, et al. Bdd100k: A diverse driving dataset for heterogeneous multitask learning[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2020: 2636-2645.

《人员摔倒检测》数据来源于:泰思通数据集

《火灾/烟雾检测》数据来源于:https://github.com/gengyanlei/fire-smoke-detect-yolov4

《PCB瑕疵检测》数据来源于:北京大学印刷电路板(PCB)瑕疵数据集

《多人舞蹈关键点检测》数据集来源于YouTube. (2016, August 10). 100 People of Dance [Video file]. Retrieved from https://www.youtube.com/watch?v=qrTi2aLx8dw  

《行人检测与跟踪》数据来源于公开数据集:Milan A, Leal-Taixé L, Reid I, et al. MOT16: A benchmark for multi-object tracking[J]. arXiv preprint arXiv:1603.00831, 2016.

《飞行器跟踪》、《战斗机跟踪》数据集来源于:Bai H, Cheng W, Chu P, et al. GMOT-40: A Benchmark for Generic Multiple Object Tracking[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 6719-6728.

《车辆跟踪》数据集来源于Zhu P, Wen L, Du D, et al. Vision meets drones: Past, present and future[J]. arXiv preprint arXiv:2001.06303, 2020.

《人头跟踪》数据来源于:Sundararaman R, De Almeida Braga C, Marchand E, et al. Tracking Pedestrian Heads in Dense Crowd[C]//Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition. 2021: 3865-3875.

[2] 图片及数据来自PP-PicoDet技术报告:https://arxiv.org/abs/2111.00902

以上是关于0.99M,150FPS,移动端超轻量目标检测算法PP-PicoDet来了!的主要内容,如果未能解决你的问题,请参考以下文章

AI最前线精准优质-资讯|分享|热议第42期

AI最前线精准优质-资讯|分享|热议第42期

轻量型目标检测算法总结

只有0.7M?超超超轻量SOTA目标检测模型揭秘!

如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (2: 目标检测与发送端)

如何使用Django 结合WebSocket 进行实时目标检测呢?以yolov5 为例,实现:FPS 25+ (2: 目标检测与发送端)