目标检测——YOLOv7算法解读

论文:YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors (2022.7.6)

作者:Chien-Yao Wang, Alexey Bochkovskiy, Hong-Yuan Mark Liao

链接:https://arxiv.org/abs/2207.02696

代码:https://github.com/WongKinYiu/yolov7


YOLO系列算法解读:
YOLOv1通俗易懂版解读SSD算法解读YOLOv2算法解读YOLOv3算法解读YOLOv4算法解读YOLOv5算法解读YOLOR算法解读YOLOX算法解读YOLOv6算法解读YOLOv7算法解读

PP-YOLO系列算法解读:
PP-YOLO算法解读PP-YOLOv2算法解读PP-PicoDet算法解读PP-YOLOE算法解读PP-YOLOE-R算法解读


文章目录


1、算法概述

YOLOv7是YOLOv4和YOLOR同一个作者,一个有趣的现象,按照arxiv上显示的时间,YOLOv7发布的时间比YOLOv6更早,难道是美团研发团队先向YOLO原作者拿到了v6这个序号版权吗?YOLOv7和YOLOv6优化的方式大致相同,都是结合重参数化对网络结构进行改进,相比于YOLOv6在自蒸馏和量化方面做优化,YOLOv7在网络结构方面做了更多的探索,也提出了训练方法的优化。这些模块和优化方法可以在不增加推理成本的情况下,增强训练成本以提高目标检测的准确性。

YOLOv7的贡献如下:

1、设计了几种可训练的bag-of-freebies,使实时检测器可以在不提高推理成本的情况下大大提高检测精度;

2、对于目标检测的发展,作者发现了两个新的问题,即模块重参化如何高效替代原始模块,以及动态标签分配策略如何处理好不同输出层的分配。作者针对这两个问题提出了方法进行解决。

3、作者为实时检测器提出了"扩展"和"复合缩放"(extend" and "compound scaling")方法,可以更加高效地利用参数和计算量,同时,作者提出的方法可以有效地减少实时检测器40%的参数和50%的计算量,并且具备更快的推理速度和更高的检测精度。


2、YOLOv7细节

YOLOv7网络结构如下所示,图片来自^[1]^。

2.1 YOLOv7的网络结构改进

扩展高效层聚合网络(E-ELAN, Extended efficient layer aggregation network)

ELAN结构通过控制最短最长的梯度路径,允许深度模型更有效地学习和收敛。YOLOv7基于ELAN结构提出的E-ELAN适用于具有无限堆叠计算块的模型。E-ELAN通过打乱和合并(shuffling and merging)基数来结合不同groups的特征,在不破坏原有梯度路径的情况下增强网络的学习能力。

基于连接的模型的模型缩放

模型缩放的主要目的是调整模型的某些属性,生成不同尺度的模型,以满足不同推理速度的需要。例如:Efficientnet系列,通过同时调整宽度、深度和分辨率得到b0到b7版本。YOLOv7的网络结构是基于串联的结构,其中标准缩放技术(如深度缩放)会导致过渡层的输入通道和输出通道之间的比率变化,从而导致模型的硬件使用减少。比如:串联结构网络中深度增加同时也会导致网络宽度增加,如下图a、b;YOLOv7提出了一种新的基于串联的模型缩放策略,该策略将块的深度和宽度以相同的因子进行缩放,以保持模型的最优结构。如下图c所示

2.2 赠品礼包(bag-of-freebies)

卷积重参数化

尽管RepConv在VGG上取得了优异的性能,但将它直接应用于ResNet和DenseNet或其他网络架构时,它的精度会显著降低。作者使用梯度传播路径来分析不同的重参化模块应该和哪些网络搭配使用。通过分析RepConv与不同架构的组合以及产生的性能,作者发现RepConv中的identity破坏了ResNet中的残差结构和DenseNet中的跨层连接,这为不同的特征图提供了梯度的多样性。基于这个原因,作者使用没有identity连接的RepConv结构。下图显示了作者在PlainNet和ResNet中使用的"计划型重参化卷积"的一个示例。

辅助训练模块

使用引导头(lead head)预测作为指导来生成由粗到细的层次标签,这些标签分别用于辅助头(auxiliary head)和引导头的学习。其结构如下:

引导头指导的标签分配器主要是根据引导头的预测结果和gt真实框进行计算,并通过优化过程生成软标签。这些软标签将作为辅助头和引导头的目标训练模型。这点可以被看作是一种广义残差学习。通过让较浅的辅助头直接学习引导头已经学习过的信息,引导头将更能专注于学习尚未学习的剩余信息。

其他bag-of-freebies

Batch normalization in conv-bn-activation:目的是在推理阶段将批归一化的均值和方差整合到卷积层的偏差和权重中。

Implicit knowledge:YOLOR中的隐式知识可以在推理阶段将计算值简化为向量。这个向量可以与前一层或后一层卷积层的偏差和权重相结合。

Exponential moving average:作者使用 EMA 模型作为最终的推理模型。


3、实验

实验设置

所有的实验都没有使用预训练的模型,用COCO2017训练集训练,用其验证集选择最佳模型,用COCO2017测试集评估模型性能。作者针对边缘端GPU、normal GPU和云端GPU分别设计了三种模型YOLOv7-tiny、YOLOv7和YOLOv7-W6。同时,我们还利用基本模型对不同的业务需求进行模型缩放,得到不同类型的模型。例如,通过对YOLOv7的neck部分缩放得到YOLOv7-X;对YOLOv7-W6进行缩放得到YOLOv7-E6和YOLOv7-D6。

BaseLines模型比较 ,以YOLOv4和YOLOR模型为基准进行比较

与现如今其他检测算法对比

消融实验:略

参考文献:

[1] Terven J, Cordova-Esparza D. A comprehensive review of YOLO: From YOLOv1 and beyond. arXiv 2023[J]. arXiv preprint arXiv:2304.00501

相关推荐
浮生如梦_2 小时前
Halcon基于laws纹理特征的SVM分类
图像处理·人工智能·算法·支持向量机·计算机视觉·分类·视觉检测
深度学习lover2 小时前
<项目代码>YOLOv8 苹果腐烂识别<目标检测>
人工智能·python·yolo·目标检测·计算机视觉·苹果腐烂识别
励志成为嵌入式工程师4 小时前
c语言简单编程练习9
c语言·开发语言·算法·vim
捕鲸叉4 小时前
创建线程时传递参数给线程
开发语言·c++·算法
A charmer4 小时前
【C++】vector 类深度解析:探索动态数组的奥秘
开发语言·c++·算法
wheeldown5 小时前
【数据结构】选择排序
数据结构·算法·排序算法
观音山保我别报错6 小时前
C语言扫雷小游戏
c语言·开发语言·算法
Eric.Lee20217 小时前
yolo v5 开源项目
人工智能·yolo·目标检测·计算机视觉
TangKenny7 小时前
计算网络信号
java·算法·华为
景鹤7 小时前
【算法】递归+深搜:814.二叉树剪枝
算法