当前位置:   article > 正文

【YOLO v7】论文笔记_repconv论文

repconv论文

【YOLO v7】论文笔记

文章地址及源码

文章:https://arxiv.org/abs/2207.02696
源码:https://github.com/WongKinYiu/yolov7

研究背景及主要贡献

针对目标群体:
执行实时目标检测的计算设备通常是一些移动CPU或GPU,和NPU(由主要制造商开发的各种神经处理单元)。
常见NPU有:the Apple neural engine (Apple), the neural compute stick (Intel), Jetson AI edge devices (Nvidia), the edge TPU (Google), the neural processing engine (高通), the AI processing unit (联发科), and the AI SoCs (Kneron)。
上述一些边缘设备专注于加速不同的操作,例如普通卷积、深度卷积或MLP操作。
在本文中,作者提出的实时对象检测器主要希望能够支持从边缘到云端的移动GPU和GPU设备
研究背景及主要研究内容:
最近,实时目标检测器的发展集中在高效架构的设计上。
对于CPU: 有PP-picoDet等,针对GPU:有YOLOX, YOLOR等。
以上等网络等都追求更高效的架构设计。
(1)不同于当前主流检测器,除结构优化之外,YOLO v7主要集中在训练过程的优化,即增加训练代价以增加精度,但是不影响推理代价,作者称之为trainable bag-of-freebies
近期,模型重参数和动态标签匹配都成为网络训练和目标检测的主要研究内容。
(2)a.作者针对模型重参数,分析了其应用到不同网络层的梯度传播路径概念,提出了planned re-parameterized model. b.针对标签匹配, 分析了对于有多个输出层的情况,怎么分配dynamic target到不同输出层。提出了coarse-to-fine lead guided label assignment.
(3)提出了扩展(extend)和复合缩放(compound scaling)以使目标检测器可以有效利用参数和计算。
(4) 相比以前的作品精度速度领先很多~~~

Related work 里作者一些有趣的总结

作者认为实时目标检测器需要的六个特征:
(1) 更快、更强的网络架构;(2) 一种更有效的特征集成方法;(3) 更精确的检测方法;(4) 更robust的损失函数;(5) 一种更有效的标签分配方法;(6)一种更有效的训练方法。

作者将模型重参数技巧视作一种集成技巧,分为:module-level ensemble and model-level ensemble。

作者总结了模型缩放(model scaling)常用手段:
(1)通常使用different scaling factors来权衡网络参数量,计算量,推理速度和精度, such as resolution (size of input image), depth (number of layer), width (number of channel), and stage (number of feature pyramid)
(2)使用NAS(Network architecture search)

Architecture

3.1. Extended efficient layer aggregation networks

在这里插入图片描述
作者提出了一个新的网络结构(准确说应该backbone的一个block,backbone我也不知道长啥样,没看代码),就叫Extended efficient layer aggregation networks(E-ELAN),就是上图的(d).
现在从(a)开始说起,VoVNet是一个concatenation-based models,区别于常见的plain结构和残差结构。
(b)是(a)的CSP变体,CSP大家应该都知道,从YOLO v4时就一直在用的结构。CSPVoVNet除了考虑到参数量、计算量、计算密度、ShuffleNet v2提出的内存访问成本(输入输出通道比,架构分支数量,element-wise等),还分析了梯度路径,以使不同层的权重能够学习到多样化的特征
(c)就“如何设计一个高效的网络”得出结论,通过控制最短最长的梯度路径,更深的网络可以有效的学习和收敛。 ELAN我照着作者给的参考文献都没找到这个东西在哪里。。。真的存在吗?
(d)作者基于ELAN提出E-ELAN,通过使用expand, shuffle, merge cardinality来实现在不破坏原有梯度路径的情况下提升网络的学习能力单纯的从图2的(d)来看的话就是通过超参数g来确定扩张的通道数,和分组卷积的个数,保证每个组内的通道数和原来的ELAN的通道数相同,这里g=2。中间的stack in computational block也不知道是什么鬼,主要找不到ELAN。E-ELAN可以指导计算块的不同组来学习多样化特征(感觉就是channel shuffle的作用)。

3.2. Model scaling for concatenation-based models

在这里插入图片描述
类似于plainNet 或者ResNet等结构,scaleing model 的depth或者width不会影响每一层的入度和出度,所以可以独立分析每个scaling factor (width, depth)对参数量和计算量的影响。

问题:但是对于concatenation-based models,如图3 (a)->(b)的过程,改变depth, width也会随之变化,导致后续网络层的输入width发生变化,从而使后续层的输入channel和输出channel的ratio发生变化,从而导致模型的硬件使用率下降。
解决方案: 根据depth的变化计算相应模块输出channel的变化,即width,然后根据变化比例调整后续transition层的width的变化。即图3 ( c ) 的过程。

Trainable bag-of-freebies

4.1. Planned re-parameterized convolution

在这里插入图片描述

通过使用梯度流传播路径来分析重参数卷积如何和不同网络结合。
首先介绍下RepConv 在一个卷积层中结合了 3 × 3 convolution, 1 × 1convolution, and identity connection ,训练时像残差结构那样并联,推理时将三个结构参数合并到一起,形成单个卷积,这就是重参数,具体可以参考 https://zhuanlan.zhihu.com/p/344324470 ,讲的很详细。
问题:作者认为由于RepConv本来就有identity connection, 而直接接入到resnet或者densenet的级联中会对不同的特征图提供更多的梯度多样性,从而破坏网络结构。
方法:使用不包含identity connection的RepConv(RepConvN)来构建Planned re-parameterized convolution,就图四那一堆,但并不知道作者用的是哪种,作者后续的实验也只是把RepConv加到ELAN上做消融实验。实际上图四中的(b)就是YOLO v6中使用的Repblock block,而(h)正是PP YOLO-E中的 ResRep block,所以这里并不算啥创新吧, 之前别人都用过了。

4.2. Coarse for auxiliary and fine for lead loss

在这里插入图片描述

这里应该算是本文除过E-ELAN第二个贡献很大的地方了。
作者使用深度监督思路,如图5的(a)-> (b), 在网络的中间层添加了额外的辅助头结构(auxiliary head),以此作为辅助损失(assistant loss)来给浅层网络权重提供指导。即网络有auxiliary head和最终的lead head两个头结构
所以针对此模式还尚无专门的标签匹配方法,作者说常用的就是( c )这种给两个头分别安排标签匹配工作。

这里作者先介绍了之前的标签匹配有hard label和soft label两种,其中hard label就是根据固定规则设置正负样本(比如使用iou阈值)。而soft label的生成 就是动态标签匹配,即根据预测输出的质量和分布与ground truth ,使用一些计算和优化方法来生成soft label(比如TAL, OTA, ASSD, SimOTA,YOLO使用BBOX的预测和真值的IOU作为置信度label)。作者将soft label的生成称作“ label assigner”。

文章中作者提出了图5(d)Lead head guided label assigner 和(e)Coarse-to-fine lead head guided label assigner 两种思路:

Lead head guided label assigner :使用lead-head的预测值和真值通过优化过程生成soft label, soft label 用于auxiliary head 和lead-head, 作者将这个学习过程成为一种广义残差学习,通过让更浅层的auxiliary head 直接学习lead-head已经学习到的信息,lead-head将能够更集中的学习还为学习过的residual 信息。

Coarse-to-fine lead head guided label assigner : 生成两种soft label, coarse label 和fine label. 其中fine label生成方式和(d)中相同,而coarse label 则通过扩充正样本(更多网格被视为positive target),从而放宽正样本匹配过程,得到更多的正样本。目的是为了让auxiliary head 更专注recall 的优化。由于有些粗标签和细标签的额外权重接近,会造成不好的最终预测结果,所以作者在decoder增加了限制,使coarse positive grid 不能很好的生成soft label。

作者提的两种思路也仅仅是两种思路,具体的soft label assignment 使用的是什么优化策略,以及loss等都没有介绍,文章说都在appendix中,可惜附录文件也没看到。代码里应该有。

7.21 这里补充一下关于soft label的详细选取方法:采用yolo v5正负样本匹配法(hard label)+simOTA(soft label, 源自YOLOX)的组合方式
流程如下:

①使用yolov5正负样本分配策略分配正样本。(YOLO v5,这里可以看yolov4_u5版复现—5. compute_loss配合代码讲解的正负样本分配策略)

②计算每个样本对每个GT的Reg+Cla loss(Loss aware)(simOTA)

③使用每个GT的预测样本确定它需要分配到的正样本数(Dynamic k) (simOTA)
3.1 先获取和GT的IOU前10的样本,
3.2 然后对10个IOU求和取整,作为当前GT的Dynamic k,至少为1
3.3 10这个数字不敏感,5~15都可以取

④为每个GT取loss最小的前dynamic k个样本作为正样本 (simOTA)

⑤人工去掉同一个样本被分配到多个GT的正样本的情况(全局信息) (simOTA)

其实主要是将simOTA中的第一步“使用中心先验”替换成“yolov5中的策略”。
关于正负样本的详细确定方法总结思路来源于这篇文档

4.3. Other trainable bag-of-freebies

指出了一些已经存在的免费训练策略,也说在appendix中说明,
这里有三点
(1)Batch normalization in conv-bn-activation topology:其实就是在推理阶段将BN和BN前的Conv融合,得到一个Conv,可以加速推理过程,这里有个讲解很详细: https://zhuanlan.zhihu.com/p/110552861
(2) YOLOR中的隐式知识与卷积特征映射以及加法和乘法方式相结合:YOLOR中的隐式知识可以在推理阶段通过预计算简化为向量。该向量可以与之前或后续卷积层的偏差和权重相结合。YOLOR没看过~
(3)EMA(Exponential Moving Average)指数移动平均值

精度对比

在这里插入图片描述

可以看出YOLO v7 36.9M参数量, AP51.4, FPS 161,完全领先于之前最好的PP-YOLOE,PP-YOLOE需要L级别才能和YOLO v7精度打平,但是FPS只有78。
YOLO v7的缺点应该是参数量比较大,不适合CPU等和一些低算力NPU,不过作者也说了他面向的对象是各种GPU。我感觉对于一些算力好的NPU应该效果也会很好,毕竟36.9也不是很大,不然也可以退而求其次使用“tiny”(看起来不是很tiny)版本

一些粗浅笔记,只是个人学习记录,有错误的地方大家可以纠正我~

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/140428
推荐阅读
相关标签
  

闽ICP备14008679号