YOLO v1目标检测
1. 计算机视觉解决的问题
① 图像分类 ② 目标检测 ③ 语义分割 ④ 实例分割
2. 目标检测两个流派
① two-stage 两阶段模型:首先提取一些候选区域(Region Proposals),可能包含目标的位置。然后对每个候选区域使用 CNN 进一步进行分类(判断类别)和精确定位(边界框回归)。
② one-stage 单阶段模型:跳过了提取候选区域阶段,直接使用单个神经网络同时进行目标分类和位置回归,大幅提高了检测速度。是一种 End-ToEnd 端到端方法。
one-stage 检测速度快,能满足实时性要求。但检测精度通常低于 two-stage 方法。同时对小目标和复杂背景的处理能力相对较弱。
3. YOLO v1 网络结构
YOLO v1 网络由 ① Conv. Layer 卷积层(24层) ②maxpool Layer 最大池化层 ③ Conn. Layer 全连接层(2层)组成。
其输入为 的图像,输出为 的张量(Tensor)。
4. YOLO v1 测试阶段流程
- 首先将输入图像分为 S*S 个 grid cell (v1中S为7)。
- 每个 grid cell 都会预测 B 个 bounding box (v1中B为2),这 B 个 bounding box 的中心点落在该 grid cell 里。每个 bounding box 都包含5个参数 ,其中包括4个定位信息和1个置信度分数(confidence score)。(bounding box 即为目标所在的矩形区域)。
- 置信度分数(confidence score)定义为:。如果该 grid cell 中不存在目标( P(object in bbox)=0 ),则置信度分数为 0 。否则(P(object in bbox)=1),我们希望置信度分数等于预测框(predict box)与真实标签框(ground truth)之间的交集(IOU)。
- 每个 grid cell 还会预测 C 个类别的条件概率(v1中C为20)。
- C 个类别的条件概率为:。
- 将 置信度分数 和 条件概率 相乘,获得最终的预测结果,即每个 bounding box 的具体类别的 confidence score。
- 注意:不管 B 的数量是多少,每个 grid cell 只负责预测一个目标。这也是导致 YOLO 对小目标和密集目标检测效果比较差的原因。如果输入图片极其密集,导致 grid cell 里有多个物体,但是YOLO 模型只能预测出来一个,就会忽略在本 grid cell 内的其他物体。
综上,S*S 个 grid cell ,每个 grid cell 预测 B 个bounding box ,还要预测 C 个类别。将两图合并,网络输出就是一个 S*S *(5*B+C),v1 即为 。
对于每个 bounding box 包含的 :
- x,y: 是指 bounding box 的中心坐标相较于该 bounding box 归属的 grid cell 左上角的偏移量,归一化在0-1之间。
- w,h: 是指该 bounding box 的宽和高,也归一化到了0-1之间,表示相较于原始图像的宽和高(即448个像素)。比如下图中的 bounding box 的宽是 44.8 个像素,高也是 44.8*2 个像素,则 w=0.1,h=0.2。
- YOLO 中 bounding box 是人为选定的(2个不同长宽比)的 box,在训练开始时作为超参数输入 bounding box 的信息,随着训练次数增加,loss降低,bounding box 越来越准确。
的张量所包含的内容:
5. YOLO v1 测试阶段后处理
将 置信度分数 和 条件概率 相乘得到 Score:
共得到 49*2 = 98 组数据:
设置阈值,过滤 Score 低的组别后,按照 Score 高低排序,然后进行 NMS:
非极大值抑制(NMS):
IOU计算公式:
最终保留的非0值的 Score 个数就是 该输入图片中该类别物体的数量。输出 Object Detect 结果:
6. YOLO v1 训练阶段流程
预训练分类网络 :
首先使用前 20 个卷积层、1 个最大池化层、1 个全连接层,在 image-Net 数据集上训练一个分类网络,这个网络的输入为 224*224,该模型在 image-Net2012 的数据集上的 top 5 精度为 88%。
YOLO v1 训练阶段流程:
YOLO v1 损失函数:
对不同大小的 bbox 预测中,相比于大的 bbox,小的 bbox预测偏相同的尺寸对 IOU 的影响更大。为了缓和这个问题,作者用了一个巧妙的办法,就是将 bbox的 width 和 height 取平方根代替原本的 height 和 width 。 如下图:small bbox 的横轴值较小,发生偏移时,反应到 y 轴上的 loss(下图绿色)比 big bbox(下图红色)要大。
参考:
【YOLO系列】YOLOv1论文超详细解读(翻译 +学习笔记)
【精读AI论文】YOLO V1目标检测,看我就够了
YoLov1论文理解
【pytorch】目标检测:YOLO的基本原理与YOLO系列的网络结构
从YOLOv1到YOLOv8的YOLO系列最新综述【2023年4月】
YOLO V1 网络结构分析