Object Detection
深度学习的繁荣离不开大量的研究人员开发了更多更高效的算法,这一周的课程学几个小时就为了能讲清楚一篇YOLO在干什么。用的组件太多,技术就变成魔法了。
1. 问题定义
Image classification: 判断图像中有某个物体
Object Localization - Classification with localization: 判断图像在图片中,并标记出位置(矩形区域)1

Localization - Bounding Box (bx,by,bh,bw)
其中,(bx,by)是矩形的中心区域,bh和bw是高、宽在图像中的占比(不是绝对值)
目标检测的标注 Softmax + Bounding Box
y=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡Pcbxbybhbwc1c2c3c4⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤y1=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡1bxbybhbw0100⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤y0=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡0????????⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
Pc表示图像中有物体,c1...c4表示要探测的4类对象,当Pc=0时其它内容就都不关注了。
Loss (其中一种)
L(y^,y)={(y1^−y1)2+...+(yn^−yn)2(y1^−y1)2pc=1pc=0
2. 目标检测算法(YOLO)
其实也就是介绍了YOLO的原理。
2.1 Sliding windows detection
- 方法非常直接:使用滑动窗口在图像上移动,并依次放到ConvNet中进行判断
- 使用多个不同的步长可能能够提高性能(效果)
- 计算代价比较高
2.2 Convolutional Implementation of Sliding Windows
核心算法:降低目标检测复杂度的重要算法,让实时检测成为可能。
- 将全连接层转换成卷积层
- 卷积的滑动过程与目标检测的滑动过程是可以统一的
2.2.1 Turning FC Layer into convolutional layers
分类中的全连接层:上一层5×5×16直接连接一个400×1的全连接层
卷积实现:上一层5×5×16连接一个5×5的filter 400个,得到1×1×400的“全连接层”,再应用1×1 filter 400个。注意这里其实是与全连接层的计算是等价的。

2.2.2 Convolution implementation of sliding windows
有了全连接层的卷积实现,再进一步得到滑动窗口的卷积实现(卷积操作本身就是一个滑动窗口移动的过程),具体地:
- 滑动窗口的大小就是filter的大小
- stride就是MAX POOL的大小
注意下图中16×16×3的图像在14×14×3的窗口滑动下是如何变成最右边对应的左上角元素的。

这里解决了核心大头问题,接下来还有一些工作可以继续提高效果
2.3 Bounding Box Predictions
在全局标注的基础上将问题进行了切割
- 将问题切分成网格(比如3×3),对于每一个网格进行标注(变成了9个标注)
-
(bh,bw)和(bx,by)的标注都是以网格单元为基础的,并且(bh,bw)是可以大于1的(越过网格边界)
- 只将物体中心(bx,by)所在的格子标记为1
2.4 Anchor Boxes
对于目标应用不同的Anchor Box,能更好的区分重叠的不同形状的目标。此时标注也会发生相应变化,比如下面是两个anchor box:
y=⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡Pcbxbybhbwc1c2c3c4Pcbxbybhbwc1c2c3c4⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤⇒⎣⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎢⎡0????????1bxbybhbw0100⎦⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎥⎤
2.5 评价指标 Intersection over Union (IoU)2

2.6 Non-max suppression
重叠的检测结果(以概率最大的为标准)中只取IoU最大的,下面是算法流程,很直观。
Each output prediction is:
y=⎣⎢⎢⎢⎢⎡Pcbxbybhbw⎦⎥⎥⎥⎥⎤
Discard all boxes with Pc≤0.6
While there are any remaining boxes:
- Pick the box with largest Pc, output that as a prediction
- Discard any remaining box with IoU ≥0.5 with the box output in the previous step
2.7 YOLO Algorithm
把上面的组件合在一起,就是YOLO了。具体地,如果在3×3的网格上用2个anchor box对4个分类的预测结果大小应该是 3×3×2×9 。