论文链接
You Only Look Once: Unified, Real-Time Object Detection
https://arxiv.org/abs/1506.02640
1.Object Detection
Object Detection目标是,输入一张图片,输出图片中包含的所有对象以及每个对象的位置(包围该对象的矩形框)。
在YOLO之前,RCNN系列(RCNN/Fast RCNN/Faster RCNN)都是采用两阶段的处理模式,先提出候选区(Region Proposals),再识别候选区中的对象。YOLO创造性的将候选区(Region Proposals)选择和对象检测两个阶段合二为一,看一眼图片就可以知道对象是什幺以及它们的位置。
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*448*3的输入图片经过神经网络的变换得到一个大小为7*7*30的输出张量(Tensor),7*7是输入图片的划分网格数,30维向量包含的信息如下:
图片来源【1】
20个对象分类的概率
$P(C_1 | Object), P(C_2 | Object), …, P(C_{20} | Object)$,之所以是20是由于YOLO V1支持识别20种不同的对象(人、鸟、猫、汽车、椅子等)。
2个Bounding Box的位置
YOLO中使用(x, y, w, h)来表示一个Bounding Box,(x, y)表示BBox的中心,(w, h)表示BBox的宽高。
注意,(x,y) 是相对于 cell 左上角坐标的偏移量,并使用 cell 大小做归一化;(w,h) 是相对于整个图片的宽和高的比例;这样 (x,y,w,h) 的大小都在 [0,1]范围内。如下图:
图片来源【1】
2个bounding box的置信度
Bounding Box的置信度 = Bounding Box中存在对象的概率 * Bounding Box与对象实际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_{ij}^{obj}$:i 表示第 i 个Grid Cell,j 表示第 j 个 bbox,obj 表示存在目标,即目标的中心点在 cell 中。它用于判断第i个Grid Cell的第j个bbox是否负责这个Object,与Object的Ground Truth BBox的IOU最大的bbox负责该Object。
$1_{i}^{obj}$:表示Grid Cell中存在Object。
$1_{ij}^{noobj}$:表示第i个Grid Cell的第j个bbox不负责任何Object。
图片来源【1】
类别损失:$1_{i}^{obj}$表示只有包含Object的Grid Cell才计入误差计算;
位置损失:$1_{ij}^{obj}$表示只有负责(IOU比较大)预测的那个Bounding Box的数据才会计入误差。同时为了解决Object大小不同导致的差异,对w和h进行了平方根处理。
置信度损失:$1_{ij}^{obj}$表示只有”负责”(IOU比较大)预测的那个bounding box的数据才会计入误差。不存在对象的bounding box应该输出尽量低的置信度。
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)来防止过拟合(Overfit)。更多细节请参考原论文。
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。
参考材料
1. https://www.cnblogs.com/yanshw/p/12294233.html
3. https://blog.csdn.net/qq_30815237/article/details/91949543
Be First to Comment