YOLOv1训练阶段
YOLOv1在训练时,权重朝着什么方向更新呢?
上篇文章提到每个grid cell能预测两个bounding box,那么,训练的目的其实是使标签中画出的标准框所属的grid cell,这个grid cell能预测出两个bounding box,我们选择一个和标准框IOU大的bounding box,使它朝着和标准框重合的方向更新梯度,另一个IOU小的bounding box我们使它的置信度尽量小,从而在预测时更容易被淘汰
YOLOv1损失函数如下:
坐标损失: 包含2项
- 负责检测物体的bounding box的中心点坐标定位损失:即负责检测物体的那个框 和 标签中的标准框,这两个框的中心点坐标误差
- 负责检测物体的bounding box的宽高损失:即负责检测物体的那个框 和 标签中的标准框,这两个框的宽、高的误差。
这里需要注意的是,为什么同样都是回归误差,宽高损失里面会有根号?这是因为加上根号会使得小框对误差更敏感,同样的偏差之下,小框的损失会更大,大框造成的损失会更小
有了这两部分损失,预测出的bounding box就会逐步朝着和标准框重合的方向回归、逼近
置信度损失:包含2项
- 负责检测物体的bounding box的置信度损失:这里的标签值是预测框和标准框的IOU
- 不负责检测物体的bounding box的置信度损失:这里标签值是0,目的是使不负责检测物体的框的置信度越来越小,这样在预测阶段更容易被淘汰
网络预测类别损失:即负责预测物体的grid cell的分类误差,这里和一般的神经网络分类问题的回归损失函数类似
有几个点需要说明:
一、
一般赋予较大的值,其存在的意义在于将那些负责预测物体的bounding box的坐标、宽高赋予更大的权重
二、(这里感谢B站up主@同济子豪兄)