大家好,现在我们学习yolo11的训练过程,训练过程涉及到了YOLOv1的核心机制,包括网格划分、边界框预测、损失计算以及参数更新等关键步骤,这些步骤共同作用使得YOLOv1能够学习到从图像中检测目标的能力。
一、YOLOv1的训练过程
YOLOv1的训练过程可以分为以下几个步骤:
-
数据准备:
- 使用软件助手标出样本图像中目标的位置和类别信息。
-
将目标矩形框的坐标和类别信息作为标签,标签保存的格式如式所示。
label = [ x 1 , y 1 , x 2 , y 2 , P cat , x 3 , y 3 , x 4 , y 4 , P dog ] \text{label} = \left[\begin{array}{c} x_1, y_1, x_2, y_2, P_{\text{cat}}, x_3, y_3, x_4, y_4, P_{\text{dog}} \end{array} \right] label=[x1,y1,x2,y2,Pcat,x3,y3,x4,y4,Pdog]其中, ( x 1 , y 1 ) (x_1, y_1) (x1,y1) 和 ( x 2 , y 2 ) (x_2, y_2) (x2,y2) 是目标矩形框的左上角和右下角坐标, P cat P_{\text{cat}} Pcat和 P dog P_{\text{dog}} Pdog是目标为猫和狗的概率。
-
图像输入与预处理:
-
将样本图像和样本标签输入到YOLOv1网络模型,并进行归一化处理。
-
将输入的图片划分成SxS个网格,并对这些网格进行编号。
网格编号:
grid = [ 1 2 ⋯ S S + 1 S + 2 ⋯ 2 S ⋮ ⋮ ⋱ ⋮ S 2 − S + 1 S 2 − S + 2 ⋯ S 2 ] \text{grid} = \left[ \begin{array}{cccc} 1 & 2 & \cdots & S \\ S+1 & S+2 & \cdots & 2S \\ \vdots & \vdots & \ddots & \vdots \\ S^2-S+1 & S^2-S+2 & \cdots & S^2 \end{array} \right] grid= 1S+1⋮S2−S+12S+2⋮S2−S+2⋯⋯⋱⋯S2S⋮S2
其中,S是网格的行数和列数。
-
-
网格预测:
-
每个网格预测B个边界框和C个类别概率。
-
每个边界框包含5个参数:(x, y)代表边界框的中心坐标,(h, w)代表边界框的高度和宽度,score代表置信度。
-
边界框预测:
bounding box = ( x , y , w , h , score ) \text{bounding box} = (x, y, w, h, \text{score}) bounding box=(x,y,w,h,score)
置信度计算:
score = Pr ( Object ) × IOU pred truth \text{score} = \text{Pr}(\text{Object}) \times \text{IOU}_{\text{pred}}^{\text{truth}} score=Pr(Object)×IOUpredtruth
分类概率计算:
P class = Pr ( class ∣ Object ) P_{\text{class}} = \text{Pr}(\text{class} | \text{Object}) Pclass=Pr(class∣Object)
其中, P class P_{\text{class}} Pclass是目标属于某一类别的概率。
-
-
损失计算:
- 计算YOLOv1模型的预测值与标签真实值之间的误差,该误差包括分类误差
E
c
l
a
s
s
E_{class}
Eclass、置信度误差
E
I
O
U
E_{IOU}
EIOU和坐标误差
E
c
o
o
r
d
E_{coord}
Ecoord。
E all = E class + E IOU + E coord E_{\text{all}} = E_{\text{class}} + E_{\text{IOU}} + E_{\text{coord}} Eall=Eclass+EIOU+Ecoord - 分类误差
E
c
l
a
s
s
E_{class}
Eclass计算预测类别概率与实际类别概率之间的差异。
E class = ∑ i = 1 S 2 ∑ j = 1 B I i j obj ∑ c = 1 C ( P c pred − P c truth ) 2 E_{\text{class}} = \sum_{i=1}^{S^2} \sum_{j=1}^{B} \mathbb{I}_{ij}^{\text{obj}} \sum_{c=1}^{C} (P_{c}^{\text{pred}} - P_{c}^{\text{truth}})^2 Eclass=i=1∑S2j=1∑BIijobjc=1∑C(Pcpred−Pctruth)2
其中, I i j obj \mathbb{I}_{ij}^{\text{obj}} Iijobj 是指示函数,当网格i和边界框j包含目标时为1,否则为0。 - 置信度误差
E
IOU
E_{\text{IOU}}
EIOU计算预测的置信度与实际置信度之间的差异。
E IOU = ∑ i = 1 S 2 ∑ j = 1 B I i j obj ( score i j pred − IOU i j truth ) 2 E_{\text{IOU}} = \sum_{i=1}^{S^2} \sum_{j=1}^{B} \mathbb{I}_{ij}^{\text{obj}} (\text{score}_{ij}^{\text{pred}} - \text{IOU}_{ij}^{\text{truth}})^2 EIOU=i=1∑S2j=1∑BIijobj(scoreijpred−IOUijtruth)2 - 坐标误差
E
c
o
o
r
d
Ecoord
Ecoord计算预测的边界框坐标与实际边界框坐标之间的差异。
E coord = ∑ i = 1 S 2 ∑ j = 1 B I i j obj ( ( x i j pred − x i j truth ) 2 + ( y i j pred − y i j truth ) 2 + ( w i j pred − w i j truth ) 2 + ( h i j pred − h i j truth ) 2 ) E_{\text{coord}} = \sum_{i=1}^{S^2} \sum_{j=1}^{B} \mathbb{I}_{ij}^{\text{obj}} \left( (x_{ij}^{\text{pred}} - x_{ij}^{\text{truth}})^2 + (y_{ij}^{\text{pred}} - y_{ij}^{\text{truth}})^2 + (w_{ij}^{\text{pred}} - w_{ij}^{\text{truth}})^2 + (h_{ij}^{\text{pred}} - h_{ij}^{\text{truth}})^2 \right) Ecoord=i=1∑S2j=1∑BIijobj((xijpred−xijtruth)2+(yijpred−yijtruth)2+(wijpred−wijtruth)2+(hijpred−hijtruth)2)
其中, x i j pred x_{ij}^{\text{pred}} xijpred、 y i j pred y_{ij}^{\text{pred}} yijpred、 w i j pred w_{ij}^{\text{pred}} wijpred、 h i j pred h_{ij}^{\text{pred}} hijpred是预测的边界框坐标, x i j truth x_{ij}^{\text{truth}} xijtruth、 y i j truth y_{ij}^{\text{truth}} yijtruth、 w i j truth w_{ij}^{\text{truth}} wijtruth、 h i j truth h_{ij}^{\text{truth}} hijtruth是实际的边界框坐标。
- 计算YOLOv1模型的预测值与标签真实值之间的误差,该误差包括分类误差
E
c
l
a
s
s
E_{class}
Eclass、置信度误差
E
I
O
U
E_{IOU}
EIOU和坐标误差
E
c
o
o
r
d
E_{coord}
Ecoord。
-
误差反向传播:
- 通过反向传播和梯度下降法对模型参数进行更新,使得模型的损失函数收敛到最小值,即总误差 E a l l E_{all} Eall最小。
-
模型训练完成:
- 重复上述步骤,直到模型收敛,即损失函数达到最小值,此时YOLOv1模型训练完成。
二、yolo入门教程
视频教程点击:《吐血录制,yolo11猫狗实时检测实战项目,从零开始写yolov11代码》,视频全程25分钟,或B站搜“AI莫大猫”。
从零训练自己的数据集。