yolo_v1 原理
YOLO_v1
实现方法
-
参数:
- SxS个网格(grid cell) => 最终网格的大小 ;
(S * S)*(B * 5 + C)=> B个BBox (bounding box) , 5表示(1个BBox)5个参数(X, Y, H, W, C)点坐标, 高宽, 置信度(confidence);C 表示所有的类别 - IoU :(预测box与实际box)交集 / 并集
- Pr(Object) : 这个最终的一个grid cell的感受野里有没有这个物体
- NMS (非极大值抑制):每一个网孔都会有一个分类概率,通过阈值,将多余的bounding box也设为0
- SxS个网格(grid cell) => 最终网格的大小 ;
-
原理:
-
核心思想:图像经过网络,最终得到
S * S的网格(grid cell),如果某个object对象在这个网格内Pr(object) =1,那就用这个网格进行预测。- 如下图,两种结合得到最后的预测框
- 其中bounding box和confidence确定预测框的大小和置信度,每一个预测框都有这5个参数
(X, Y, H, W, C),v1版本使用B(2)种先验框(先验框对小目标不友好,同时也不一定准确)。confidence是由Pr(object)*IoU来确定的。C是预测类别数 - 注意:class信息是针对每个网格的,confidence信息是针对每个bounding box的
- 输出:S x S x (5*B+C)的tensor,每个网格(坐标-宽高-是不是物体-是什么物体)
- 在test的时候,每个网格预测的class信息和bounding box预测的confidence信息相乘,就得到每个bounding box的class-specific confidence score。
- 得到每个box的class-specific confidence score以后,设置阈值,滤掉得分低的boxes,对保留的boxes进行NMS处理,就得到最终的检测结果。
- 通俗来讲:给个一个输入图像,首先将图像划分成7*7的网格,对于每个网格,我们都预测2个边框(包括每个边框是目标的置信度以及每个边框区域在多个类别上的概率)
- 其中bounding box和confidence确定预测框的大小和置信度,每一个预测框都有这5个参数
- 如下图,两种结合得到最后的预测框

-
网络架构:
- 如下图:网络有全连接层,所以对于输入分辨率有要求

-
损失函数:
- 直接sum的形式设计损失函数
- 8维的localization error和20维的classification error重要性不同,在位置坐标前赋予更大的loss weight。
- 如果无object的网格较多,会出现overpowering的,这会导致网络不稳定甚至发散,所以在无object的box的confidence loss,赋予小的loss weight。
- 对不同大小的box预测中,位置偏移应该不同,所以将box的width和height取平方根代替原本的height和width。
- 直接sum的形式设计损失函数

- 优缺点:
- 优点:快速,pipline简单,背景误检率低,通用性强。
- 缺点:
- 网络结构有全连接层,YOLO训练模型只支持与训练图像相同的输入分辨率。
- 每个格子可以预测B个bounding box,但是最终只选择IOU最高的,每个格子包含多个物体,但却只能检测出其中一个。
- YOLO loss函数中,大物体IOU误差和小物体IOU误差对网络训练中loss贡献值接近(虽然采用求平方根方式,但没有根本解决问题),小物体检测不好。

浙公网安备 33010602011771号