date
Oct 8, 2025
slug
2025-10-08-the-loss-function-and-training-flow-in-YOLOv1
status
Published
tags
CNN
YOLO
summary
本文对YOLOv1模型的训练正样本标记方法、损失函数以及基于训练样本对模型进行训练的完整过程进行了总结,为理解YOLO后续版本的处理流程打好基础。。
type
Post
category
AI
AI summary
本文对YOLOv1模型的训练正样本标记方法、损失函数以及基于训练样本对模型进行训练的完整过程进行了总结,为理解YOLO后续版本的处理流程打好基础。
YOLOv1训练正样本的标记
如YOLOv1输出信息以及NMS过滤算法详细解读一文所总结的,YOLOv1对于图像中物体的检测逻辑是,如果一个物体的中心点落在某个网格内,就由这个网格负责检测该物体,这样也就意味着,在制作YOLOv1训练样本的时候,只有包含待检物体中心点的网格被认为是有物体的。
以下图进行解释:

尽管图中的小猫这个物体的标记检测框占据的多达24个网格,但是因为这个标记框的中心位置落在粉色网格中,所以,对于YOLOv1模型在制作这个图像的训练样本时,只有粉色网格会被标记为有物体,该网格的检测置信度接近1;其他网格均为无物体,网格的检测置信度接近0。
有物体的网格会被标记为正样本候选区域,也就是说,在训练过程中,训练的正样本(positive sample)只会从此网格处的预测中得到,而其他区域的预测都是该目标的负样本。
YOLOv1的损失函数解读
从总体上看,YOLOv1的损失函数的计算主要包含三个部分:
- 坐标损失(x,y,w,h):评估模型输出的检测框与训练样本标记框的贴合程度。
- 置信度损失(confidence):衡量模型输出的每个预测框的confidence值与该框中是否真正包含待检目标之间的吻合程度。
- 类别判断损失(class):判断模型输出的类别判断是否与训练样本的标记分类一致。
下图是损失函数计算过程中用到的各个参数的含义:

下图是YOLOv1损失函数的计算公式:

YOLOv1损失函数的前两行表示预测边界框坐标位置参数的损失,第三和第四行表示正样本和负样本边界框置信度的损失,最后一行则是正样本处的类别损失。
以上损失函数的计算逻辑看上去很复杂,但是实际的计算逻辑还是比较直观的,以下分为3个部分分别详细解释。
坐标损失
坐标损失的计算,关键是要理解 的含义:
- 对于训练样本的每一个标记框(也就是所谓的ground truth),先找到这个标记框中心所在的网格。然后计算这个网格输出的两个预测框与该标记框的IOU,把IOU值较大的那个预测框的 值设置为1,另外一个预测框的 值为0。
- 在这种情况下,实际上对于训练样本的每一个标记框,实际上都只会找到一个值为1的预测框。
以上逻辑就是找到训练样本每一个标记框所对应的负责预测框。然后就是按照对应的公式,分别计算标记框和负责预测框中心坐标以及长宽的损失值,两个损失值的和就是总的坐标损失值。
从以上的损失函数的计算公式可以看到,坐标损失值还需要乘以 的系数,这是为了加大预测框定位精度损失在整个损失值中的权重,优先更精确的对预测框定位。
置信度损失
置信度损失的计算包含两个部分:负责预测框的损失,不负责预测框的损失。
负责预测框的损失:对于训练样本的每一个标记框(ground truth),仍然是按照与以上计算坐标损失相同的步骤,找到这个标记框对应的负责预测框。每个标记框只会有一个负责预测框,然后计算标记框与负责预测框的置信度损失,此时标记框的置信度为1,负责预测框的置信度则是模型对这个预测框的置信度输出值。
不负责预测框的损失:不负责预测框的逻辑很简单。模型输出的98的预测框,除了上面的负责预测框以外,其他的97个框都是不负责预测框。
按照以上公式分别计算负责预测框的损失值和不负责预测框的损失值,然后把不负责预测框的损失值乘以0.5以压制背景框对真实预测框损失值的影响,两者相加就是整个置信度的损失值。
类别损失
类别损失的计算,仍然是仅对负责预测框进行类别损失的计算,其他预测框的类别损失值均为0。
对于每一个负责预测框,计算这个预测框的20种类别识别概率与训练样本标记框(ground truth)类别的损失。值得注意的是,训练样本标记框的类别是以one-hot形式提供的20维标签(只有一个类别为1,其他全部为0),所以类别损失就是每个负责预测框对应的20个类别的识别概率,与标记框one-hot类别的20维概率标签之差的平方差。
参考资料
- 《YOLO目标检测》杨建华,李瑞峰 第三章 YOLOv1