今天的学习参考YOLO系列算法精讲:从yolov1至yolov5的进阶之路(2万字超全整理)、采用yoloV5+pycharm的自己数据集训练目标检测与识别等文章。
目录
一、YOLO介绍和下载
YOLO(You Only Look Once)是一种基于深度神经网络的对象识别和定位算法,其最大的特点是运行速度很快,可以用于实时系统。用于做目标检测。
二、YOLO-V1
详细内容请查看:YOLO系列算法精讲:从yolov1至yolov5的进阶之路(2万字超全整理)
(1)结构
- 网络输入:448×448×3的彩色图片。
- 中间层:由若干卷积层和最大池化层组成,用于提取图片的抽象特征。
- 全连接层:由两个全连接层组成,用来预测目标的位置和类别概率值。
- 网络输出:7×7×30的预测结果
(2)实现过程
S×S 个网格,每个网格要预测 B个bounding box ,还要预测 C 个类。网络输出就是一个 S × S × (5×B+C) 的张量。
- 将一幅图像分成 S×S个网格(grid cell),如果某个 object 的中心落在这个网格中,则这个网格就负责预测这个object。
- 每个网格要预测 B 个bounding box,每个 bounding box 要预测 (x, y, w, h) 和 confidence 共5个值。
- 每个网格还要预测一个类别信息,记为 C 个类。在实际过程中,YOLOv1把一张图片划分为了7×7个网格,并且每个网格预测2个Box(Box1和Box2),20个类别。所以实际上,S=7,B=2,C=20。那么网络输出的shape也就是:7×7×30。
(3)损失函数
- 损失由三部分组成,分别是:坐标预测损失、置信度预测损失、类别预测损失。
- YOLO-V1算法中简单的全部采用了均方误差来计算损失函数。
- 结合实现过程的实际情况,我们可以从上图看到,坐标损失为8维(黄色),置信度损失有两个(绿色),类别损失有20维(蓝色)。8维的坐标损失,两个置信度损失和20维的类别损失同等重要显然是不合理的。因此采用权重系数来进行平衡,对于不同的损失用不同的权重。
- bounding box的w和h取平方根代替原本的w和h。
- 定位误差比分类误差更大,所以增加对定位误差的惩罚,因此。
- 当网格单元不包含任何目标时,训练的过程中就会把这些网格里的框的“置信度”分数推到零,从而可能导致模型不稳定,训练早期发散。因此要减少了不包含目标的框的置信度预测的损失,使 。有object的box的置信度损失和类别的loss的loss weight正常取1
。
损失函数的详细内容请看:目标检测模型YOLO-V1损失函数详解