【YOLO系列合集】上部分——YOLOv1到YOLOv5

【YOLO系列合集】下部分——YOLOX,YOLOv6到YOLOv10


1. YOLO系列算法概述

YOLO系列算法核心是将图像分成SxS的格子,在每个网格中对目标进行分类和回归。这种方式从本质上区别于R-CNN系列的区域候选框加分类的检测方式,传统的检测方法包括R-CNN系列本质上都是训练一个二分类器用于对候选框区分背景/前景,然后进行bounding-box微调。候选框的选取,传统方式有滑动窗口,R-CNN,Fast R-CNN用的Selective Search,Faster R-CNN用的RPN网络学习出来的。而YOLO的方式是直接通过每个网格回归出目标框,简单很多。如下图是针对单类单目标的对比效果,其中直接回归目标框方式中(c,cx,cy,w,h)依次代表这个框是否是目标的概率,矩形框中心点坐标以及矩形框的宽高。
在这里插入图片描述
针对于单类多目标情况,根据全卷积网络思想,特征图区域和原图区域在空间位置上是对应关系,所以对于这种单类别多目标的图片,我们可以“分而治之”,如下图,将图像横竖切分成4个区域,每个区域就是单类别单目标这种简单形式了,效果如下:
在这里插入图片描述
所以网络输出形式由单个目标变成多个目标就成为了如下形式:
在这里插入图片描述
针对于多类多目标情况,在每个框的预测值后面增加类别概率预测即可,示例图如下,
在这里插入图片描述
图中同时出现两个类别——猫和狗,所以每个框预测7个值,其预测结果形式如下:
在这里插入图片描述


2. YOLOv1算法

上节YOLO概述介绍已经拥有YOLOv1的雏形,YOLOv1将图片切分成7x7大小的区域,未避免每个区域同时存在多个目标,YOLOv1为每个区域设置两个bounding box用于匹配落在同一区域的多个groundtruth,所以这也导致了YOLOv1最多预测98个(7x7x2)矩形框输出。针对多类别情况,YOLOv1的做法是对每个区域做softmax分类即可。(弊端:虽然一个区域设置两个bounding box匹配groundtruth用于适应不同尺度目标,但是一个区域只能预测一个类别,若真的在一个区域出现两个目标,即使两个bounding box都预测到了,根据类别限制也只能取一个)。综上所述,YOLOv1的基本思想就是“分而治之”,它将图片切分成7x7大小的区域块,然后每个区域设置两个bounding box以适应不同尺度的目标,再在每个区域中去回归目标框。

针对于VOC数据设计的YOLOv1最后输出tensor为7x7x(2x5+20),20代表VOC数据集的类别,不包含背景类。YOLOv1网络是基于GoogLeNet设计的,总共包含24个卷积层和两个全连接层;Fast YOLO只含有9个卷积层和更少的卷积核,YOLOv1网络结构如下图:
在这里插入图片描述

损失函数设置:网络最后一层采用线性激活函数,误差采用平方和误差(sum-squared error)。为了处理正负样本不平衡问题,作者将有目标的回归损失和没目标的noobj损失设置了权重,分别为5和0.5。由于平方和误差针对大目标和小目标的权重是一样的,但是目标检测任务需要的是小目标框对小偏差比大目标对小偏差更加敏感,这样才能加大对小目标的学习力度,所以作者对bounding box做了开根号处理。损失函数公式如下:
在这里插入图片描述

如何确定区域块(grid)内哪个bounding box负责预测groundtruth?(Label Assignment)
答:groundtruth中心点落入这个grid内,该grid内的所有bounding box和该groundtruth做IoU,最大IoU对应的bounding box负责预测该groundtruth。

推理过程:网络预测每张图像的98个边界框和每个框的类概率。YOLOv1的网格设计在边界框预测中加强了空间多样性,通常情况下,一个对象目标落在哪个网格单元是很清楚的,网络也只会预测每个对象的一个框。但是针对于大的同时跨越几个grid cell的目标对象,通常需要用nms(非极大值抑制,Non-maximal suppression)来合并重复预测框了。

创新点

  1. 利用“分而治之”的思想,将检测任务当做回归问题看待,一次完成全部的检测工作,速度极快。
  2. 基于整张图片提取特征,相比R-CNN系列采用的局部特征得到的背景误报情况少很多,泛化能力更强。

不足

  1. 精度相对于R-CNN系列的二阶段检测方法还是有差距,直接预测矩形框坐标的方式不及R-CNN系列基于提议框预测偏移量的方式;
  2. 网络最终输出的预测框数量限制于区域网络数的设置及bounding box数量设置,对检测密集目标效果不好,对检测小目标也不好;
  3. bounding box依照数据集中目标而定,所以难以推广到其他目标,其他目标的话需要修改bounding box的宽高比。
  4. YOLOv1主干网络提取特征能力不足,后续需要改进。

3. YOLOv2算法

YOLOv2利用多尺度方式训练可以适应不同尺寸大小的输入,它能在VOC2007测试集上以67FPS的推理速度达到76.8%mAP,大尺寸输入下,以40FPS的推理速度达到78.6%mAP,相对于Faster R-CNN和SSD算法有较大提升。最后作者提出了一种目标检测与分类联合训练的方法,利用该方法作者同时在COCO检测数据集和ImageNet分类数据集上训练出了YOLO9000,YOLO9000可以预测标记之外的类别。

其创新点有基于v1的版本做了很多改进,batch normalization,提高分类器训练分辨率,候选框聚类,多尺度训练。不足之处在于相对于Faster R-CNN和SSD,YOLOv2还是没有采用多个特征图预测,文中也没提及为什么没有采用多个特征图预测,只是说通过passthrough layer能达到相似效果,但是从后面的YOLO系列算法设计来看,多个特征图做预测还是有帮助的。

3.1 Better

与基于区域提议的R-CNN系列方法相比,YOLOv1的召回率相对较低。因此,作者主要关注在保持分类准确性的同时提高召回率和定位准确率。现在大多数方法普遍趋向于更大、更深的网络,更好的性能通常取决于训练更大的网络或将多个模型集成在一起。但作者不屑于这样做,他在YOLOv1的基础上一步一步通过实验改进最终得到YOLOv2,实验结果如下:
在这里插入图片描述

Batch Normalization
通过加入batch normalization,YOLOv1可以提升2%mAP,它可以正则化模型,即使去除原有的dropout也不会造成过拟合。

Hight Resolution Classifier
现在的检测算法都是用分类网络作为检测网络的主干,首先用分类网络在ImageNet上进行预训练得到预训练模型,而自AlexNet开始,大多数分类网络输入都是256x256的,而YOLOv1是用224x224大小的输入训练分类网络,而用448x448大小的输入训练检测网络,这就导致分类网络和检测网络输入分辨率不匹配;YOLOv2的分类网络以448x448的分辨率先在ImageNet上进行Fine Tune 10个epochs,让网络有时间调整它的参数,好让其能更好的运行在新分辨率上,最终给模型带来了4%mAP的提升。

Convolutional With Anchor Boxes
YOLOv1使用全连接层直接预测Bounding Boxes的坐标值。Faster R-CNN的方法只用卷积层与Region Proposal Network来预测Anchor Box的偏移值与置信度,而不是直接预测坐标值。作者发现通过预测偏移量而不是直接预测坐标值能够简化问题,让神经网络有个参考坐标,学习起来更容易。所以作者最终去掉了YOLOv1中的全连接层,使用Anchor Boxes来预测 Bounding Boxes。同时,作者去掉了网络的Pooling层,使得输出更高的分辨率,输入图片尺寸由原来的448x448调整为416x416,这样做是作者想有一个奇数大小的特征图,因为通常来说比较大的物体,往往会占据图像的中心,所以最好在中心有一个位置来预测这些物体;416x416大小的图像经过32倍下采样会得到13x13大小的特征图用于最后的预测。使用Anchor Box会让精确度稍微下降,但用了它能让YOLO从预测98个框到能预测出大于一千个框,提升召回率recall达到88%,mAP达到69.2%。

Dimension Clusters
当Anchor boxes与YOLO一起使用时,Anchor boxes设置可以通过两种方式,手工设置和网络学习,作者通过在训练集上使用k-means聚类算法聚类训练集的bounding boxes来计算设置Anchor boxes的宽高以及数量。最终在模型复杂性与高召回率之间权衡之后,选择聚类分类数K=5。

Direct location prediction
当YOLO使用anchor boxes进行训练时,在迭代初期会出现训练不稳定问题,大部分的不稳定性来自于对矩形框的(x,y)坐标位置预测。基于anchor boxes直接预测(x,y)坐标的公式如下:
x = ( t x ∗ w a ) − x a x = (t_x * w_a) - x_a x=(txwa)xa
y = ( t y ∗ h a ) − y a y = (t_y * h_a) - y_a y=(tyha)ya
如果tx的预测值为1,x的预测结果将是向右偏移该anchor box的宽度,相反,如果tx为-1,x的预测结果将向左偏移同样的量。这个公式是不受约束的,所以任何anchor box都可以在图像中的任何一点结束。在随机初始化的情况下,模型需要较长的稳定时间才能预测出合理的偏移量。

相比预测偏移量,作者还是采用YOLO的方式,预测相对于网格单元位置的位置坐标。这会将真实坐标框限制在0-1的范围之内,作者用sigmoid激活函数将最后的预测转换到这个范围之内。该网络在输出特征图的每个单元格上预测5个边界框,每个边界框又预测5个值,tx,ty,tw,th和to,假设一个网格单元对于图片左上角的偏移量是cx,cy,Bounding Boxes Prior的宽度和高度是pw,ph,那么预测的结果见如下公式:
在这里插入图片描述
![[第五章-2.2.1.2.png]]

由于作者约束了位置预测,因此参数化更容易学习,使网络更稳定。使用维度聚类和直接预测边界框的中心位置可以提高精度,与锚框版本相比,YOLO提高了近5%mAP。

Fine-Grained Features
经过之前的调整,YOLO用于预测的特征图大小变为13x13,这个尺寸对于检测图像中的大目标足够了,同时使用这种细粒度的特征对定位小目标的位置可能也有好处。Faster R-CNN和SSD算法都用了多个特征图来做预测,而作者没有采用这种方式,他只是在26x26特征图大小后面添加了一个贯通层(passthrough layer)。贯通层通过将相邻的特征叠加到不同的通道来连接高分辨率特征和低分辨率特征,这有点似于ResNet中的identity映射。贯通层将26x26x512的特征图变成13x13x2048的特征图,YOLO中的检测器位于扩展后的特征图后面,所以它能取得细粒度的特征信息,这提升了YOLO 1%mAP的性能。

Multi-Scale Training
作者希望YOLOv2能在不同输入大小的图片上运行,所以将这多尺度训练应用在训练阶段。作者采用每10个batches就随机调整输入图片大小,图片大小按32的大小排列如下{320,352,…,608},这种机制迫使神经网络学会在各种输入维度上进行良好的预测。这意味着相同的网络可以预测不同分辨率的探测结果。网络在较小的尺寸下运行速度更快,因此YOLOv2在速度和准确性之间提供了一个简单的权衡。小尺寸输入,精度稍低但速度快,大尺寸输入,精度高但速度会慢一点。


3.2 Faster

大多数检测算法都用VGG16作为主干网络,但是它太复杂了,224x224分辨率下要做30.69 billion次浮点运算,相比于YOLO采用的Googlenet网络,它比VGG16更快,同样分辨率下只需做8.52 billion次浮点运算,精度只低2%左右。

Darknet-19
作者基于现有知识重新设计了一个分类网络,比如采用3x3卷积,池化层后通道加倍,采用全局平均池化用来预测,用1x1卷积来调整通道数量,用batch normalization来稳定训练过程、加速收敛和正则化模型。最终的模型被作者命名为Darknet-19,拥有19个卷积层和5个最大池化层,它只需要5.58 billion次浮点运算,其结构参数设置如下:
![[第五章-2.2.2.0.png]]

Training for classification
网络训练在ImageNet1000类分类数据集,用随机梯度下降法用初始学习率为0.1训练了160epochs,训练完成后,又用448x448的分辨率,以学习率为0.001微调了10个epochs。

Training for detection
网络去掉了最后一个卷积层,而加上了三个3x3卷积层,每个卷积层有1024个Filters,每个卷积层紧接着一个1x1卷积层,这个1x1的卷积层会将输入通道压缩到我们输出所需要的通道数量,对于VOC数据集,对于每个网格单元网络会预测五个Bounding Boxes,每个Bounding Boxes预测5个坐标和20个类别分数,所以一共有125个Filters。数据扩充方法与YOLO和SSD一样都采用随机裁剪、颜色抖动等等,对于COCO数据集,与VOC数据集的训练对策相同。


3.3 stronger(利用YOLOv2训练YOLO9000)

作者提出了一种分类和检测数据联合训练的机制。该方法使用带标注框的图像来学习特定于检测的信息,比如边界框坐标预测和对象以及如何对常见对象进行分类;使用仅带有类别信息的图像来扩展它可以检测的类别的数量。在同时利用检测数据集和分类数据集进行训练时,当网络遇到带有标注框图像时,YOLOv2会进行完整的梯度反向传播进行训练,但当网络遇到仅带有类别信息的图片时,网络只会反向传播类别信息部分的梯度。

但是检测数据集只有粗粒度的标记信息,像“猫”、“ 狗”之类,而分类数据集的标签信息则更细粒度,更丰富。比如狗这一类就包括“哈士奇”、“牛头梗”、“金毛狗”等等。所以如果想同时在检测数据集与分类数据集上进行训练,那么就要用一种一致性的方法融合这些标签信息。再者,用于分类的方法,大多数采用softmax,而softmax是类别之间互斥的,这就导致检测数据集中的“狗”类与分类数据集中的“哈士奇”、“金毛狗”这些类别要互斥,这与实际情况是不符合的。最终作者用WordTree 把数据集合中的类别映射到分层树中的同义词上,如图:
在这里插入图片描述

作者训练的时候使用WordTree混合了COCO检测数据集与ImageNet中的Top9000类,混合后的数据集对应的WordTree有9418个类。


4. YOLOv3算法

YOLOv3在前面YOLOv2的基础上做出重大改进,包括采用新设计的backbone,边界框预测方式和多尺度特征预测等等,总得来说,YOLOv3在吸收之前的检测算法经验对YOLOv2进行改进。YOLOv3-320和SSD在相同输入尺度下,mAP相差不大,但推理速度,YOLOv3-320比SSD快3倍。YOLOv3网络结构如下(图片来自”A COMPREHENSIVE REVIEW OF YOLO: FROM YOLOV1 AND BEYOND”):
![[第五章-2.3.0.0.png]]

4.1 Bounding Box Prediction

与YOLOv2一样,网络为每个边界框预测四个坐标tx、ty、tw和th;假如图像左上角格子偏移量为(cx,cy),bounding box prior的宽高为pw,ph,则边界框的坐标可以通过公式计算为:
在这里插入图片描述

回归这四个坐标采用平方和误差(sum of squared error loss)。但是,这一次YOLOv3使用逻辑回归为每个边界框预测一个物体性分数(objectness score)。该分数对于与ground trunth box有最高重叠的锚框(bounding box prior)为1,对于其余锚框为0。与Faster R-CNN不同,YOLOv3仅为每个ground trunth box对象分配一个锚框。如果没有将锚框分配给ground trunth box对象,则该锚框不会对坐标或类预测造成损失,只会对对象(objectness)造成损失。

4.2 Class Prediction

不再用softmax分类了,改为二元交叉熵损失,每个类独立使用logistic分类器;这样做的好处是训练的时候可以引入更复杂的数据集,不再受限制于他们的标签必须是独立互斥的关系。

4.3 Predictions Across Scales

YOLOv3这次结合3个不同尺度的特征图进行预测,每个尺度设置3个anchor boxes,对于在COCO数据集上的实验,NxN大小的特征图输出结果为NxNx[3x(4+1+80)],即每个grid设置3个anchor,每个anchor预测4个bounding box偏置和1个objectness分数以及80个类别分数。

最后的特征图还会经过x2倍上采样与上一个特征融合得到另一个较大尺度的特征图,从而丰富了语义特征;与YOLOv2一样,anchor也做了k-means聚类,得到9个anchor大小,用于设置在3个尺度特征图上。

4.4 Features Extractor

YOLOv3设计了新的backbone用于提取特征,通过连续的设置3x3和1x1的卷积层,并且带一些跳转连接,总共包含53个卷积层,作者叫它Darknet-53。其结构如下:
在这里插入图片描述

这个新网络比Darknet-19强大很多,而且比ResNet-101或ResNet-152更高效,在ImageNet数据集上的表现为:
在这里插入图片描述
可以看到,Darknet-53骨干网络获得的Top-1和Top-5准确性与ResNet-152相当,但速度几乎快2倍。

4.5 Training

用完整图像进行训练,不带有难度样本挖掘,多尺度训练,数据增强,batch normalization。


5. YOLOv4算法

YOLOv4采用通用改进手段和优化方式比如如:带权重的残差连接(Weighted-Residual-Connections, WRC),跨阶段部分连接(Cross-Stage-Partial-connections, CSP),跨小批量归一化(Cross mini-Batch Normalization, CmBN)、自我对抗训练(Self-adversarial-training, SAT),Mish激活函数,马赛克数据增强(Mosaic data augmentation),DropBlock regularization和CIoU损失函数,结合这一系列改进措施在Tesla V100显卡上实现了在MS COCO数据集上43.5%AP(65.7% AP50)的性能,并且推理速度为65FPS。相比YOLOv3在AP指标上有了非常大的提升。

YOLOv4的主要贡献如下:

  1. 构建了一个简单高效的目标检测算法,降低了训练门槛,可以使用1080Ti或2080Ti GPU就能训练起来;
  2. 验证了直到本算法提出之前的最先进的Bag-of-Freebies和Bag-of-Specials方法的有效性。
  3. 修改了最先进的方法,使其更有效,更适合单GPU训练,包括CBN,PAN,SAM等。

在这之前先解释一下Bag-of-Freebies和Bag-of-Specials
Bag-of-Freebies:按照字面翻译是免费包的意思,指通过开发更好的训练策略或只增加训练成本的方法,使目标检测器在不增加推理成本的情况下获得更好的精度。目标检测方法中经常采用的符合免费包定义的是数据增强,有图像几何变换(随机缩放,裁剪,旋转),Cutmix,Mosaic等;网络正则化:Dropout,Dropblock等;损失函数的设计:比如边界框回归的损失函数改进CIoU。

Bag-of-Specials:指那些只增加少量推理成本,却能显著提高目标检测精度的插件模块和后处理方法,作者称之为“特品包”。一般来说,这些插件模块是为了增强模型中的某些属性,如扩大接受野SPP、ASPP等;引入注意机制SE、SAM模块;增强特征集成能力PAN、BiFPN;激活函数的改进Swish、Mish等;后处理方法改进如soft NMS、DIoU NMS对模型预测结果进行筛选。

其次作者总结了现如今检测算法的网络结构,给一阶段算法(比如YOLO, SSD, RetinaNet等)和二阶段算法(比如R-CNN系列)画了统一的网络结构图,很有参考意义,如下所示:
在这里插入图片描述

5.1 Selection of architecture

在这里插入图片描述
虽然CSPResNext50分类性能比CSPDarknet53要好,但对于检测任务而言,后者比前者表现更好;对于感受野而言,CSPDarknet53虽然没有EfficientNet-B3大,但比后者推理速度快3倍左右。综合来看,作者最后选择了CSPDarknet53作为主干网络,在主干最后加上SPP扩大感受野,通过PAN增强特征融合再接上YOLOv3的检测头最后得到YOLOv4。其完整结构如下图所示:
在这里插入图片描述

5.2 Mosaic data augmentation

马赛克数据增强是将4张图片合成一张图片,相对于CutMix只是混合了两张图片,这可以使得网络一次性在一张图片上见到更多的信息,也使得可以设置小的batchsize,从而使得单张显卡一次迭代可以见到之前4倍batchsize数量的图片信息。
在这里插入图片描述

5.3 Self-Adversarial Training (SAT)

自我对抗训练也代表了一种新的数据增强技术,可以在两个前向后向传播阶段操作。在第一阶段,神经网络改变原始图像,不改变网络权重。通过这种方式,神经网络对自己进行对抗性攻击,改变原始图像以制造图像上没有期望对象的欺骗。在第二阶段,训练神经网络以正常方式检测修改后的图像上的物体。

5.4 CmBN

CmBN是CBN修改后的版本,全称为Cross mini-Batch Normalization(CmBN)。BN是对当前mini-batch进行归一化。CBN是对当前以及当前往前数3个mini-batch的结果进行归一化,而CmBN则是仅仅在这个Batch中进行累积。如下图所示:
在这里插入图片描述

5.5 修改SAM和PAN结构

调整SAM中的spatial-wise attention为point-wise attention,示意图如下:
在这里插入图片描述

调整PAN中的通道合并方式,由原来的对应位置值相加调整为通道层面concat,输出通道数量变成原来的两倍,示意图如下:
在这里插入图片描述

5.6 使用的BoF和BoS

Backbone使用的BoF:CutMix和Mosaic数据增强,DropBlock正则化,类别标签平滑(Class label smoothing)

Backbone使用的BoS:Mish激活函数,CSP连接,多输入加权残差连接(Multi-input weighted residual connections, MiWRC)

Detector使用的BoF:CIoU-loss,CmBN,DropBlock正则化,Mosaic数据增强,自对抗训练,消除网格敏感性(参考https://github.com/ultralytics/yolov3),一个gt框匹配多个anchor,余弦退火学习策略(Cosine annealing scheduler),采用遗传算法选择最优超参数,随机训练尺寸。

Detector使用的BoS:Mish激活函数,SPP模块,SAM模块,PAN模块,DIoU-NMS


6. YOLOv5算法

YOLOv5和YOLOv4都是在2020年发布,不同的是YOLOv5没有论文,是以工程的方式发布的,至今在工业界都还有很多应用,且模型泛化性能非常不错,代码中的很多细节处理值得我们学习。且作者也有在持续改进优化代码,截至到2024年7月11日,已经更新到7.0版本了。
代码链接如下:https://github.com/ultralytics/yolov5
YOLOv5模型定义在YAML文件中,如下:
在这里插入图片描述

分析完整代码,作者使用了mosaic,图片缩放,focus,CSP,GIoU,FPN+PAN,放缩的网络结构,放缩的网络结构让模型更加灵活,一共有四个版本,s,m,l,x,遗传算法搜超参,自适应的anchor,ema。非常建议大家去深度研读yolov5的代码。
YOLOv5网络结构如下所示:
在这里插入图片描述

涉及到的子模块结构如下:
在这里插入图片描述

6.1 YOLOv5损失函数

YOLOv5损失函数包括:

  1. Classification loss,分类损失
  2. Localization loss,定位损失(预测边界框与GroundTruth之间的误差)
  3. Confidence loss,目标置信度损失(框的目标性,objectness of the box)

总的损失函数:classification loss + localization loss + confidence loss

YOLOv5使用二元交叉熵损失函数计算类别概率和目标置信度得分的损失,使用CIOU Loss作为bounding box回归的损失。

6.2 YOLOv5边框回归

YOLO格式的txt标记文件格式是归一化后的中心点坐标(x,y)及矩形宽高:
在这里插入图片描述

Anchor给出了目标宽高的初始值,需要回归的是目标真实宽高与初始宽高的偏移量;预测边界框中心点相对于对应cell左上角位置的相对偏移量,为了将边界框中心点约束在当前cell中,使用sigmoid函数处理偏移值,使得预测值在(0,1)范围内,根据边界框预测的4个offset tx,ty,tw,th,可以按照公式计算出边界框的真实预测值。
在这里插入图片描述

YOLOv2/v3/v4采用相同的方式:
在这里插入图片描述

YOLOv5采用跨领域网格匹配策略,一个gt框可以同时在多个尺度特征图上匹配anchor,从而得到更多的正样本anchor,它改进了回归方式:
在这里插入图片描述

这样设计的原因是因为原始的YOLO框方程式存在严重缺陷。宽度和高度完全不受限制,因为它们只是out=exp(in),这很危险,因为它可能导致梯度失控、不稳定、NaN损失并最终完全失去训练。

对于YOLOv5,确保通过sigmoid所有模型输出来修补此错误,同时还要确保中心点保持不变1 = fcn(0),因此模型的标称零输出将导致使用标称锚框大小。当前的方程式将锚点的倍数从最小0限制为最大4,并且锚点-目标匹配也已更新为基于宽度-高度倍数,标称上限阈值超参数为4.0。
在这里插入图片描述

有些groundtruth由于和anchor的匹配度不高,不会参与训练,代码中在数据增强部分有异常标签过滤设置。

6.3 用YOLOv5训练自己的数据

步骤:

  1. 创建自己的dataset.yaml。
  2. 创建自己的labels,用labelImg工具,选择yolo格式标注,一张图片保存一个txt文件。背景图片,没有txt文件。
  3. 改变图片和对应label存放方式;yoloV5是将图片路径中/images/替换成/labels/,自动找图片对应的txt文件的。
  4. 选择模型,移动端建议选择YOLOv5s,YOLOv5m;服务器端建议选择YOLOv5l,YOLOv5x。
  5. 训练,可以通过指定weights参数加载预训练模型微调。
  6. 可视化,wandb,Tensorboard,本地训练日志。

6.4 训练技巧

数据库:

  1. 每个类别的图片数大于1.5K
  2. 每个类别的标注实例大于10K
  3. 图片多样性,必须和实际部署环境一致
  4. 标注一致并准确,图片中有的类别必须标注
  5. 加入背景图片,可减少FP,建议加入0~10%的背景图片

训练参数设置:

  1. 第一次训练,建议都采样默认参数,建立一个基准,后面再尝试调整参数对比效果
  2. Epochs,默认参数300,如果出现过拟合,就减小该值,如果没有出现,可以增大大600甚至更大
  3. Image size,如果数据库中有更多的小目标,建议使用较大的分辨率训练
  4. Batch size,尽可能设大一点
  5. 超参数,建议使用默认值;更大的图像增强参数,会减少过拟合,但会增加训练难度,往往也会得到更好的mAP,减少损失分量权重参数,可以减少该损失分量过拟合机率

参考自:https://docs.ultralytics.com/tutorials/training-tips-best-results/

6.5 YOLOv5训练流程

在这里插入图片描述

6.6 YOLOv5测试流程

在这里插入图片描述

参考文献:
[1] YOLO: Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi, https://arxiv.org/abs/1506.02640
[2] YOLOv2: Joseph Redmon, Ali Farhadi, https://arxiv.org/pdf/1612.08242v1.pdf
[3] YOLOv3: Joseph Redmon, Ali Farhadi, https://arxiv.org/abs/1804.02767
[4] YOLOv4, Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao, https://arxiv.org/pdf/2004.10934.pdf
[5] YOLOv5, https://github.com/ultralytics/yolov5
[6] Juan R. Terven, Diana M. Cordova-Esparza, A COMPREHENSIVE REVIEW OF YOLO ARCHITECTURES IN COMPUTER VISION : FROM YOLOv1 TO YOLOv8 AND YOLO-NAS

【YOLO系列合集】下部分——YOLOX,YOLOv6到YOLOv10

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值