如有错误,恳请指出。


文章目录

  • 1. Introduction
  • 2. Related Work
  • 3. PP-YOLO
    • 3.1 Architecture
      • 3.1.1 Backbone
      • 3.1.2 Detection Neck
      • 3.1.3 Detection Head
    • 3.2 Selection of Tricks
      • 3.2.1 Larger Batch Size
      • 3.2.2 EMA
      • 3.2.3 DropBlock
      • 3.2.4 IoU Loss
      • 3.2.5 IoU Aware
      • 3.2.6 Grid Sensitive
      • 3.2.7 Matrix NMS
      • 3.2.8 CoordConv
      • 3.2.9 SPP
      • 3.2.10 Better Pretrain Model
  • 4. Result

paper:PP-YOLO: An Effective and Efficient Implementation of Object Detector
code:https://github.com/PaddlePaddle/PaddleDetection

摘要:
在实际应用中,由于硬件的限制,往往需要牺牲精度来保证探测器的推断速度。因此,必须考虑目标探测器的有效性和效率之间的平衡。paper的目标不是提出一个新的检测模型,而是实现一个具有相对平衡的有效性和效率,可以直接应用于实际应用场景的目标检测器。

考虑到YOLOv3在实践中的广泛应用,作者开发了一种基于YOLOv3的新的物体检测器。主要尝试结合现有的各种技巧,在几乎不增加模型参数和FLOPs的数量,在保证速度几乎不变的情况下,达到尽可能提高探测器精度的目的。

如果不熟悉YOLOv3(或者是yolo系列),可以查看以下资料:
1. 目标检测算法——YOLOv1
2. 目标检测算法——YOLOv2
3. 目标检测算法——YOLOv3
4. 目标检测算法——YOLOv4

1. Introduction


对于yolo系列的目标基础网络,从yolov1到yolov3,结构有巨大的改变。而yolov4是在yolov3的基础上,添加了许多的技巧。本文同样是基于yolov3,提出了pp-yolo,同样的添加了许多技巧。这些技巧在不增加推断时间的情况下,可以提高模型的准确性。

PP-YOLO与YOLOv4不同,没有探索不同的骨干网络和数据增强方法,也没有使用NAS搜索超参数。在PP-YOLO中,骨干网络使用ResNet,数据增强使用MixUp。其中,使用ResNet的一个原因是使用得较广,而且各种深度学习框架都针对ResNet系列进行了深度优化,在实际部署时更加方便,在实际中推断速度也会更好。另外的一个原因是,骨干网络与数据增强都属于是额外的独立因素,许多研究都进行在骨王网络与数据增强中,所以其与技巧无关。使用NAS搜索超参数通常会消耗更多的计算能力,因此在每个新场景中通常没有条件使用NAS执行超参数搜索。为此,在PP-YOLO中的参数遵循着YOLOv3。(所以,其实如果换一个更有效的backbone,增加多种数据增强与NAS搜索,PP-YOLO的效果可能会更好)

当然,一些技巧不能直接使用,稍加修改在所难免,而且添加技巧的位置也需要细致考虑。所以这篇文章更像是一个配方,告诉如何一步一步地构建更好的检测器。PP-YOLO模型比YOLOv4的速度还要快,精度也更高。

2. Related Work


这个部分再讲述了一些目标检测的发展史。从双阶段的目标检测到单阶段的目标检测,从anchor-based到anchor-free,而anchor-free又发展了Anchor-point based检测与Keypoint based检测两个分支。

3. PP-YOLO


首先对YOLOv3的详细结构进行了修改,并引入了一个修改后的版本,将骨干替换为ResNet50-vd-dcn,作为本文的基本基线。然后介绍一些技巧,这些技巧可以在几乎不损失效率的情况下提高YOLOv3的性能。

3.1 Architecture

PP-YOLO结构如下图所示:

为了简洁起见,省略了激活层,细节描述见下面的内容。

3.1.1 Backbone

将ResNet50-vd替换了原来的DarkNet-53主干,但是直接替换会损害性能,所以需要用可变形的卷积层替换ResNet50-vd中的一些卷积层。DCN本身不会显著增加模型中的参数和FLOPs的数量,但是在实践中过多的DCN层会大大增加推断时间。所以,为了平衡精度与速度,只对最后阶段的3x3卷积层替换为DCN。

关于DCN的细节可以参考:目标检测算法——DCN(可变形卷积网络)

3.1.2 Detection Neck

使用FPN网络结构,将backbone最后输出的三层预测特征层输入到FPN结构中,得到P3,P4,P5P3,P4,P5P3,P4,P5的输出。对于输入尺寸为W×HW \times HW×H的特征图,输出特征图PlP_{l}Pl​的分辨率为:W2l×H2l\frac{W}{2^{l}} \times \frac{H}{2^{l}}2lW​×2lH​。

细节如图的FPN结构所示,以C5为例,输出的预测特征图通过一个1x1的卷积,再通过两个卷积快改变尺寸输出为P5,这里的输出做一个上采样与C4的输出作一个拼接,channels同样是512,但是随后通过1x1的卷积进行降维操作,其他的类似…

3.1.3 Detection Head

YOLOv3的检测头比较简单,包括两层卷积层。首先是一个3x3的卷积层,然后是一个1x1的卷积层得到最终的预测,每个最终预测的输出channels为:3×(K+5)3 \times (K+5)3×(K+5),其中的K表示类别数目。

可以注意到这里的输出channels的倍数是乘上了一个3的,这里表示每个最终预测图上的每个位置都与三个不同的锚相关联。对与这3组的每一组锚框,前K表示K个类别,随着4个是边界框参数,最后一个是置信度。在进行分类和定位时,分别采用交叉熵损失和L1损失。对象损失用于监督对象评分,该评分用于识别是否存在对象。

这里的回归设置与YOLOv3的相同的。YOLOv3中为每一层的特征层设置了3中不同大小尺度的锚框尺寸,所以这里会乘上一个3.

3.2 Selection of Tricks

对于很多的技巧其实不能直接使用在YOLOv3结构上的,所以需要对结构进行适当调整。

3.2.1 Larger Batch Size

采用更大的批量可以提高训练的稳定性,取得更好的效果。这里我们将训练批数从64调整为192,并相应地调整训练计划和学习率。

3.2.2 EMA

在训练模型时,保持训练参数平均移动往往有益于训练更优的模型, 使用平均参数评估有时会产生比最终训练值更好的结果。 指数平均移动是深度学习中常用到的优化方法,由于在训练深度学习模型时,模型权重在最后几步可能会在最优点处徘徊。EMA的思路是取最后几步的平均值作为最后的结果,从而增加模型的鲁棒性。公式为:
WEMA=λWEMA+(1−λ)WW_{EMA} = \lambda W_{EMA}+(1-\lambda)W WEMA​=λWEMA​+(1−λ)W
其中,λ\lambdaλ表示衰减因子,一般赋值为λ=0.9998\lambda = 0.9998λ=0.9998

3.2.3 DropBlock

DropBlock操作是对整个局部区域进行删减丢弃,是一种结构化的DropOut。与原论文不同的是,只将DropBlock应用到FPN中,因为作者发现将DropBlock添加到骨干网络中会导致性能下降。

DropBlock的具体注入点在图2中用“三角形”标记。

3.2.4 IoU Loss

边界盒回归是目标检测的关键步骤。在YOLOv3中,包围盒回归采用L1损失。它不是为mAP评估指标量身定制的,mAP评估指标强烈依赖于Intersection over Union (IoU)。为解决这一问题,有人提出了IoU损失和其他变体,如CIoU损失和GIoU损失。

与YOLOv4不同,作者这里没有直接用IoU loss代替L1-loss,而是增加了另一个分支来计算IoU loss。然后发现各种各样的IoU损失的改进是相似的,所以作者选择了最基本的IoU损失。

3.2.5 IoU Aware

在YOLOv3中,将分类概率和目标得分相乘作为最终检测置信度,其中这没有考虑到定位精度。

为了处理这个问题,论文中引入一个IoU预测分支。在训练过程中,使用感知IoU损失来训练这个分支。在推理阶段,最后的分类置信度由分类概率、目标分数和IoU值乘积得到。

最终的检测置信度然后用作后续NMS的输入。

3.2.6 Grid Sensitive

Grid Sensitive是YOLOv4引入的一种有效的技巧。当我们解码包围盒中心x和y的坐标时,在原始YOLOv3中可以通过下面的两个公式获得:
x=s⋅(gx+σ(px))y=s⋅(gy+σ(py))\begin{aligned} x &= s·(g_{x}+σ(p_{x})) \\ y &= s·(g_{y}+σ(p_{y})) \end{aligned} xy​=s⋅(gx​+σ(px​))=s⋅(gy​+σ(py​))​
其中σ是sigmoid函数,gxg_{x}gx​与gyg_{y}gy​是s的一个缩放因子。显然,xy值不可能为s⋅gxs·g_{x}s⋅gx​或者是s⋅(gx+1)s·(g_{x}+1)s⋅(gx​+1)。这样边界框的中心不可能到达网格的边界,所以需要将公式修改为:
x=s⋅(gx+α⋅σ(px)−(α−1)/2)y=s⋅(gy+α⋅σ(py)−(α−1)/2)\begin{aligned} x &= s·(g_{x}+α·σ(p_{x})-(α−1)/2) \\ y &= s·(g_{y}+α·σ(p_{y})-(α−1)/2) \end{aligned} xy​=s⋅(gx​+α⋅σ(px​)−(α−1)/2)=s⋅(gy​+α⋅σ(py​)−(α−1)/2)​
其中,α=1.05α=1.05α=1.05.使得模型更容易预测边界框的中心恰好位于网格边界上。

3.2.7 Matrix NMS

Matrix NMS是由Soft-NMS驱动的,它将其他检测分数衰减为它们重叠的单调递减函数,优点是可以并行实现。

3.2.8 CoordConv

CoordConv的提出是为了解决经典卷积神经网络无法感知坐标信息的问题。CoordConv在普通卷积的基础上添加两个通道分别表示横向和纵向的位置,用于给卷积操作提供自身位置信息。CoordConv使得网络可以具备完全或部分平移不变性。

3.2.9 SPP

SPP结构可以实现让网络能够适应不同尺度的图像输入,避免对图片进行裁剪或者缩放,导致位置信息丢失。详细可以查看yolov4的Bag of specials。

3.2.10 Better Pretrain Model

在ImageNet上使用分类精度更高的预训练模型可以获得更好的检测性能

4. Result


  • 技巧带来的精度提升:
  • 与SOTA的对比:

总结:

paper基于百度的一个深度学习框架PaddlePaddle,在yolov3的基础上,增加了许多技巧提出pp-yolo使得其在精度与速度上都超多了当时的SOTA。

论文阅读笔记 | 目标检测算法——PP-YOLO相关推荐

  1. 论文阅读笔记 | 目标检测算法——SAPD算法

    如有错误,恳请指出. 文章目录 1. Introduction 2. Soft Anchor-Point Detector 2.1 Detection Formulation with Anchor ...

  2. 论文阅读笔记 | 目标检测算法——FSAF算法

    如有错误,恳请指出 文章目录 1. Introduction 2. FSAF Module 2.1 Network Architecture 2.2 Ground-truth and Loss 2.2 ...

  3. 论文阅读笔记 | 目标检测算法——PP-YOLOv2

    如有错误,恳请指出. 文章目录 1. Introduction 2. Revisit PP-YOLO 2.1 Pre-Processing 2.2 Baseline Model 2.3 Trainin ...

  4. 论文阅读笔记 | 目标检测算法——YOLOX

    如有错误,恳请指出. 文章目录 1. Introduction 2. YOLOX 2.1 YOLOv3 baseline 2.2 Decoupled head 2.3 Strong data augm ...

  5. 论文阅读笔记 | 目标检测算法——Libra R-CNN算法

    如有错误,恳请指出. 文章目录 1. Introduction 1.1 Sample level imbalance 1.2 Feature level imbalance 1.3 Objective ...

  6. 论文阅读笔记 | 目标检测算法——Cascade R-CNN算法

    如有错误,恳请指出. 文章目录 1. Introduction 2 Related Work 2.1 iterative bounding box regression 2.2 Integral Lo ...

  7. 目标检测算法之YOLO

    其它机器学习.深度学习算法的全面系统讲解可以阅读<机器学习-原理.算法与应用>,清华大学出版社,雷明著,由SIGAI公众号作者倾力打造. 书的购买链接 书的勘误,优化,源代码资源 原创声明 ...

  8. 【论文阅读】目标检测中的分类回归特征解耦

    论文来源:知网 以下仅仅是学习过程中的部分笔记,用作自己复习. 摘要 ..... 目标检测不仅需要判别图像中存在的目标的类别,还需要回归目标在图像中的位置. 特征耦合具体表现:分类和回归部分的网络共享 ...

  9. 使用PyTorch从零开始实现YOLO-V3目标检测算法 (一)

    原文:https://blog.csdn.net/u011520516/article/details/80222743 点击查看博客原文 标检测是深度学习近期发展过程中受益最多的领域.随着技术的进步 ...

最新文章

  1. 《为iPad而设计:打造畅销App》——大胆创意
  2. safair浏览器页面局部滑动问题
  3. Mockito的使用(一)——@InjectMocks、@Spy、@Mock
  4. python实验七答案_Python实验报告七
  5. 微机常见硬盘故障分析及检测
  6. leetcode-121-买卖股票的最佳时机
  7. pat 乙级 1029 旧键盘(C++)
  8. 推荐系统--矩阵分解(4)
  9. 我在2016年读到的
  10. 【OSS】使用Element实现图片上传到OSS
  11. object has no attribute 'cleaned_data'
  12. 《Real-Time Rendering 4th Edition》全文翻译 - 第7章 阴影(下)7.7 ~ 7.10
  13. Android禁止view上下滑动,Android RecyclerView禁止滑动
  14. 软件测试英语doc,软件测试英语单词.doc
  15. 全面的IE兼容性调试问题
  16. 小红书美妆报告:18岁以下群体对美妆消费量提升158%
  17. WPS文档:格式显示,页码标注,公式居中编号右对齐,公式编号不能在行中间显示
  18. Warning:The `android.dexOptions.incremental` property is deprecated and it has no effect on the buil
  19. 优酷youku 1080P 视频下载方法
  20. Markdomn学习

热门文章

  1. ARM-CP15寄存器组介绍(开启I/D catch,MMU都需要此寄存器)
  2. 国产移动电源哪个好,国产移动电源推荐
  3. Redis持久化:RDB和AOF
  4. js轮播图片小圆点变化_纯js实现轮播图,详解(简单,无缝,小圆点,左右手动切换,自动轮动)...
  5. 淘宝试用 模拟点击程序
  6. linux-unzip解压文件
  7. 如何对计算机进行硬盘的区分,关于电脑硬盘好坏判断方式
  8. Echarts --- 可视化练习(pie04 --- 饼图标签的对齐方式)
  9. 清北复交人浙南,都有哪些CS院校推荐?
  10. bzoj 4976: 宝石镶嵌 动态规划