赞
踩
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的输入侧, 其实现的是一个平齐、朴素的思想,它主要做的工作就是去调整输入图像的尺寸以支持对图像细粒度特征的挖掘与检测。通过大量的带置信度物体检测框与分类概率图相结合,以确定目标。
backbone结构在整个网络结构中,是作为一个核心的特征提取器,进行图片细节特征提取的任务,其作为网络的骨干,具有很强的通用性和迁移性。
在YOLOv1中,backbone结构的设计与inception Net的结构相关,其中采用Leaky Relu作为激活函数,并没有加入BN层。
未设计加入Neck结构。
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侧的优化策略如下:
YOLOv2网络模型结构图
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%。由此说明了高分辨率图像对模型性能提升的有效性。
YOLOv2的backbone层是基于YOLOv1做出的改进,其设计出Darknet-19网络,并引入BN层来尝试优化模型的整体性能。
Darknet-19网络包含19个卷积层和5个max pooling层,整体计算量比YOLOv1中采用的GooleNet更少,最后用average pooling层代替全连接层进行Inference。
在YOLOv2的Backbone中加入BN层之后,使得mAP提升了2%,而BN层也成为了YOLO后续系列的标配。
未设计加入Neck结构。
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在输入侧上,并没有做出太大的改动,但是对于学习的我们,可以以此为基础进行简单的改动,如图像数据增强方面的改动。
YOLOv3的backbone结构是在YOLOv2的基础上加深了网络的层数,并引入了ResNet的残差思想、残差模块,进一步将backbone的深度拓展到53层。
同时,其相较于YOLOv2优化了下采样方式,不加入池化层结构,而使用卷积层来实现。
YOLO在v3开始,借鉴于FPN网络中的特征融合思想,开始设计加入Neck结构,使得网络不仅能够采用高层特征,还能采集底层特征,从而将高层特征与底层特征进行融合,同时利用底层特征的高分辨率和高层特征的丰富语义信息来进行目标检测,并进行多尺度特征的独立预测,提升小物体检测的效果。
YOLOv3中引入FPN的思想,以更好地支持Head侧采用多尺度来对不同size的目标进行检测,越精细的grid cell 就可以检测出越精细的目标对象。在YOLOv3中,设置了1919、3838、76*76三个不同的尺寸,之间的比例为1:2:4。采用全卷积的思路进行设计该Neck结构。
YOLOv3Head侧在YOLOv2的基础上引入了多尺度检测逻辑和多标签分类思想,优化了损失函数。
YOLOv3在Neck的基础上,==融合了3个尺度,在多个尺度的融合特征图上分别独立做检测。==再将Anchor Box由5个增加至9个,每个尺度下分配3个Anchor Box,最终对于小目标的检测效果提升明显。并且多尺度+9anchor box让YOLOv3的整体检测性能达到了一个比较从容的level。
多分类思想:
YOLOv4网络模型结构
YOLOv4的输入侧在YOLOv3的基础上,使用了Mosaic和CutMix高阶数据增强来提升模型的整体性能。
Mosaic数据增强技术从经典的CutMix优化而来。在CutMix的逻辑中,使用两张图片分别选取部分像素进行拼接,产生新的数据。而Mosaic则在此基础上图片数量增加到四张,并采用随即缩放,裁剪和排布的方式进行拼接。
Mosaic逻辑
Mosaic数据增强的优点:
而CutMix则从Mixup和Cutout优化而来。
由上图可知,Mixup将两张图片按比例混合,其label也按同等比例分配;Cutout则是将图片中的部分像素区域置0,但是label不变;CutMix则是在Cutout的基础上对置0的像素区域随机填充其他图像的部分像素值,label则按同等比例进行分配。
其中,M是二进制0,1矩阵,用来标记需要裁剪的区域和保留的区域,裁剪的区域值均为0,其余位置为1,图片A和B组合得到新样本,最后两个图的label也对应求加权和。
CutMix的优势:
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激活函数的示意图如下,其有以下三个主要特征:
YOLOv4中的Neck结构主要包含SPP模块和PAN模块。
YOLO系列中,SPP模块最先在YOLOv3_SPP.cfg中出现。SPP模块包含3个最大值池化层,其滑动核尺寸分别是55,99和13*13,并通过Padding操作,使每个最大池化层的输出特征图不变,用于Concat操作。
SPP模块代替了卷积层后的常规池化层,可以增加感受野(信息获取、接收的范围广度),更能获取多尺度特征,同时保证较高的训练速度。
PAN模块对不同层次的特征进行融合,其在FPN模块的基础上增加了自底向上的特征金字塔结构,从而保留了更多的浅层位置特征,将整体的特征提取能力进一步提升。
在将PAN引入YOLOv4时,特征图最后的融合操作与原论文相比,将add操作改为了concat操作,增加了特征图的通道数。
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思想简洁明了,但存在两个问题:
YOLOv5网络模型结构
YOLOv5的输入侧依然使用了Mosaic高阶数据增强策略,并增加自适应图像调整策略。
除此之外,还对输入侧做了很多工程优化,使得其对工业界非常友好。
而自适应图像调整策略可以优化常规图像缩放填充引入过多无效信息导致Inference耗时增加的问题。其逻辑主要是是计算图像原生尺寸与输入尺寸的缩放比例,并获得缩放后的图像尺寸,最后再进行自适应填充获得最后的输入图像,具体代码逻辑可以在 dataset.py 的letterbox 函数中查看。
在YOLOv5中,其backbone同样采用的是YOLOv4中的CSP思想,以6*6,步长为2的常规卷积为主。
YOLOv5的Neck结构依然使用SPP模块和PAN模块,但是在PAN模块进行特征融合后,借鉴CSPnet中的CSP_v5结构,将YOLOv4中的CBL模块换成了CSP_v5,加强了网络特征融合的能力。
YOLOv5的Head侧在YOLOv4的基础上引入了Auto Learning Bounding Box Anchors(自适应anchor box)和邻域正负样本分配策略。
YOLOv5的anchor box是自适应于训练数据的,会根据不同的训练数据自动学习适配相应的anchor box。代码中具体的对应函数是check_anchor函数。
由于增加高质量正样本检测框可以显著加速收敛,故YOLOv5设计了相应的邻域正负样本分配策略,其主要流程如下:
YOLOvX网络模型结构
YOLOvx的输入侧在YOLOv5的基础上摒弃了预训练逻辑,并使用Mosaic和Mixup高阶数据增强算法。
MixUp最初应用在分类任务上,将两张图片通过设定的融合系数进行融合,两个图片上的label也对应融合。
由于Mosaic和Mixup高阶数据增强算法已经足够强大,在这种情况下ImageNet预训练并不能带来有效增益,所以YOLOx摒弃了预训练逻辑,并从头训练。
YOLOx的backbone沿用了YOLOv3的bocabone结构。
YOLOx的Neck结构仍然沿用了YOLOv3的结构设计,其中加入了SPP模块。
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逻辑。
在样本初筛中,有两种方法来筛选正样本:
YOLOv6网络模型结构
YOLOv6在输入侧上与YOLOv5的整体逻辑相同,并没有引入新的想法和改变。
YOLOv6的backbone结构是在YOLOv5的基础上进行的创新,其设计了EfficientRep backbone结构。
与YOLOv5的backbone相比,其能够更加高效地利用硬件的算力,并且具备较强的表征能力。
YOLOv6的Backbone中将普通卷积都替换成了RepConv结构。同时,在RepConv基础上设计了RepBlock结构,其中RepBlock中的第一个RepConv会做channel维度的变换和对齐。
另外,YOLOv6将SPPF优化设计为更加高效的SimSPPF,增加特征重用的效率。
YOLOv6的Neck结构设计受到硬件感知神经网络设计思想的启发,基于RepVGG设计了可重参数化、更高效的Rep-PAN。
硬件感知神经网络设计的思想基于硬件的特性、推理框架、编译框架的特点,以硬件和编译友好的结构作为设计原则,在网络构建时,综合考虑硬件计算能力、内存带宽、编译优化特性、网络表征能力等,进而获得又快又好的网络结构。
Rep-PAN在PAN模块的基础上,引入RepVGG style的RepBlock替换YOLOv5中使用的CSP-Block,同时对整体Neck中的算子进行了调整,目的是在硬件上达到高效推理的同时,保持较好的多尺度特征融合能力。
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在输入侧上与YOLOv5相同,没有其它改动和新的方法。
MPConv结构由常规卷积与maxpool双路径组成,增加了模型对特征的提取融合能力。不管是E-ELAN还是MPConv结构,都将特征重用逻辑演绎到了比较高的水准。
YOLOv7的backbone在YOLOv5的基础上,设计了E-ELAN和MPConv结构。
YOLOv7中的Neck结构主要包含了SPPSCP模块和优化的PAN模块。
SPPCSP模块是在SPP模块的基础上最后增加concat操作,与SPP模块之前的特征图进行融合,从而更加丰富了特征信息。
PAN模块中则引入了E-ELAN结构,使用expand、shuffle、merge cardinality 策略实现在不破坏原始梯度路径的情况下,提高网咯的学习能力。
YOLOv7的Head侧使用了和YOLOv5一样的损失函数,引入RepVGG style改造了Head网络结构,并使用了辅助头(auxiliary Head)训练以及相应的正负样本匹配策略。
RepVGG style在训练过程中可以通过多路分支提升性能,推理上可以通过结构重新参数化实现推理速度的加快。
上图为辅助头训练策略以及相应的正负样本匹配策略。
YOLOv7在Head侧引入了辅助头(auxiliary Head)进行训练。正常网络训练如上图(a)所示,而用辅助头参与训练时,将对模型的训练进行深度监督,如上图(b)所示。将辅助头和检测头的损失进行融合,相当于在网络高层进行局部的模型ensemble操作,提升模型的整体性能。
而YOLOv7的正负样本分配策略正是围绕着检测头(lead head)与auxiliary Head进行设计,其主要是将YOLOv5和YOLOx的正负样本分配策略相结合:
上图(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
江大白
仅作为学习记录笔记,学习分享,一起学习,共同进步
侵权,请联系删除
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。