Auto Byte

专注未来出行及智能汽车科技

微信扫一扫获取更多资讯

Science AI

关注人工智能与其他前沿技术、基础学科的交叉研究与融合发展

微信扫一扫获取更多资讯

超越YOLOv5的PP-YOLOv2和1.3M超轻量PP-YOLO Tiny都来了!

mAP 50.3%,106.5FPS 的 PP-YOLOv2,1.3M超轻量PPYOLO Tiny, 让目标检测界再起风波。

单阶段目标检测界的扛把子 --YOLO,以其 「又快又好的效果」 在学术及产业界全面风靡。自 20 年下半年 YOLOv4、YOLOv5、PP-YOLOYOLO-Fastest 和 YOLOv4 Tiny 等等轮番轰炸、掀起 「YOLO 狂潮」 后,时隔半年,超越 YOLOv5 的 PP-YOLOv2 和 1.3M 超超超轻量级的 PP-YOLO tiny 一起来了!!!

图 1:PP-YOLOv2 和其他目标检测器性能对比

如图 1 可见,PP-YOLOv2 在同等速度下,精度超越 YOLOv5!相较 20 年发布的 PP-YOLO,v2 版本在 COCO 2017 test-dev 上的精度提升了 3.6%,由 45.9% 提升到了 49.5%;在 640*640 的输入尺寸下,FPS 达到 68.9FPS,而采用 TensorRT 加速的话,FPS 更是达到了 106.5!这样的性能,超越了当前所有同等计算量下的检测器,包括 YOLOv4-CSP 和 YOLOv5l !

而如果将骨架网络从 ResNet50 更换为 ResNet101,PP-YOLOv2 的优势则更为显著:mAP 达到 50.3%,速度比同计算量的 YOLOv5x 高出了 15.9%。

不仅如此,与 PP-YOLOv2 一同面世的,还有体积只有 1.3M 的 PP-YOLO Tiny,比 YOLO-Fastest 更轻、更快!这样超超超轻量的算法面世,更是很好的满足了产业里大量边缘、轻量化、低成本芯片上使用目标检测算法的种种诉求!


感兴趣的小伙伴可以直接查看 PP-YOLOv2 论文:https://arxiv.org/abs/2104.10419
并查看 PP-YOLOv2 和 PP-YOLO Tiny 的代码实现:https://github.com/paddlepaddle/paddledetection
(记得 Star 收藏一下,支持开源也防止走丢~)

PP-YOLOv2:产业最实用的目标检测

关注百度飞桨的小伙伴可能还记得,PP-YOLO(https://arxiv.org/abs/2007.12099)是在 YOLOv3 的基础上,采用了一整套优化策略,在几乎不增加模型参数和计算量(FLOPs)的前提下,提升检测器的精度得到的极高性价比(mAP 45.9,72.9FPS)的单阶段目标检测器。

而 PP-YOLOv2,是以 PP-YOLO 为基线模型进行了一系列的延展实验得到的。下面,就让我们来一起看看具体是哪些策略给 PP-YOLO 带来了进一步的优化提升呢?

1、采用 Path Aggregation Network(路径聚合网络)设计 Detection Net

YOLO 系列的一大通病,是对不同尺幅的目标检测效果欠佳,因此,PP-YOLOv2 第一个优化的尝试是设计一个可以为各种尺度图像构建高层语义特征图的检测颈(detection neck)。不同于 PP-YOLO 采用 FPN 来从下至上的构建特征金字塔,PP-YOLOv2 采用了 FPN 的变形之一—PAN(Path Aggregation Network)来从上至下的聚合特征信息。而采用 PAN 构建的 detection neck 可以由图 2 看到。

图 2 PP-YOLOv2 Detection Neck 的结构

2、采用 Mish 激活函数

Mish 激活函数被很多实用的检测器采用,并拥有出色的表现,例如 YOLOv4 和 YOLOv5 都在骨架网络(backbone)的构建中应用 mish 激活函数。而对于 PP-YOLOv2,我们倾向于仍然采用原有的骨架网络,因为它的预训练参数使得网络在 ImageNet 上 top-1 准确率高达 82.4%。所以我们把 mish 激活函数应用在了 detection neck 而不是骨架网络上。

3、更大的输入尺寸

增加输入尺寸直接带来了目标面积的扩大。这样,网络可以更容易捕捉到小尺幅目标的信息,得到更高的性能。然而,更大的输入会带来更多的内存占用。所以在使用这个策略的同时,我们需要同时减少 Batch Size。在具体实验中,我们将 Batch Size 减少了一倍,从每个 GPU 24 张图像减少到每个 GPU 12 张图像,并将最大输入从 608 扩展到 768。输入大小均匀地从 [320, 352, 384, 416, 448, 480, 512, 544, 576, 608, 640, 672, 704, 736, 768] 获取。

4、IoU Aware Branch

YOLOv3 中,将分类概率和 objectness 相乘作为最终的检测置信度,但却没有考虑定位置信度。为了解决这一问题,我们将 objectness 与定位置信度 IoU 综合起来, 使用下面的公式来计算出一个新的 objectness:


其中 p 为检测框与 ground truth 之间的 IoU 的预测值,为平衡参数,在 PP-YOLOv2 中设置为 0.5。我们使用 BCE(binary cross entropy) loss 来学习 p,公式如下所示


其中 t 为检测框与 ground truth 之间的 IoU,σ(.)代表 sigmoid 激活函数。需要注意的是,只有正性样本的 IoU aware loss 被计算。

而以上这一系列优化策略对网络的改进效果分别是怎样的呢?通过消融实验得到的图表我们可以清晰的看到,以上 PAN、MISH 和输入尺寸的增大都带来了一些计算量的增加,但 mAP 却得到了显著的提升。


而优化后的 PP-YOLOv2 的完整性能测试及与 YOLOv4、YOLOv5 全系列算法的比较如下表,PP-YOLOv2(R50)计算量相当于 YOLOv5l,PP-YOLOv2(R101)计算量相当于 YOLOv5x。可以看到,PP-YOLOv2 的性能超越了当前所有同等计算量下的检测器!


值得注意的是:不管是 PP-YOLO 还是 PP-YOLOv2,都是在寻找在产业实践中最高性价比的目标检测方案,而不是单纯的以提升单阶段目标检测的精度去堆网络和策略。论文中也特别提到,是以实验报告的角度来为业界开发者展示更多网络优化的方法,这些策略也可以被应用在其他网络的优化上,希望在给业界开发者带来更好的网络的同时,也带来更多的算法优化启发。

PPYOLO Tiny:1.3M 超超超轻量 目标检测算法

在当前移动互联网、物联网、车联网等行业迅猛发展的背景下,边缘设备上直接部署目标检测的需求越来越旺盛。生产线上往往需要在极低硬件成本的硬件例如树莓派、FPGA、K210 等芯片上部署目标检测算法。而我们常用的手机 App,也很难直接在终端采用超过 6M 的深度学习算法。

如何在尽量不损失精度的前提下,获得体积更小、运算速度更快的算法呢?

得益于 PaddleSlim 飞桨模型压缩工具的能力,体积仅为 1.3M 的 PPYOLO Tiny 诞生了!


那 PP-YOLO Tiny 具体采用了哪些优化策略呢?

首先,PP-YOLO Tiny 沿用了 PP-YOLO 系列模型的 spp,iou loss, drop block, mixup, sync bn 等优化方法,并进一步采用了近 10 种针对移动端的优化策略:

1、更适用于移动端的骨干网络:

骨干网络可以说是一个模型的核心组成部分,对网络的性能、体积影响巨大。PPYOLO Tiny 采用了移动端高性价比骨干网络 MobileNetV3。

2、更适用移动端的检测头(head):

除了骨干网络,PP-YOLO Tiny 的检测头(head)部分采用了更适用于移动端的深度可分离卷积(Depthwise Separable Convolution),相比常规的卷积操作,有更少的参数量和运算成本, 更适用于移动端的内存空间和算力。

3、去除对模型体积、速度有显著影响的优化策略:

在 PPYOLO 中,采用了近 10 种优化策略,但并不是每一种都适用于移动端轻量化网络,比如 iou aware 和 matrix nms 等。这类 Trick 在服务器端容易计算,但在移动端会引入很多额外的时延,对移动端来说性价比不高,因此去掉反而更适当。

4、使用更小的输入尺寸

为了在移动端有更好的性能,PP-YOLO Tiny 采用 320 和 416 这两种更小的输入图像尺寸。并在 PaddleDetection2.0 中提供 tools/anchor_cluster.py 脚本,使用户可以一键式的获得与目标数据集匹配的 Anchor。例如,在 COCO 数据集上,我们使用 320*320 尺度重新聚类了 anchor,并对应的在训练过程中把每 batch 图⽚的缩放范围调整到 192-512 来适配⼩尺⼨输⼊图片的训练,得到更高性能。

5、召回率优化

在使⽤⼩尺寸输入图片时,对应的目标尺寸也会被缩⼩,漏检的概率会变大,对应的我们采用了如下两种方法来提升目标的召回率:

a.原真实框的注册方法是注册到网格⾥最匹配的 anchor 上,优化后还会同时注册到所有与该真实框的 IoU 不小于 0.25 的 anchor 上,提⾼了真实框注册的正例。

b.原来所有与真实框 IoU 小于 0.7 的 anchor 会被当错负例,优化后将该阈值减小到 0.5,降低了负例比例。


通过以上增加正例、减少负例的方法,弥补了在小尺寸上的正负例倾斜问题,提高了召回率。

6、更大的 batch size

往往更大的 Batch Size 可以使训练更加稳定,获取更优的结果。在 PP-YOLO Tiny 的训练中,单卡 batch size 由 24 提升到了 32,8 卡总 batch size=8*32=256,最终得到在 COCO 数据集上体积 4.3M,精度与预测速度都较为理想的模型。

7、量化后压缩

最后,结合 Paddle Inference 和 Paddle Lite 预测库支持的后量化策略,即在将权重保存成量化后的 int8 数据。这样的操作,是模型体积直接压缩到了 1.3M,而预测时使用 Paddle Lite 加载权重,会将 int8 数据还原回 float32 权重,所以对精度和预测速度⼏乎没有任何影响。

通过以上一系列优化,我们就得到了 1.3M 超超超轻量的 PP-YOLO tiny 模型,而算法可以通过 Paddle Lite 直接部署在麒麟 990 等轻量化芯片上,预测效果也非常理想。


以上所有 PP-YOLOv2 和 PPYOLO Tiny 的代码实现,均在 PaddleDetection 飞桨目标检测开发套件中开源提供:github.com/paddlepaddle/paddledetection

还在等什么?赶紧来实际上手体验一下吧!也欢迎感兴趣的小伙伴参与共建!


课程预告

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

感兴趣的同学欢迎微信扫码加入PaddleDetection技术交流群,更多课程及产品动态,将在群里即使公告。


PaddleDetection QQ交流群:1136406895

如果您觉得PP YOLO对您带来了一些启发或者确实实用的话,也欢迎您可以给PaddleDetection项目点亮Star,链接如下:

GitHub: https://github.com/PaddlePaddle/PaddleDetection
Gitee: https://gitee.com/paddlepaddle/PaddleDetection
工程目标检测百度
2
相关数据
深度学习技术

深度学习(deep learning)是机器学习的分支,是一种试图使用包含复杂结构或由多重非线性变换构成的多个处理层对数据进行高层抽象的算法。 深度学习是机器学习中一种基于对数据进行表征学习的算法,至今已有数种深度学习框架,如卷积神经网络和深度置信网络和递归神经网络等已被应用在计算机视觉、语音识别、自然语言处理、音频识别与生物信息学等领域并获取了极好的效果。

激活函数技术

在 计算网络中, 一个节点的激活函数定义了该节点在给定的输入或输入的集合下的输出。标准的计算机芯片电路可以看作是根据输入得到"开"(1)或"关"(0)输出的数字网络激活函数。这与神经网络中的线性感知机的行为类似。 一种函数(例如 ReLU 或 S 型函数),用于对上一层的所有输入求加权和,然后生成一个输出值(通常为非线性值),并将其传递给下一层。

权重技术

线性模型中特征的系数,或深度网络中的边。训练线性模型的目标是确定每个特征的理想权重。如果权重为 0,则相应的特征对模型来说没有任何贡献。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

YOLO技术

YOLO 模型最早是由 Joseph Redmon 等人在 2015 年发布的,并在随后的两篇论文中进行了修订。

准确率技术

分类模型的正确预测所占的比例。在多类别分类中,准确率的定义为:正确的预测数/样本总数。 在二元分类中,准确率的定义为:(真正例数+真负例数)/样本总数

百度智能云机构

百度是全球最大的中文搜索引擎,是一家互联网综合信息服务公司,更是全球领先的人工智能平台型公司。2000年1月1日创立于中关村,公司创始人李彦宏拥有“超链分析”技术专利,也使中国成为美国、俄罗斯、和韩国之外,全球仅有的4个拥有搜索引擎核心技术的国家之一。

http://www.baidu.com
聚类技术

将物理或抽象对象的集合分成由类似的对象组成的多个类的过程被称为聚类。由聚类所生成的簇是一组数据对象的集合,这些对象与同一个簇中的对象彼此相似,与其他簇中的对象相异。“物以类聚,人以群分”,在自然科学和社会科学中,存在着大量的分类问题。聚类分析又称群分析,它是研究(样品或指标)分类问题的一种统计分析方法。聚类分析起源于分类学,但是聚类不等于分类。聚类与分类的不同在于,聚类所要求划分的类是未知的。聚类分析内容非常丰富,有系统聚类法、有序样品聚类法、动态聚类法、模糊聚类法、图论聚类法、聚类预报法等。

目标检测技术

一般目标检测(generic object detection)的目标是根据大量预定义的类别在自然图像中确定目标实例的位置,这是计算机视觉领域最基本和最有挑战性的问题之一。近些年兴起的深度学习技术是一种可从数据中直接学习特征表示的强大方法,并已经为一般目标检测领域带来了显著的突破性进展。

量化技术

深度学习中的量化是指,用低位宽数字的神经网络近似使用了浮点数的神经网络的过程。

推荐文章
暂无评论
暂无评论~