一、YOLOV1-V7原论文和相关模型源码
-
YOLOv1
论文:
You Only Look Once:Unified, Real-Time Object Detection
原文
源码 -
YOLOv5
Improved YOLOv5 Based on Transformer Prediction Head for Object Detection on Drone-captured Scenarios
原文
源码 -
YOLOX(也属于对网络结构进行拆分、组合等微调后所得到的改进模型)
Exceeding YOLO Series in 2021
原文
源码 -
YOLOv6
A Single-Stage Object Detection Framework for Industrial Applications
原文
源码 -
YOLOv7
Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors
原文
源码
二、YOLOv1
YOLOv1模型网络结构图
1. 输入侧学习和思考
YOLOv1的输入侧, 其实现的是一个平齐、朴素的思想,它主要做的工作就是去调整输入图像的尺寸以支持对图像细粒度特征的挖掘与检测。通过大量的带置信度物体检测框与分类概率图相结合,以确定目标。
2. Backbone侧学习和思考
backbone结构在整个网络结构中,是作为一个核心的特征提取器,进行图片细节特征提取的任务,其作为网络的骨干,具有很强的通用性和迁移性。
在YOLOv1中,backbone结构的设计与inception Net的结构相关,其中采用Leaky Relu作为激活函数,并没有加入BN层。
3. Neck侧学习和思考
未设计加入Neck结构。
4. Head侧学习和思考
Head侧主要为一个Head检测头,包括有损失函数部分以及优化策略,与two-stage检测算法相比,YOLO更为简洁,其取消了RPN候选框模块,设计了特征提取网络+检测头的end-wo-end整体逻辑。
其损失函数部分的设计具有很强的可迁移性。
YOLOv1的Head侧的整体构造很直观,如下图所示,
在YOLOv1中,图片被划分为7*7的网格,每个网络在Head侧进行独立检测。
==YOLOv1在Inference过程中并不是把每个单独的网格作为输入,网格只是用于物体ground truth中心点位置的分配,如果一个物体的ground truth中心点坐标在一个grid cell中,那么就认为这个grid cell就是包含这个物体,这个物体的预测就由该grid cell负责。==而不是对图片进行切片,并不会让网格的视野受限且只有局部特征。
YOLOv1的输出是一个7730的张量, 77表示把输入图片划分成77的网格,每一个网格的通道维度等于30(25+20),代表YOLOv1中每个网格能预测2个框,每个框能预测5个(x,y,w,h,C)参数 再加上20个种类。
把上述内容转换成通用公式就是网格一共是 SS个,每个网格产生B个检测框,每个检测框会经过网络最终得到相应的bounding box。最终会得到 SSB个bounding box,每个bounding box都包含5个预测值,分别是bounding box的中心坐标x,y,bounding box的宽高w,h和置信度C。其中C代表网格中box能与物体的取得的最大IOU值。
由此可以引出YOLOv1的损失函数,
从整体上来看,YOLOv1的损失函数可以分为检测框的回归损失、置信度误差损失和分类误差损失。
公式中第一行和第二行代表了检测框的中心点和宽高的回归损失。
公式中第三行和第四行代表了置信度误差损失,分别是含物体的置信度误差损失和不含物体的置信度误差损失。
目标检测中有一个常见的问题——类别不均衡。在一张图中物体往往只占一小部分,大部分还是背景为主,所以设置了两个常数系数coord=5和noobj=0.5来平衡含物体的置信度误差损失和不含物体的置信度误差损失两者的权重,让模型更加种似含物体的置信度误差损失。
公式第五行,代表了分类误差损失。
YOLOv1的Head侧的优化策略如下:
- 适应NMS算法,过滤掉一些重叠的检测框。
- 同一网格中的不同检测框有不同作用,也就是置信度误差损失的设计,这样以增加召回率。
- Inference时适应P*C作为输出置信度。使用物体的类别预测最大值P乘以最合适的预测框C,这样可以过滤掉一些大部分重叠的检测框,同时同时使得检测框与类别输出更具有可信度。
YOLOv1的缺陷如下: - 由于YOLOv1每个网格的检测框只有2个,对于密集型目标检测和小物体检测都不能很好适用。
- Inference时,当同一类物体出现的不常见的长宽比时,效果较差,泛化能力偏弱。
- 由于损失函数的问题,定位误差是影响检测效果的主要原因,尤其是大小物体的处理上,还有待加强。
三、YOLOv2
YOLOv2网络模型结构图
1. 输入侧学习和思考
YOLOv2的输入侧在YOLOv1的基础上引入了多尺度训练(Multi-Scale Training),并且优化了预训练模型(High Resolution Classifier)。
多尺度训练(Multi-Scale Training)的逻辑是模型每训练一定的Epoch,改变输入图片的尺寸,使得模型对不同的输入尺寸更鲁棒,能够从容地对不同尺寸的图像进行检测。
论文中使用32的倍数作为输入的尺寸,具体使用了320、352、384、416、448、480、512、544、576、608这十种尺寸。
在预训练模型这块,YOLOv2使用了High Resolution Classifier思想。一般基于ImageNet预训练的模型的输入尺寸都是小于256×256的。YOLOv2使用的输入尺寸是448×448,比YOLOv1的大,故预训练模型网络需要使用大分辨率输入在ImageNet上进行微调。经过这个操作,YOLOv2的mAP提升了4%。由此说明了高分辨率图像对模型性能提升的有效性。
2. Backbone侧学习和思考
YOLOv2的backbone层是基于YOLOv1做出的改进,其设计出Darknet-19网络,并引入BN层来尝试优化模型的整体性能。
Darknet-19网络包含19个卷积层和5个max pooling层,整体计算量比YOLOv1中采用的GooleNet更少,最后用average pooling层代替全连接层进行Inference。
在YOLOv2的Backbone中加入BN层之后,使得mAP提升了2%,而BN层也成为了YOLO后续系列的标配。
3. Neck侧学习和思考
未设计加入Neck结构。
4. Head侧学习和思考
YOLOv2的Head侧在YOLOv1的基础上进行了网络结构和损失函数的改进,并引入了anchor box
YOLOv2在YOLOv1的基础上去掉了最后的全连接层,采用了卷积和anchor boxes来预测检测框。由于使用卷积对特征图进行下采样会使很多细粒度特征(Fine-Grained Features)的损失,导致小物体的识别效果不佳。故在YOLOv2Head侧中引入了passthrough layer结构,将特征图一分为四,并进行concat操作,保存了珍贵的细粒度特征。
anchor box机制指的是:
YOLOv1中每个网格预测两个检测框,并让最合适的检测框向ground truth框进行回归修正。在YOLOv2中,Head侧不对检测框的宽高进行直接硬回归,而是将检测框与Anchor框的偏差(offset)进行回归,并且每个网格指定n个anchor box。在训练时,只有最接近ground truth的检测框进行损失的计算。在引入anchor box后,mAP由69.5下降至69.2,原因在于每个网格预测的物体变多之后,召回率大幅上升,准确率有所下降,总体mAP略有下降。
在引入anchor box之后,又使用了Dimension Clusters操作,使得anchor box的宽高由K-means聚类算法产生。
优化了anchor box的预设值后,YOLOv2设计了Direct location prediction操作来支持检测框与Anchor框的偏差回归逻辑。与YOLOv1相比,YOLOv2中每个检测框输出5个偏差参数(tx,ty,tw,th,to),为了将预测框的中心点约束在当前的网格单元中,然后使用sigmoid函数将tx和ty进行归一化处理,将值约束在[0,1]之间,这使得模型训练更稳定。
上图为Direct location prediction的整体逻辑,其中Pw和Ph代表anchor box的宽高,cx和cy代表grid cell(网格单元)左上角相对于feature map左上角的距离。
YOLOv2在YOLOv1的基础上,还对损失函数进行了改进。
四、YOLOv3
YOLOv3网络模型结构图
1. 输入侧学习和思考
YOLOv3在输入侧上,并没有做出太大的改动,但是对于学习的我们,可以以此为基础进行简单的改动,如图像数据增强方面的改动。
2. Backbone侧学习和思考
YOLOv3的backbone结构是在YOLOv2的基础上加深了网络的层数,并引入了ResNet的残差思想、残差模块,进一步将backbone的深度拓展到53层。
同时,其相较于YOLOv2优化了下采样方式,不加入池化层结构,而使用卷积层来实现。
3. Neck侧学习和思考
YOLO在v3开始,借鉴于FPN网络中的特征融合思想,开始设计加入Neck结构,使得网络不仅能够采用高层特征,还能采集底层特征,从而将高层特征与底层特征进行融合,同时利用底层特征的高分辨率和高层特征的丰富语义信息来进行目标检测,并进行多尺度特征的独立预测,提升小物体检测的效果。
YOLOv3中引入FPN的思想,以更好地支持Head侧采用多尺度来对不同size的目标进行检测,越精细的grid cell 就可以检测出越精细的目标对象。在YOLOv3中,设置了1919、3838、76*76三个不同的尺寸,之间的比例为1:2:4。采用全卷积的思路进行设计该Neck结构。
4. Head侧学习和思考
YOLOv3Head侧在YOLOv2的基础上引入了多尺度检测逻辑和多标签分类思想,优化了损失函数。
YOLOv3在Neck的基础上,==融合了3个尺度,在多个尺度的融合特征图上分别独立做检测。==再将Anchor Box由5个增加至9个,每个尺度下分配3个Anchor Box,最终对于小目标的检测效果提升明显。并且多尺度+9anchor box让YOLOv3的整体检测性能达到了一个比较从容的level。
多分类思想:
- 二分类(Two-Class Classification)问题,是最简单的分类问题,比如一个任务中只有猫和狗,每个样本中也只有其中的一类。
- 单标签多分类(Multi-Class Classification)问题,指一个样本(一个图片或者一个检测框)有一个标签,但总共的类别数是大于两类的。目标检测中针对每个检测框的分类是多分类问题。在深度学习中,softmax是最常用的多分类函数。
- 多标签多分类(Multi-Label Classification)问题,指一个样本(一个图片或者一个检测框)中含有多个物体或者多个label。在深度学习中,使用多个Logistic输出是一种性价比很高的做法。
YOLOv3将YOLOv2的单标签分类改进为多标签分类,Head侧将用于单标签分类的Softmax分类器改成多个独立的用于多标签分类的Logistic分类器,取消了类别之间的互斥,可以使网络更加灵活。YOLOv2使用Softmax分类器,认为一个检测框只属于一个类别,每个检测框分配到概率最大的类别。但实际场景中一个检测框可能含有多个物体或者有重叠的类别标签。Logistic分类器主要用到Sigmoid函数,可以将输入约束在0到1的范围内,当一张图像经过特征提取后的某一检测框类别置信度经过sigmoid函数约束后如果大于设定的阈值,就表示该检测框负责的物体属于该类别。
YOLOv3的损失函数做了如下改进:
YOLOv3中,置信度误差损失和分类误差损失使用交叉熵来表示。
五、YOLOv4
YOLOv4网络模型结构
1. 输入侧学习和思考
YOLOv4的输入侧在YOLOv3的基础上,使用了Mosaic和CutMix高阶数据增强来提升模型的整体性能。
Mosaic数据增强技术从经典的CutMix优化而来。在CutMix的逻辑中,使用两张图片分别选取部分像素进行拼接,产生新的数据。而Mosaic则在此基础上图片数量增加到四张,并采用随即缩放,裁剪和排布的方式进行拼接。
Mosaic逻辑
Mosaic数据增强的优点:
- 优化模型对小目标的检测效果。
- 减少训练算力,由于一次性可以计算4张图片,所以Batch Size可以不用很大,也为YOLOv4在一张GPU卡上完成训练奠定了数据基础。
- 依然是一种增强数据操作,让模型的鲁棒性与泛化性能更优。
而CutMix则从Mixup和Cutout优化而来。
由上图可知,Mixup将两张图片按比例混合,其label也按同等比例分配;Cutout则是将图片中的部分像素区域置0,但是label不变;CutMix则是在Cutout的基础上对置0的像素区域随机填充其他图像的部分像素值,label则按同等比例进行分配。
其中,M是二进制0,1矩阵,用来标记需要裁剪的区域和保留的区域,裁剪的区域值均为0,其余位置为1,图片A和B组合得到新样本,最后两个图的label也对应求加权和。
CutMix的优势:
- 由于采用填充的形式,合成的图片不会有不自然的混合情形。
- 高价值信息增多,提升训练效率,优化算法性能。
- 作为YOLOv4的Bag of freebies,其不增加模型的推理耗时。
- 增加算法的局部识别与局部定位能力。
- 在输入侧,起到了类似dropout的作用。
2. Backbone侧学习和思考
YOLOv4的bockbone在YOLOv3的基础上,结合CSPNet网络结构的特点,将多个CSP子模块进行组合,设计出了CSPDarknet53,并使用Mish作为激活函数。
CSPDarknet53总共有72层卷积层,每个卷积层均为3*3大小、步长为2,目的是为了进行特征提取和逐步地下采样。
CSP子模块主要解决了由于梯度信息重复导致的计算量庞大的问题。
(CSP模块不仅仅只是一个子结构,更像是一个处理思想,可以和ResNet、DenseNet、EfficientNet相结合使用)。
DenseNet结构与CSP模块结构
上图左侧是DenseNet的结构,它进行反向传播时会有大量的重复计算,而右侧的图是CSP模块结构,它将基础层的特征图分成两部分,一部分直接与该阶段的末尾concat相连,另一部分经过局部Dense模块,从而既能保留Dense模块的特征复用,又能截断梯度流,避免大量的重复计算,同时可以保证准确率。
总的来说,CSP模块解决了三个方面的问题:
- 提升模型的学习能力,同时使模型轻量化。
- 降低计算瓶颈,提高硬件利用率。
- 降低模型的内存占用。
除此之外,CSP模块的思想还能迁移到其它主干网络,例如可以优化ResNet以提升性能:
在YOLOv4的论文中,他们通过实验发现,使用Mish激活函数可以一定程度提升性能。(不过,仅在backbone结构中使用,其余网络结构依然使用LeakyReLU激活函数)
Mish激活函数的示意图如下,其有以下三个主要特征:
- 无上界有下界。Mish向上无边界避免了由于封顶而导致的梯度饱和,加快训练过程。向下有边界有助于实现强正则化效果。
- 非单调函数。允许其在负半轴有稳定的微小负值,从而使梯度流更稳定。与ReLU负半轴的硬零边界相比,其梯度更平滑。
- 无穷连续性与光滑性。具有较好的泛化能力,提高训练结果的质量。
上图为Mish激活函数的函数示意图
下图为Mish激活函数的表达式:
3. Neck侧学习和思考
YOLOv4中的Neck结构主要包含SPP模块和PAN模块。
YOLO系列中,SPP模块最先在YOLOv3_SPP.cfg中出现。SPP模块包含3个最大值池化层,其滑动核尺寸分别是55,99和13*13,并通过Padding操作,使每个最大池化层的输出特征图不变,用于Concat操作。
SPP模块代替了卷积层后的常规池化层,可以增加感受野(信息获取、接收的范围广度),更能获取多尺度特征,同时保证较高的训练速度。
PAN模块对不同层次的特征进行融合,其在FPN模块的基础上增加了自底向上的特征金字塔结构,从而保留了更多的浅层位置特征,将整体的特征提取能力进一步提升。
在将PAN引入YOLOv4时,特征图最后的融合操作与原论文相比,将add操作改为了concat操作,增加了特征图的通道数。
4. Head侧学习和思考
YOLOv4Head侧沿用了YOLOv3的整体架构,同时引入了CIOU Loss和DIOU NMS来提升Head侧的整体性能。
在YOLOv3中,使用MSE(均方误差)损失函数对检测框的中心点以及宽高坐标进行优化。==在MSE损失函数的逻辑中,将检测框的中心点和宽高坐标作为独立的变量对待,但是实际上他们之间是有关联的。==所以一个直观的解决方案是使用IOU损失代替MSE损失。
YOLOv4论文中依次提到了IOU Loss,GIOU Loss,DIOU Loss以及CIOU Loss。其中IOU Loss是其他Loss的基石,也最为简单,公式如下:
其中A代表检测框,B代表ground truth,IOU代表两者的交并比。
IOU loss思想简洁明了,但存在两个问题:
- 当检测框和ground truth不相交时,会使IOU=0,从而无法反应两个框距离的远近,进而导致IOU Loss不可导。
- 当两个检测框大小相同,IOU也相同时,IOU Loss无法区分两者位置的差异。
上图为IOU Loss问题示意图
而GIOU Loss能改进这些问题,其在检测框与ground truth之外映射一个最小外接矩形来缓解IOU Loss存在的问题,其公式和图解如下:
其中C代表最小外接矩形,最后一项代表使用差集来进行约束和惩罚。
但会出现上图右侧的情况。
DIOU Loss在GIOU Loss的基础上,提出了中心点距离的概念,来改进GIOU Loss出现的问题。
上图为DIOU Loss图解。
对ground truth和检测框的中心点进行度量,引入位置信息的同时加快了损失函数的收敛,其公式如下:
但是DIOU Loss仍然存在检测框长宽比带来的新问题:
最后,就是YOLOv4中使用的CIOU Loss。CIOU Loss在DIOU Loss的基础上考虑了检测框长宽比的因素,将检测框回归损失的三大逻辑:重叠面积、中心点距离,长宽比进行了有效整合,其公式如下:
其中v代表了长宽比一致性的参数:
在使用CIOU Loss的情况下,YOLOv4的损失函数如下所示:
在YOLOv4中,其对NMS操作进行了优化:
YOLOv4改进了YOLOv1-v3中使用的传统NMS操作,使用了DIOU思想计算“IOU”值,进一步优化了后处理效果。CIOU思想在训练中有很大作用,但是在Inference(推理,预测)过程中,并没有ground truth的信息,所以使用DIOU足矣,且能减少计算量。
六、YOLOv5
YOLOv5网络模型结构
1. 输入侧学习和思考
YOLOv5的输入侧依然使用了Mosaic高阶数据增强策略,并增加自适应图像调整策略。
除此之外,还对输入侧做了很多工程优化,使得其对工业界非常友好。
而自适应图像调整策略可以优化常规图像缩放填充引入过多无效信息导致Inference耗时增加的问题。其逻辑主要是是计算图像原生尺寸与输入尺寸的缩放比例,并获得缩放后的图像尺寸,最后再进行自适应填充获得最后的输入图像,具体代码逻辑可以在 dataset.py 的letterbox 函数中查看。
2. Backbone侧学习和思考
在YOLOv5中,其backbone同样采用的是YOLOv4中的CSP思想,以6*6,步长为2的常规卷积为主。
3. Neck侧学习和思考
YOLOv5的Neck结构依然使用SPP模块和PAN模块,但是在PAN模块进行特征融合后,借鉴CSPnet中的CSP_v5结构,将YOLOv4中的CBL模块换成了CSP_v5,加强了网络特征融合的能力。
4. Head侧学习和思考
YOLOv5的Head侧在YOLOv4的基础上引入了Auto Learning Bounding Box Anchors(自适应anchor box)和邻域正负样本分配策略。
YOLOv5的anchor box是自适应于训练数据的,会根据不同的训练数据自动学习适配相应的anchor box。代码中具体的对应函数是check_anchor函数。
由于增加高质量正样本检测框可以显著加速收敛,故YOLOv5设计了相应的邻域正负样本分配策略,其主要流程如下:
- 将ground truth与当前feature map中的anchor box进行比较,如果ground truth与anchor box的宽高比例都处在 ,那么这个ground truth就能与当前featuer map相匹配。
- 将当前feature map中的ground truth分配给对应的grid cell。将这个grid cell分为四个象限,针对与当前feature map匹配的ground truth,会计算该ground truth处于四个象限中的哪一个,并将邻近的两个grid cell中的检测框也作为正样本。如下图所示,若ground truth偏向于右上角的象限,就会将ground truth所在grid cell的上面和右边的grid cell中的检测框也作为正样本。
上图为YOLOv5的邻域正负样本分配策略。
比起yolov4中一个ground truth只能匹配一个正样本,YOLOv5能够在多个grid cell中都分配到正样本,有助于训练加速和正负样本平衡。
七、 YOLOvX
YOLOvX网络模型结构
1. 输入侧学习和思考
YOLOvx的输入侧在YOLOv5的基础上摒弃了预训练逻辑,并使用Mosaic和Mixup高阶数据增强算法。
MixUp最初应用在分类任务上,将两张图片通过设定的融合系数进行融合,两个图片上的label也对应融合。
由于Mosaic和Mixup高阶数据增强算法已经足够强大,在这种情况下ImageNet预训练并不能带来有效增益,所以YOLOx摒弃了预训练逻辑,并从头训练。
2. Backbone侧学习和思考
YOLOx的backbone沿用了YOLOv3的bocabone结构。
3. Neck侧学习和思考
YOLOx的Neck结构仍然沿用了YOLOv3的结构设计,其中加入了SPP模块。
4. Head侧学习和思考
YOLOx的Head侧在YOLOv5的基础上,在网络结构中引入了Decoupled Head,并使用anchor-free 思想和SimOTA正负样本分配策略进行损失函数的计算与优化。
YOLOx使用了三个Decoupled Head(解耦头),分别聚焦cls(分类信息),reg(检测框信息)和IOU(置信度信息)。常规的检测头在特征的表达与学习能力上比起Decoupled Head有所欠缺,并且Decoupled Head模块能加快模型的收敛速度。
除此之外,YOLOx还使用anchor-free思想,比起YOLO系列中常规的anchor-based,在Head侧可以减少约2/3的参数。比起anchor-based方法使用先验知识设计anchor尺寸,anchor-free思想将感受野作为“anchor”信息。上述三个Decoupled Head中最上面的分支对应着大anchor框,中间的分支对应着中等anchor框最下面的分支对应着小anchor框。最后的输出将这个三个分支融合成一个85*8400的特征向量。
YOLOx的正负样本分配策略,目标检测场景一张图像中往往负样本占绝大多数,而正样本只是少数。为了获得更多高质量的正样本,YOLOx中设计了样本初筛+SimOTA逻辑。
在样本初筛中,有两种方法来筛选正样本:
- 根据中心点判断:找到中心点落在ground truth框中的所有anchor box。
- 根据检测框判断:以ground truth中心点作为基准,绘制一个边长为5的正方形,找到中心点落地这个正方形中的所有anchor box。
经过初筛之后,再使用SimOTA进行精细化筛选。其主要流程如下: - 通过上面提到的样本初筛方法,获取正样本,同时获取它们的特征信息(cls,reg,IOu)。
- 计算正样本与ground truth的Reg Loss和Cls Loss,并将它们加权相加,Reg和Cls的权重为 。3:1(loss aware)
- 通过每个ground truth的检测样本来确定其能分配到的高价值正样本数(Dynamic K),其逻辑是获取与当前ground truth的IOU值前10的检测框,并将它们求和并取整,计算出来的整数就作为当前ground truth的正样本数“容量”。
- 确定每个ground truth的Dynamic K个正样本,其逻辑是选取步骤2中加权Loss最小的前K个样本作为正样本。
- 共用正样本去重,其逻辑是如果一个检测框被两个及以上的ground truth认作正样本,那么再次使用加权Loss进行评判,将这个检测框分给加权Loss最小的那个ground truth,作为其独有的正样本。
YOLOv5的正负样本分配策略是基于邻域匹配,并通过跨网格匹配策略增加正样本数量,从而使得网络快速收敛,但是该方法属于静态分配方法,并不会随着网络训练的过程而调整。YOLOx使用的SimOTA能够算法动态分配正样本,进一步提高检测精度。而且比起OTA由于使用了Sinkhorn-Knopp算法导致训练时间加长,SimOTA算法使用Top-K近似策略来得到样本最佳匹配,大大加快了训练速度。
八、YOLOv6
YOLOv6网络模型结构
1. 输入侧学习和思考
YOLOv6在输入侧上与YOLOv5的整体逻辑相同,并没有引入新的想法和改变。
2. Backbone侧学习和思考
YOLOv6的backbone结构是在YOLOv5的基础上进行的创新,其设计了EfficientRep backbone结构。
与YOLOv5的backbone相比,其能够更加高效地利用硬件的算力,并且具备较强的表征能力。
YOLOv6的Backbone中将普通卷积都替换成了RepConv结构。同时,在RepConv基础上设计了RepBlock结构,其中RepBlock中的第一个RepConv会做channel维度的变换和对齐。
另外,YOLOv6将SPPF优化设计为更加高效的SimSPPF,增加特征重用的效率。
3. Neck侧学习和思考
YOLOv6的Neck结构设计受到硬件感知神经网络设计思想的启发,基于RepVGG设计了可重参数化、更高效的Rep-PAN。
硬件感知神经网络设计的思想基于硬件的特性、推理框架、编译框架的特点,以硬件和编译友好的结构作为设计原则,在网络构建时,综合考虑硬件计算能力、内存带宽、编译优化特性、网络表征能力等,进而获得又快又好的网络结构。
Rep-PAN在PAN模块的基础上,引入RepVGG style的RepBlock替换YOLOv5中使用的CSP-Block,同时对整体Neck中的算子进行了调整,目的是在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力。
4. Head侧学习和思考
YOLOv6的Head侧和YOLOx一样,使用Anchor-free逻辑和SimOTA标签分配策略,其主要改进了Decoupled Head(解耦检测头)结构,在损失函数中引入了SIoU边界框回归损失。
YOLOv6依然采用了Decoupled Head结构,并对其进行了精简设计。YOLOX的检测头虽然提升了检测精度,但一定程度上增加了网络延时。YOLOv6采用Hybrid Channels策略重新设计了一个更高效的Decoupled Head结构,在维持精度的同时降低了延时,缓解了Decoupled Head中3*3卷积带来的额外延时开销。
为了进一步提升回归精度,YOLOv6使用了SIoU检测框回归损失函数来优化网络的学习过程。
YOLOv4中的CIoU Loss虽然考虑到检测框与ground truth之间的重叠面积、中心点距离,长宽比这三大因素,但是依然缺少了对检测框与ground truth之间方向的匹配性的考虑。SIoU Loss通过引入了所需回归之间的向量角度,重新定义了距离损失,有效降低了回归的自由度,加快网络收敛,进一步提升了回归精度。
九、YOLOv7
YOLOv7网络模型结构
1. 输入侧学习和思考
YOLOv7在输入侧上与YOLOv5相同,没有其它改动和新的方法。
MPConv结构由常规卷积与maxpool双路径组成,增加了模型对特征的提取融合能力。不管是E-ELAN还是MPConv结构,都将特征重用逻辑演绎到了比较高的水准。
2. Backbone侧学习和思考
YOLOv7的backbone在YOLOv5的基础上,设计了E-ELAN和MPConv结构。
3. Neck侧学习和思考
YOLOv7中的Neck结构主要包含了SPPSCP模块和优化的PAN模块。
SPPCSP模块是在SPP模块的基础上最后增加concat操作,与SPP模块之前的特征图进行融合,从而更加丰富了特征信息。
PAN模块中则引入了E-ELAN结构,使用expand、shuffle、merge cardinality 策略实现在不破坏原始梯度路径的情况下,提高网咯的学习能力。
4. Head侧学习和思考
YOLOv7的Head侧使用了和YOLOv5一样的损失函数,引入RepVGG style改造了Head网络结构,并使用了辅助头(auxiliary Head)训练以及相应的正负样本匹配策略。
RepVGG style在训练过程中可以通过多路分支提升性能,推理上可以通过结构重新参数化实现推理速度的加快。
上图为辅助头训练策略以及相应的正负样本匹配策略。
YOLOv7在Head侧引入了辅助头(auxiliary Head)进行训练。正常网络训练如上图(a)所示,而用辅助头参与训练时,将对模型的训练进行深度监督,如上图(b)所示。将辅助头和检测头的损失进行融合,相当于在网络高层进行局部的模型ensemble操作,提升模型的整体性能。
而YOLOv7的正负样本分配策略正是围绕着检测头(lead head)与auxiliary Head进行设计,其主要是将YOLOv5和YOLOx的正负样本分配策略相结合:
- 使用YOLOv5的正负样本分配策略分配正样本。
- 使用YOLOx的正负样本分配策略确定正样本。
YOLOv7的正负样本分配策略相较于yolov5,加入了loss aware,利用当前模型的表现,能够实时精筛;而较于只使用YOLOX中的SimOTA算法,能够提供更精确的先验知识。
上图(d)中,lead head和auxiliary head使用一样的正负样本匹配策略,通过让浅层的auxiliary head学习到lead head已经获得的特征,让lead head更能专注于学习尚未学习到的剩余特征。
而上图(e)中,在使用lead head和auxiliary head一起优化模型的时候,auxiliary head的正样本是较为“粗糙的“,主要是通过放宽正样本分配过程的约束来获得更多的正样本。lead head中的一个anchor如果匹配上ground truth,则分配3个正样本,而同样的情况下auxiliary head分配5个。lead head中将top10个样本IOU求和取整,而auxiliary head中取top20。auxiliary head的学习能力不如lead head强,为了避免丢失需要学习的信息,将重点优化auxiliary head的召回率。而lead head可以从高recall的结果中筛选出高精度的结果作为最终输出。lead head和auxiliary head的损失函数权重设置为4:1 。
十、数据增强
不管是YOLO系列还是二阶段目标检测系列;不管是目标检测还是图像分类和分割,基础数据增强技术和高阶数据增强算法都有很强的使用价值。
高阶数据增强算法:
-
其中,RandErasing 将图像的部分区域替换为随机值,或者是训练集的平均像素值。
-
GridMask 使用了一个网格掩码,并将掩码进行随机翻转,与原图相乘,从而得到增广后的图像,通过超参数控制生成的掩码网格的大小。
-
基于NAN搜索的 AutoAugment 在一系列图像增强子策略的搜索空间中通过搜索算法找到适合特定数据集的图像增强方案。针对不同类型的数据集,会包含不同数量的子策略。每个子策略中都包含两种变换,针对每张图像都随机的挑选一个子策略,然后以一定的概率来决定是否执行子策略中的每种变换方法。
常用的基础数据增强技术:
- 颜色变换:在色彩通道空间进行数据增强,比如将某种颜色通道关闭,或者改变亮度值。
- 旋转变换:选择一个角度,左右旋转图像,可以改变图像内容朝向。
- 添加噪声:从高斯等分布中采样出的随机值矩阵加入到图像中。
- 锐化和模糊:使用高斯算子,拉普拉斯算子等处理图像。
- 缩放变换:图像按照比例进行放大和缩小并不改变图像中的内容。
- 平移变换:向上下左右四个维度移动图像。
- 翻转变换:关于水平或者竖直的轴进行图像翻转操作。
- 裁剪变换:主要有中心裁剪与随即裁剪。
- 仿射变换:对图像进行一次线性变化并接上一个平移变换。
总结
整个yolo系列,
在输入测结构上,其主要包含了对输入图像进行一些尺寸、分辨率上的调整,以及基础数据增强、高阶数据增强算法和一些数据图像预处理的操作。
在整个网络结构中,输入测是通用性比较强的一个部分,有很强的向其它目标检测模型,图像分类、分割,目标跟踪等方向迁移的应用价值,可以很好的应用到其它相关领域,互相完善,既能进业务侧,也能进竞赛测和研究测,以提供新的思想,开拓思维。
注: 文章内容总结自
https://mp.weixin.qq.com/s?__biz=Mzg4NDYwOTUwNA==&mid=2247485731&idx=1&sn=899893914caf18be49680a6ef712c1ea&chksm=cfb4d1acf8c358ba311e7445ae34b4aee747d371144083e7e4fd500039e29789a90d636602f0&token=1025033311&lang=zh_CN&scene=21#wechat_redirect
江大白
仅作为学习记录笔记,学习分享,一起学习,共同进步
侵权,请联系删除