YOLOV1——2D目标检测“one-stage“开山之作

0.背景

此前“two-stage"目标检测算法由于需要先选定候选区域,再进行后续的回归预测任务,分成两个阶段,速度较为缓慢。

且如果对模型进行分析,既然”two-stage"的候选区域没办法完全拟合最终的检测框,还需要回归调整,那为什么不直接对候选区域简单处理(对于任意图片都统一划定候选区域),依靠后续的回归直接进行调整呢?因而正是在此基础上,"one-stage"的目标检测模型YOLOV1应运而生,从输入图片,到生成检测框结果,YOLOV1只用一步完成。

1.预测阶段

作为“one-stage"模型,YOLOV1可以实现输入一张图片,直接在图像上输出检测框以及其类别判断。它的过程分析如下:

根据YOLO的设计,输入图像被划分为7×7的网格(grid cell),输出张量中的7×7就对应着输入图像的7×7网格或者说输出就是7×7=49个30维向量。对于一个格子,实际对应着一个向量,有30个特征组成。其中输出两个boundding box(初步得到的预测框),每个框包含其其中心坐标,框的长宽,置信度得分。(置信度得分越高,一般认为该框内是物体的概率越大,也可以理解为和真实物体的重合度越大,iou越大,即预测更为准确)。除了上述2×5=10个特征,剩下20个特征就是类别(这里不包含背景,因为置信度得分confidence已经包含了对于其是否是背景的判断,相当于这里各类别的概率是条件概率,在确定框内是物体条件下属于某个类别的概率)。

当49个格子都输出这30维的特征时,可以理解为每个格子都生成了两个预测框(bounding box),一共图像中会显示2×49=98个预测框。显然这些预测框有些并不准确,且有些可能指向的是同一个待检测的物体。因此这里和”two-stage"一样,我们需要进行常见的目标检测后处理。首先根据confidence×class_max计算出每个bounding box对应最大类别的概率(因为需要首先不是背景,即条件概率,得乘上置信度得分。)设定一定阈值,把最大类别概率低于这个值的框都丢弃掉。

对于剩下的框,再逐类别做NMS处理,最终确定剩余符合条件的预测框。

2.训练阶段

YOLOV1实现的就是输入到输出,所以核心是我们怎样打标签。

对于每个网格,若物体中心落在这个网格,这个网格的类别就取这个物体的类别。如果没有任何物体,则所有类别全部取0。

对于bounding box的值的标定,(在YOLOV1)中每个格子标定两个bounding-box:

1. 一般对于含有物体的格子,其中一个bounding box按ground truth来标,即大小范围完美框住物体,置信度得分设为1;另一个bounding box一般取另外一个尺寸,要么远大于物体,要么远小于物体,一般让它和ground truth的iou较小,则confidence置信度得分可以标为0。可以理解为负样本。

2. 对于不含物体中心的格子,则选定两个不同尺寸的bounding box,因为没包含物体,其confidence标为0。

把打好标签的图片送入网络训练(训练过程不需要NMS处理)

通过巧妙设置损失函数,可以得到更准确的结果。

3.总结与思考

关于模型为什么要采用两个(甚至可以更多)bounding box,笔者认为是可以输出不同尺度的预测框,以利用NMS选出更佳的预测框,增加了对于不同尺度物体的把握能力。

YOLOV1存在的一个明显问题,对于一个网格只能输出一个类别,那要是很多物体的中心都落在同一个网格中呢?因此YOLOV1在小目标和密集性目标识别性能较差。

注意:因为confidence置信度得分已经考虑了框内是不是背景,所以20个类别的分类与fast r-cnn不同,就没有包含背景类别了。这里更多是采用条件概率的思想,置信度得分乘上在物体条件下属于某个类别的概率,才是真正的属于某个类别的概率。

  • 16
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值