超越YOLOv5,1.3M超轻量,高效易用,目标检测领域这一个就够了!
允中 发自 凹非寺
来源 量子位
目标检测技术作为视觉技术届的顶梁柱,不仅单兵作战在人脸、车辆、商品、缺陷检测等场景有出色的表现,也是文本识别,图像检索、视频分析、目标跟踪等复合技术的核心模块,应用场景可谓比比皆是。
各界开发者对高精度、高效率的目标检测算法,以及便捷高效的开发、部署方式的追求可谓是极致的。但业界却缺少全面兼顾高性能算法、便捷开发、高效训练及完备部署的开源目标检测项目。百度飞桨端到端目标检测开发套件PaddleDetection重磅升级为2.0版本后,终于全面兼顾业界开发者的需求,成长为中国产业实践中目标检测领域一柄重器。
让我们先来概览一下PaddleDetection2.0本次升级内容:
1、全明星算法阵容:
新增超越YOLOv4、YOLOv5 的PP-YOLOv2,1.3M 超超超轻量目标检测算法PP-YOLO Tiny,全面领先同类框架的RCNN系列算法,以及SOTA 的Anchor Free算法:PAFNet(Paddle Anchor Free)
2、全面功能覆盖:
除全系列通用目标检测算法外,额外覆盖旋转框检测、实例分割、行人检测、人脸检测、车辆检测等垂类任务。
3、易用性全面提升:
全面支持动态图开发,压缩、部署等全流程方案打通,极大程度的提升了用户开发的易用性,加速了算法产业应用落地的速度。
△ 图1 PaddleDetection2.0明星通用目标检测模型的性能
着急的小伙伴可以直接传送门前往开源项目主页直接体验:https://github.com/PaddlePaddle/PaddleDetection
而本篇也将为大家详细解读一下PaddleDetection2.0的升级内容,初步领略下这个检测重器的杀伤力:
一、更多更好的算法
1. PP-YOLOv2,比YOLOv4、YOLOv5更强!
自去年PP-YOLO一度成为产业实践最佳目标检测模型后,随着PaddleDetection2.0的发布,PP-YOLO也推出了v2版本。延续v1版本的理念,PP-YOLOv2持续深化考虑在产业实践中需要兼顾算法的精度和速度,PP-YOLOv2(R50)mAP从45.9%达到了49.5%,相较v1提升了3.6个百分点,FPS高达106.5FPS,超越了YOLOv4甚至YOLOv5!而如果使用RestNet101作为骨架网络,PP-YOLOv2(R101)的mAP更高达50.3%,并且比同等精度下的YOLOv5x快15.9%!
完整论文请参考:https://arxiv.org/abs/2104.10419
你无需再在眼花缭乱的目标检测算法中对比选择,用PP-YOLOv2就对了!
△ 图 2 PP-YOLOv2 性能比较
2. PP-YOLO Tiny,1.3M,比YOLO-Fastest、NanoDet更轻量!
随着物联网的快速发展,端侧芯片部署轻量化深度学习算法的需求越来越强烈,基于此,PaddleDetection 2.0 推出了经过深度优化后,体积仅为1.3M的超超超轻量目标检测算法—PP-YOLO Tiny。如下表所示,在coco val2017数据集测试,输入尺寸320px版本,mAP达到20.6,单张预测时延10.83ms(92.3FPS);输入尺寸416px版本,mAP达到22.7,单张预测时延15.48ms(64.6FPS)。比YOLO-Fastest、 NanoDet更强!
△ 图3 PP-YOLO Tiny性能
3. RCNN系列算法全面超越同类开发工具!
除了YOLO系列之外,PaddleDetection2.0 还将目标检测的基础两阶段系列算法—RCNN进行了整体升级。如表1可以清晰的看到,RCNN系列模型(Faster RCNN, Mask RCNN, Cascade RCNN等)在PaddleDetection进行训练,比mmDetection和Detectron2在更短的时间获得更高的精度!
△ 表1:RCNN系列模型在PaddleDetection、mmDetection和Detectron2开发套件下,在COCO 2017 val集上的mAP对比结果
4. SOTA Anchor Free算法:PAFNet(Paddle Anchor Free)& PAFNet-Lite
相较于SSD、RCNN等系列各种Anchor-Based算法,Anchor-Free算法拥有更少的超参、更易配置、对多尺度目标检测效果更好等优点,但也存在检测结果不稳定、训练时间长等问题,是近些年科研领域的热点方向。飞桨当然一直紧跟全球科研动向,基于TTFNet进行多维度的优化,推出了在COCO数据集精度42.2,V100预测速度67FPS, 处于anchor free领域SOTA水平的PAFNet(Paddle Anchor Free)算法!同时提供移动端轻量级模型PAFNet-Lite,COCO数据集精度达到23.9,麒麟990芯片延时26ms。
△ 图 4 PAFNet网络结构
5. 旋转框检测算法—S2ANet
在一般的的目标检测项目中,我们通常使用水平矩形框为检测框对目标进行框定。而在产业场景中,例如质检、遥感图像,目标往往是任意方向排列且长宽比差别比较大的, 用水平矩形框则会出现大量空白非目标的区域,且丢失了目标的朝向角度信息,例如图5 精度不能满足业务需求。旋转框目标检测算法就可以很好的解决这类问题,它在检测出四边形矩形框的同时可以同时获得旋转角度。PaddleDetection 2.0本次的升级,就新增了高性价比旋转框检测算法—S2ANet,方便开发者直接取用或进一步开发。
△ 图5 左: 传统检测效果; 图6 右:S2ANet旋转框检测效果
至此PaddleDetection共包含了19类共231个模型算法,其中动态图预训练模型70个,静态图预训练模型161个。其中包括PP-YOLO、RCNN、PAFNet系列等明星算法!覆盖通用目标检测、人脸检测、行人检测、车辆检测、旋转框检测、实例分割任务,得益于飞将框架和PaddleDetection套件本身的设计,算法训练的效率也超越同类开发工具!
二、更好的易用性
1. 动态图开发,灵活调试代码
PaddleDetection 2.0基于PaddlePaddle 2.0.1版本,默认使用动态图进行开发,在这种模式下,每次执行一个运算,可以立即得到结果,而不是事先定义好网络结构再执行。用户也可以快速获取网络结构、每层输入输出和对应梯度信息等,并对应进行快速调整。这样用户可以更快速的组织代码,更容易的调试程序。
2.更便捷的安装方式
除了传统的git clone方式,PaddleDetection 2.0这次还新增了whl包的发布,用户可以直接通过pip install的方式安装,由此可以通过import ppdet的方式调用PaddleDetection 2.0下的API快速完成自己的检测任务。
三、训练、压缩、部署全流程打通
为了进一步加速深度学习算法的产业落地,PaddleDetection 2.0动态图顺畅打通了算法的全流程部署。
△ 图 7 PPDet全流程方案
在完成模型训练过程中或之后,PaddleDetection2.0方便支持开发者使用PaddleSlim对算法进行量化、蒸馏、裁剪等压缩优化,并支持快速将模型由动态图转化为静态图,实现模型的高效多平台预测部署。
1. 模型压缩能力
为了满足开发者对计算量、模型体积、运算速度等极致的追求,PaddleDetection 2.0动态图模式下基于PaddleSlim新增了多种模型压缩能力,包括剪裁,量化,蒸馏以及剪裁+蒸馏联合策略压缩方案,可大幅减少模型参数或者计算量,便于部署在受限的硬件环境中。由下表可以看出,量化策略为模型带来1.7%的精度提升,同时体积压缩3.71倍,速度提升1.46倍!而采用蒸馏+裁剪的联合策略,在精度几乎无损的情况下,体积压缩了3.05倍,加速1.58倍!
△ 表3:基于YOLOv3-MobileNetv1模型进行模型压缩的效果对比
2. 预测部署能力
得益于飞桨预测库系列产品Paddle Inference、Paddle Lite和Paddle Serving的能力,PaddleDetection 2.0支持开发者快速在Linux、Windows、NV Jetson等多系统多平台进行算法部署,同时提供了Python预测和C++预测两种方式,覆盖主流目标检测算法。另外适配TensorRT,支持TensorRT动态尺寸输入及TensorRT INT8量化预测, 全面支持用户进行硬件加速。
△ 表4:Tesla V100上各主流算法预测速度对比
小结:
本次PaddleDetection2.0的重磅升级,为开发者提供了目标检测领域全新的开发体验, mAP 50.3 的PP-YOLOv2超越YOLOv4、YOLOv5,1.3M 超轻量PP-YOLO Tiny超越YOLO-Fastest、NanoDet,RCNN系列算法全面领先其他框架水平,PAFNet(PaddleAnchorFree)SOTA,还覆盖了旋转框检测、实例分割、行人检测、人脸检测、车辆检测等任务。动态图的升级和全流程方案的打通,极大程度的提升了用户开发的易用性。不论你是学术科研工作者,还是产业开发者;不论你是刚入门的萌新,还是已经历练成为大神,PaddleDetection 2.0都能帮你更快的进行算法实验、获得高性能的目标检测算法、投入产业实用。
如此用心制作的高水准产品,期待业界开发者参与一同共建!
参考链接
更多PaddleDetection信息,欢迎点击文末阅读原文或以下链接,访问GitHub项目体验或Star:
https://github.com/PaddlePaddle/PaddleDetection