| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> YOLOv5-v6.0学习笔记 -> 正文阅读 |
|
[人工智能]YOLOv5-v6.0学习笔记 |
YOLOv5-v6.0学习笔记参考链接: 1. 深入浅出Yolo系列之Yolov5核心基础知识完整讲解 2. yolov5 结构知识点解析 3. yolov5目标检测神经网络——损失函数计算原理 1. 网络结构1.1 BackboneYOLOv5-6.0版本的Backbone主要分为Conv模块、CSPDarkNet53和SPPF模块。 1.1.1 Conv模块
1.1.2 Focus模块Focus模块是YOLOv5旧版本中的一个模块,它的结构如下图所示。 其中核心部分是对图片进行切片(slice)操作,并且在通道维度上进行拼接。如下图所示,对于一张3通道的输入图片,分别在
w
w
w和
h
h
h两个维度上,每隔一个像素取一个值,从而构建得到12张特征图。这12张特征图在宽度和高度上变为原来的
1
2
\frac{1}{2}
21?,但是通道维度扩充了4倍。同时,这12张特征图包含了输入图片的所有信息,因此Focus模块不仅在减少信息丢失的情况下实现了2倍下采样,而且减少了参数量(params)和计算量(FLOPs),降低了CUDA显存的消耗,从而提升了前向和后向传递的速度。 1.1.3 CSPDarkNet531.1.3.1 CSPNet论文链接:https://arxiv.org/abs/1911.11929 以DenseNet为例,在将特征图输入到Dense_Block之前,将特征图从通道维度上分为两个部分,其中一部分进入Dense_Block中进行计算,另一部分则通过一个shortcut与Dense_Block的输出特征图进行拼接,最后将拼接后的特征图输入到Transition Layer进行卷积操作。 1.1.3.2 Bottleneck模块
1.1.3.3 C3模块YOLOv4和YOLOv5均借鉴了CSPNet的思想,将其运用于DarkNet53骨干网络。YOLOv5-6.0版本中使用了C3模块,替代了早期的BottleneckCSP模块。 这两者结构作用基本相同,均为CSP架构,只是在修正单元的选择上有所不同,C3模块包含了3个标准卷积层以及多个Bottleneck模块。C3模块相对于BottleneckCSP模块所不同的是,经过Bottleneck模块输出后的Conv模块被去掉了。 1.1.4 SPPF模块参考链接:https://github.com/ultralytics/yolov5/pull/4420 1.2 NeckYOLOv5的Neck与YOLOV4相似,均借鉴了FPN和PANet的思想。 1.2.1 FPN论文链接:https://arxiv.org/abs/1612.03144 1.2.2 PANet论文链接:https://arxiv.org/abs/1803.01534 1.3 Head
2. 目标框回归
3. 正负样本匹配如上面所述,YOLOv5的每个检测层上的每个网格都预设了多个anchor先验框,但并不是每个网格中都存在目标,也并不是每个anchor都适合用来回归当前目标,因此需要对这些anchor先验框进行筛选,将其划分为正样本和负样本。本文的正负样本指的是预测框而不是Ground Truth(人工标注的真实框)。
通过上述方法,YOLOv5不仅筛选了正负样本,同时对于部分Ground Truth在单个尺度上匹配了多个anchor来进行预测,总体上增加了一定的正样本数量。除此以外,YOLOv5还通过以下几种方法增加正样本的个数,从而加快收敛速度。
4. 损失计算4.1 总损失YOLOv5对特征图上的每个网格进行预测,得到的预测信息与真实信息进行对比,从而指导模型下一步的收敛方向。损失函数的作用就是衡量预测信息和真实信息之间的差距,若预测信息越接近真实信息,则损失函数值越小。YOLOv5的损失主要包含三个方面:矩形框损失(bbox_loss)、分类损失(cls_loss)、置信度损失(obj_loss)。总损失的表达式为 L o s s = b o x _ g a i n × b b o x _ l o s s + c l s _ g a i n × c l s _ l o s s + o b j _ g a i n × o b j _ l o s s Loss=box\_gain×bbox\_loss+cls\_gain×cls\_loss+obj\_gain×obj\_loss Loss=box_gain×bbox_loss+cls_gain×cls_loss+obj_gain×obj_loss其中 b o x _ g a i n box\_gain box_gain、 c l s _ g a i n cls\_gain cls_gain、 o b j _ g a i n obj\_gain obj_gain分别对应不同的损失权重,默认值分别为0.05,0.5,1.0。 4.2 边界框损失论文链接:https://arxiv.org/abs/1911.08287 4.3 分类损失YOLOv5默认使用二元交叉熵函数来计算分类损失。二元交叉熵函数的定义为
L
=
?
y
log
?
p
?
(
1
?
y
)
log
?
(
1
?
p
)
=
{
?
log
?
p
,
y
=
1
?
log
?
(
1
?
p
)
,
y
=
0
L=-y\log p -(1-y)\log (1-p)=\left\{ \begin{array}{ccl} -\log p &, & {y=1}\\ -\log (1-p) &, & {y=0}\\ \end{array} \right.
L=?ylogp?(1?y)log(1?p)={?logp?log(1?p)?,,?y=1y=0?其中
y
y
y为输入样本对应的标签(正样本为1,负样本为0),
p
p
p为模型预测该输入样本为正样本的概率。 4.4 置信度损失每个预测框的置信度表示这个预测框的可靠程度,值越大表示该预测框越可靠,也表示越接近真实框。如下图所示,红点
A
A
A、
B
B
B、
C
C
C、
D
D
D表示真实框的中心点,那么每个红点所在网格对应的anchor所预测和回归得到的预测框置信度应该比较大甚至接近1,而其它网格对应的预测框置信度则会比较小甚至接近0。
其中self.gr为标签平滑系数,当参数self.gr为1时,置信度标签就等于CIoU。 5. 数据增强5.1 MosaicYOLOv5借鉴了YOLOv4中的Mosaic数据增强方法,它是CutMix数据增强方法的进化版,主要思想是任意抽取四张图片进行随机裁剪,然后拼接到一张图片上作为训练数据,同时每张图片上的标注框也会进行相应的裁剪。
5.2 MixUpMixUp是一种简单的数据增强方法,它的主要思想是将两个随机样本的特征和标签进行加权求和,从而得到一个新的训练样本。公式如下:
x
=
λ
x
1
+
(
1
?
λ
)
x
2
x = \lambda x_1+(1-\lambda)x_2
x=λx1?+(1?λ)x2?
y
=
λ
y
1
+
(
1
?
λ
)
y
2
y = \lambda y_1+(1-\lambda)y_2
y=λy1?+(1?λ)y2?其中
x
1
x_1
x1?和
x
2
x_2
x2?表示两个不同的输入样本,
y
1
y_1
y1?和
y
2
y_2
y2?表示两个不同的输入样本对应的标签,
λ
\lambda
λ表示两个样本融合的比例系数,且满足Beta分布。 但是在YOLOv5中只对图像特征做了融合,而对标签做了拼接,具体的代码实现如下:
|
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 2:37:17- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |