YOLO系列目标检测算法目录 - 文章链接

  • YOLO系列目标检测算法总结对比- 文章链接
  • YOLOv1- 文章链接
  • YOLOv2- 文章链接
  • YOLOv3- 文章链接
  • YOLOv4- 文章链接
  • Scaled-YOLOv4- 文章链接
  • YOLOv5- 文章链接
  • YOLOv6- 文章链接
  • YOLOv7- 文章链接
  • PP-YOLO- 文章链接
  • PP-YOLOv2- 文章链接
  • YOLOR- 文章链接
  • YOLOS- 文章链接
  • YOLOX- 文章链接
  • PP-YOLOE- 文章链接

本文总结:

  1. PP-YOLO以YOLOv3为基础进行开发,主要尝试结合现有的各种几乎不增加模型参数和FLOPs的多个的tricks,以尽可能提高检测器的精度,同时确保速度几乎不变;
  2. Backbone使用ResNet50-vd替代YOLOv3中的DarkNet-53;为了解决替换backbone可能造成的问题,平衡效率和性能,仅在最后一阶段,使用可变形卷积替换3×3的卷积层。
  3. 使用其他多种trick,例如更大的Batch Size、EMA、DropBlock、IoU Loss、IoU Aware、Grid Sensitive、Matrix NMS、CoordConv、SPP和更好的预训练模型等;

深度学习知识点总结

专栏链接:
https://blog.csdn.net/qq_39707285/article/details/124005405

此专栏主要总结深度学习中的知识点,从各大数据集比赛开始,介绍历年冠军算法;同时总结深度学习中重要的知识点,包括损失函数、优化器、各种经典算法、各种算法的优化策略Bag of Freebies (BoF)等。


本章目录

  • 1. 简介
  • 2. 算法
    • 2.1 网络结构
      • 2.1.1 Backbone
      • 2.1.2 Neck
      • 2.1.3 Head
    • 2.2 trick的选择

YOLO系列目标检测算法——PP-YOLO

2020.7.23 PP-YOLO:《PP-YOLO: An Effective and Efficient Implementation of Object Detector》

1. 简介

  由于硬件的限制,往往需要舍弃准确率来确保算法的推理速度。本文的目的是实现一种具有相对平衡的既有效又高效的目标检测器,可以直接应用于实际的应用场景,而不是提出一种新的检测模型。以YOLOv3为基础进行开发,主要尝试结合现有的各种几乎不增加模型参数和FLOPs的多个的tricks,以尽可能提高检测器的精度,同时确保速度几乎不变。由于本文的所有实验都是基于PaddlePaddle进行的,所以称之为PP-YOLO。

  与YOLOv4不同,PP-YOLO没有探索新的的主干网络和数据增强方法,也没有使用NAS来搜索超参数。对于backbone,直接使用ResNet,对于数据增强,直接使用基本的MixUp。所以若是使用更好的骨干网络,使用更有效的数据增强方法,并使用NAS搜索超参数,可以进一步提高PP-YOLO的性能。

  本文的重点是如何堆叠一些几乎不影响效率的有效技巧,以获得更好的性能。这些技巧不能直接应用于YOLOv3的网络结构,因此需要进行小的修改。本文不打算介绍一种新的目标检测器。它更像是一个食谱,它会告诉你如何一步一步地构建一个更好的检测器。也发现了一些对YOLOv3检测器有效的技巧,可以节省开发人员的试验时间。

2. 算法

  PP-YOLO是一阶段的anchor-based的目标检测算法,包含backbone、Neck和Head。本文首先修改了YOLOv3的结构,并引入了一个修改后的版本,将backbone替换为ResNet50-vd-d-dcn。然后介绍了一些技巧,可以在几乎不失去效率的情况下提高YOLOv3的性能。

2.1 网络结构

2.1.1 Backbone

  YOLOv3的整体结构下图所示。在原始的YOLOv3中,DarkNet-53首先被用于提取不同尺度的特征图。ResNet已经得到了广泛的应用,研究也更加广泛,有更多不同的变体可供选择,它也通过深度学习框架得到了更好的优化。因此,本文PP-YOLO使用ResNet50-vd取代了原来的Backbone DarkNet-53。

  考虑到直接替换bacnbone可能造成原始检测器的性能,所以使用可变形卷积替换ResNet50-vd中的部分卷积层(可变形卷积网络(Deformable Convolutional Networks,DCN)的有效性已在许多检测模型中得到验证)。DCN本身不会增加模型的参数量和FLOPs,但在实际应用中,太多DCN层会明显增加推理时间。因此,为了平衡效率和性能,仅在最后一阶段,使用DCNs替换了3×3的卷积层。将这个修改后的Backbone表示为ResNet50-vd-dcn,阶段3、4和5的输出表示为C3、C4、C5。

2.1.2 Neck

  然后利用FPN构建一个特征图之间具有横向连接的特征金字塔。特征图C3、C4、C5输入到FPN模块,将金字塔级l的输出特征图表示为PlP_lPl​,l=3,4,5l=3,4,5l=3,4,5,对于输入大小为W×H的图像,Pl的分辨率为 W2l×H2l\frac{W}{2^l} × \frac{H}{2^l}2lW​×2lH​ ,FPN的详细结构如图所示。

2.1.3 Head

  YOLOv3的检测头十分简单,由两个卷积层组成,采用3×3卷积层和1×1卷积层得到最终的预测。每个最终预测的输出通道为3×(K+5)3×(K + 5)3×(K+5),其中K为类别数。每个最终预测图上的每个位置都与三个不同的锚点相关联。对于每个锚点,前K个通道是K个类的概率预测,接下来的4个通道是对边界框位置的预测,最后一个通道是对objectness得分的预测。对于分类和定位,分别采用交叉熵loss和L1 loss,objectness loss用于监督客观性评分,用于识别是否存在对象。

2.2 trick的选择

  本文没有提出一种新的检测方法,而只是注重结合现有的trick来实现一种有效和高效的检测器。由于很多技巧不能直接应用于YOLOv3,所以本文需要根据它的结构进行调整。

  • Larger Batch Size
    使用更大的batch size可以提高训练的稳定性,得到更好的效果。本文将训练的batch size从64改为192,并相应地调整训练schedule和学习率。

  • EMA
    在训练一个模型时,保持训练参数的移动平均值通常是有益的。使用平均参数的评估有时会产生比最终训练值明显更好的结果。指数移动平均数(Exponential Moving Average,EMA)使用指数衰减来计算训练参数的移动平均数。对于每个参数W,保持一个阴影参数:
    WEMA=λWEMA+(1−λ)WEMAW_{EMA}=\lambda W_{EMA}+(1-\lambda)W_{EMA}WEMA​=λWEMA​+(1−λ)WEMA​
    其中λ\lambdaλ是衰减因子,本文使用λ为0.9998的EMA,并使用阴影参数WEMAW_{EMA}WEMA​进行评估。

  • DropBlock
    DropBlock是dropout的一种形式,丢掉一些特征图相邻区域的单元。与原论文不同的是,本文只将DropBlock应用于FPN,因为研究发现在backbone中添加DropBlock会导致性能下降。DropBlock的详细注入点在图中用“三角形”标记。

  • IoU Loss
    边界框回归是目标检测的关键步骤,在YOLOv3中,边界框回归采用L1 loss。它不是为mAP评估指标定制的,它强烈依赖于交并比(IoU)。IoU loss和其他变形,如CIoU loss和GIoU loss已经被提出来解决这个问题。与YOLOv4不同的是,本文不直接用IoU loss代替l1 loss,而是添加了另一个分支来计算IoU loss。发现各种IoU loss的变体是相似的,所以本文选择了最基本的IoU loss。

  • IoU Aware
    在YOLOv3中,分类概率和objectness得分相乘得到最终的检测置信度,这没有考虑定位精度。为了解决这一问题,增加了一个IoU预测分支来测量定位的精度。在训练过程中,采用IoU aware loss对IoU预测分支进行训练。在推理过程中,将预测的IoU乘以分类概率和objectness得分,计算出最终的检测置信度,这与定位精度的相关性更强。最后,将最终的检测置信度用作后续NMS的输入。IoU aware分支将增加额外的计算成本。但是,只添加了0.01%的参数和0.0001%的FLOPs,这几乎可以忽略不计。

  • Grid Sensitive
    Grid Sensitive是在YOLOv4中引入的一个有效的技巧。当解码边界框中心x和y的坐标时,在原始的YOLOv3中,可以得到:

    其中 σ\sigmaσ是sigmoidsigmoidsigmoid函数,gxg_xgx​和gyg_ygy​是整数,sss是一个尺度因子。很明显,因为sigmoidsigmoidsigmoid很难完全等于0和1,所以xxx和yyy不能完全等于s⋅gxs \cdot g_xs⋅gx​ 或s⋅(gx+1)s \cdot (g_x+1)s⋅(gx​+1) 。这使得很难预测仅位于网格边界上的边界框的中心。为了解决这个问题,通过改变方程到:

    在本文中α\alphaα设置为1.05,这使得模型更容易预测哪些位于网格边界上的边界盒中心。Grid Sensitive所增加的FLOPs非常很小,可以完全忽略。

  • Matrix NMS
    Matrix NMS是由Soft-NMS修改得到的,Soft-NMS将其他检测分数衰减为重叠的单调递减函数。然而,这种过程像传统的贪婪NMS一样是顺序的,不能并行实现。Matrix NMS从另一个角度查看这个过程,并以并行的方式实现它。因此,Matrix NMS比传统的NMS速度快,不会带来任何效率损失。

  • CoordConv
    CoordConv通过使用额外的坐标通道提供卷积访问自己的输入坐标。CoordConv允许网络学习完全的翻转不变性或不同程度的翻转依赖性。考虑到CoordConv将向卷积层添加两个输入通道,因此会增加一些参数量和FLOPs。为了尽可能减少效率的损失,本文不改变backbone中的卷积层,只用CoordConv替换FPN中的1x1卷积层和检测头中的第一个卷积层。CoordConv的详细注入点在图中用“方块”标记。

  • SPP
    Spatial Pyramid Pooling (SPP)将SPM集成到CNN中,使用最大池化操作,而不是词袋操作。YOLOv4通过将最大池输出与内核大小k×k连接起来来应用SPP模块,其中k = {1,5,9,13},步幅等于1。在这种设计下,相对较大的最大池有效地增加了主干特征的接受域。具体来说,SPP只应用于顶部特征图,如图2中带有“星号”标记的位置。SPP本身不引入任何参数,但下面的卷积层的输入通道数会增加。所以引入了大约2%的额外参数量和1%的额外FLOPs。

  • Better Pretrain Model
    在ImageNet上使用具有较高分类精度的预训练模型可以获得更好的检测性能。本文使用蒸馏的ResNet50-vd模型作为Backbone,这显然不会影响检测器的效率。

YOLO系列目标检测算法——PP-YOLO相关推荐

  1. 【百度飞浆】YOLO系列目标检测算法详解

    YOLO系列目标检测算法详解 1 YOLO发展史 2 YOLO v3目标检测原理 3 PaddleDetection中YOLO v3模型介绍 4 YOLO v3配置演练 1 YOLO发展史 2 YOL ...

  2. YOLO系列目标检测算法-YOLOv7

    YOLO系列目标检测算法目录 - 文章链接 YOLO系列目标检测算法总结对比- 文章链接 YOLOv1- 文章链接 YOLOv2- 文章链接 YOLOv3- 文章链接 YOLOv4- 文章链接 Sca ...

  3. YOLO系列目标检测算法-YOLOv6

    YOLO系列目标检测算法目录 - 文章链接 YOLO系列目标检测算法总结对比- 文章链接 YOLOv1- 文章链接 YOLOv2- 文章链接 YOLOv3- 文章链接 YOLOv4- 文章链接 Sca ...

  4. YOLO系列目标检测算法——YOLOR

    YOLO系列目标检测算法目录 - 文章链接 YOLO系列目标检测算法总结对比- 文章链接 YOLOv1- 文章链接 YOLOv2- 文章链接 YOLOv3- 文章链接 YOLOv4- 文章链接 Sca ...

  5. YOLO系列目标检测算法——YOLOS

    YOLO系列目标检测算法目录 - 文章链接 YOLO系列目标检测算法总结对比- 文章链接 YOLOv1- 文章链接 YOLOv2- 文章链接 YOLOv3- 文章链接 YOLOv4- 文章链接 Sca ...

  6. Yolo系列目标检测算法知识点总结

    下面是YoloV4论文中给出的目标检测算法的整体架构: 主要包含以下几个部分: 输入层用来处理输入数据,如数据增强 Backbone主干网络用来提取特征 Neck层用来做多尺度特征融合,提升特征的表达 ...

  7. 从0开始学习卷积神经网络与Yolo系列目标检测算法

    目录 (一)卷积神经网络初了解 一.卷积神经网络 1.1 计算机视觉 1.2 卷积运算 1.卷积运算介绍 2.卷积运算示例:边缘检测 3.对于一张RGB图像进行卷积 4.提取RGB图像的多个特征 1. ...

  8. 一键Pip下载安装使用YOLO系列目标检测算法,YOLOv7都能Pip ! ! !

    点击上方"码农的后花园",选择"星标" 公众号 精选文章,第一时间送达 今天在浏览器中闲逛,无意中发现,为了方便使用YOLO目标检测算法的快捷使用,有网友已经将 ...

  9. YOLO系列目标检测算法详解

    目录 前言 YOLO发展历程 目标检测 YOLO开山之作 ---- YOLO(v1) YOLOv2 YOLOv3 PaddleDetection中YOLOv3模型介绍 总结 前言 YOLO发展历程 F ...

最新文章

  1. asp 去除最后一个逗号为空字符串的代码
  2. SharePoint 自定义WebPart之间的连接
  3. centos ifconfig_Linux主流发行版本配置IP总结(Ubuntu、CentOS、Redhat、Suse)
  4. 小猿学python_小猿圈python入门之转行零基础该如何学Python?
  5. 平面设计中的网格系统pdf_深入浅出,带你认识网格系统与版式设计
  6. JAVAWEB入门之IDEA与tomcat相关配置
  7. 开关问题(POJ-1830)
  8. jquery 获取当前元素的索引值
  9. AndroidUI 布局动画-为布局添加动画
  10. matlab内存管理工具,[转载]MATLAB内存管理
  11. JSP转译成Servlet详细过程
  12. 浅谈URL生成方式的演变
  13. hashmap containsvalue时间复杂度_恕我直言,你真的了解HashMap吗?
  14. OpenCasCade标注显示类(独立)
  15. 利用BigDecimal类巧妙处理Double类型精度丢失
  16. java 众数 中位数_什么是中位数、众数、平均数,今天终于弄明白
  17. LightOJ1197 Help Hanzo —— 大区间素数筛选
  18. TensorFlow-similarity 学习笔记13
  19. 阿里云新Logo:生于代码
  20. linux内核led驱动开发,从Linux内核LED驱动来理解字符设备驱动开发流程

热门文章

  1. 用PHP+MySQL开发的婚恋交友网站
  2. LeetCode:187.重复的DNA序列解析
  3. (二)Redis基本操作-List
  4. 使用杀毒软件后不能远程怎么办?
  5. 建筑力学与结构【16】
  6. Tableau之数据可视化大屏/智慧大屏(成都大熊猫繁育研究基地,模拟旅游相关数据)@灵魂走风的江湖
  7. 巨头都自身难保,中小企业与区域品牌还有活路吗?
  8. 图片怎样转换成PDF的
  9. ctrl+/加注释,去注释_关于以下内容的注释:2014年Google I / O上的“绩效文化”
  10. 执行kubectl exec -it报错分析