Object Detection-深入理解YOLO v1

2022-04-28 19:47:07 浏览数 (1)

论文链接

You Only Look Once: Unified, Real-Time Object Detection

https://arxiv.org/abs/1506.02640

1.Object Detection

Object Detection目标是,输入一张图片,输出图片中包含的所有Object以及每个Object的位置(包围该Object的Bounding Box)。

在YOLO之前,RCNN系列(RCNN/Fast RCNN/Faster RCNN)都是采用两阶段的处理模式:先提出候选区域(Region Proposals),再识别候选区中的Object。YOLO创造性的将候选区(Region Proposals)选择和Object检测两个阶段合二为一,看一眼图片就可以知道Object是什么以及它们的位置。

2.YOLO的实现方案

YOLO中没有了直接提取候选区(Region Proposal)的步骤,取而代之的是将图片划分成S x S 个网格(Grid Cell),论文中S = 7;每个Grid Cell负责预测Object中心点落在该Cell内的Object;每个Cell生成B个Bounding Box,论文中B=2。

图片来源【1】

没有候选区(Region Proposal)之后,YOLO的结构非常直接,就是单纯的卷积、池化最后加了两层全连接。

粗略的说,YOLO的整个结构就是将大小为448 x 448 x 3的输入图片经过神经网络的变换得到一个大小为7 x 7 x 30的输出张量(Tensor),7 x 7是输入图片的划分的Grid Cell数量。30维向量包含的信息如下:

图片来源【1】

20个对象分类的概率

P(C_1 | text{Object}), P(C_2 | text{Object}), ..., P(C_{20} | text{Object})

,之所以是20是由于YOLO V1支持识别20种不同的对象(人、鸟、猫、汽车、椅子等)。

2个Bounding Box的位置

YOLO中使用(x, y, w, h)来表示一个Bounding Box,(x, y)表示BBox的中心,(w, h)表示BBox的宽高。

注意,(x,y)是相对于Grid Cell左上角坐标的偏移量,并使用Grid Cell的宽高做归一化处理;(w,h)是相对于整个图片的宽和高的比例;这样(x,y,w,h)的数值都在[0,1]范围内。如下图:

图片来源【1】

2个bounding box的置信度

Bounding Box的置信度 = Bounding Box中存在Object的概率 * Bounding Box与Object实际Bounding Box的IOU。

text{Confidence} = text{Pr}(text{Object}) * text{IOU}_{text{pred}}^{text{truth}}

IOU是在训练阶段计算的,因为在Inference阶段并不知道真实对象在哪里,只能完全依赖于网络的输出,这时已经不需要也无法计算IOU了。

Bounding Box的置信度Confidence表示它是否包含对象且位置准确的程度。置信度高表示这里存在一个对象且位置比较准确;置信度低表示可能没有对象或者即便有对象也存在较大的位置偏差。

3. 损失函数

损失函数的设计是Yolo 算法的比较核心的部分。

图片来源【1】

公式中:

图片来源【1】

4. YOLO训练

YOLO先把前20层卷积网络层 平均池化层(Average-pooling Layer) 全连接层(Fully Connected Layer)在ImageNet数据集上进行预训练。

YOLO的最后一层采用线性激活函数(Linear Activation Function),其它层都是Leaky ReLU:

phi(x)= begin{cases} x, text{x >0} \ 0.1x, text{otherwise} end{cases}

除此之外,训练中还采用了Drop Out和数据增强(Data Augmentation)来防止过拟合。更多细节请参考原论文。

5.YOLO预测(inference)

训练好的YOLO网络,输入一张图片,输出一个7x7x30的张量(tensor)来表示图片中所有网格(Grid Cell)包含Object的概率以及该Object可能的2个Bounding Box位置和其置信度。为了从中提取出最有可能的Object和Bounding Box,YOLO采用NMS(Non-maximal suppression,非极大值抑制)算法。

NMS(非极大值抑制)

NMS算法的核心思想是:选择得分(Score)最高的作为输出,与该输出重叠比较大的Inference Objects去掉,不断重复这一过程直到所有Inference Objects处理完。

它的步骤如下:

1)根据置信度得分进行排序;YOLO的Score计算方法如下:

text{Score}_{ij} = P(C_i | text{Object}) * text{Confidence}_j

设置一个阈值,过滤掉Score低于阈值的候选对象;

2)遍历每一类Object,找到该类内Score最大的Object及其Bounding Box,并添加到输出列表。

3)计算其它Object的Bounding Box与Score最大的Object的Bounding Box的IOU,根据预先设置的IOU阈值,所有高于该阈值(重叠度较高)的候选对象排除掉。

4)重复上述步骤,直至所有分类的Object都处理完毕。

最后输出列表中的就是YOLO检测出的Objects。

0 人点赞