1. Object Localization
我们之前的学习一直在讨论图片分类;接下来这一章将讲到物体定位,即不仅要判别图片中是否有检测目标,还要标出目标的位置。如下:
要做到object localization,首先需要给训练图片明确地标注出待检测目标的具体位置(x, y, h, w)。
一种典型的标注方法如下:
2. Landmark Detection
事实上,只要你对训练集标注得当,深度学习还可用于检测人脸的关键部位。如下:
3. Object Detection
目标检测需要将图上的所有目标及其位置都标注出来。为了实现这一目标,训练集为包含和不包含待检测目标的小图片组成,通过卷积网络(ConvNet)预测每个小图片是否包含待检测目标;然后采用滑框策略,遍历大图片的所有区域,基于ConvNet预测检测目标。
滑框策略的不足之处在于,计算资源消耗很大。
4. Convolutional Implementation of Sliding Windows
怎样基于卷积化的方式快速实现滑框算法呢?
4.1 Turning FC layer into convolutional layers
首先,将全连接层变为对应的卷积层。
4.2 Convolution implementation of sliding windows
然后卷积化实现滑框算法。
5. Bounding Box Predictions
滑框策略由于窗口固定,往往无法准确地圈住待检测物体,如下:
接下来的这个算法将很好地处理这点。
YOLO algorithm
YOLo算法首先将输入图像划分成若干个窗格,然后逐个检查是否包含待检测物体的中心点。YOLO算法也能以卷积化的形式快速并行处理。
那么怎样定义待检测物体的位置呢?将每个窗口的左上角设为(0,0),右下角设为(1,1),待检测物体的中心点坐标即可得出,长和宽则为相对该窗口的长和宽的比例。
6. Intersection Over Union
怎样去评价你的算法的好坏程度呢?
Evaluating object localization
7. Non-max Suppression
目前为止,我们学到的算法可能会导致在一张图片上,同一个物体被多次检出。而Non-max Suppression 算法则可以保证在结果中,同一个物品只被报出来一次。那么它是怎样做到的呢?
首先,我们会对每个窗格分别进行物体检测,可能有若干个窗格会检测出同一个物体;
然后先选择存在物体概率最高的方框,丢弃与它重叠率达到0.5的其它方框;
重复上一步过程到最后:
更详细的过程如下:
8. Anchor Boxes
目前的知识只能满足我们在同一窗格里只检测出一个物体;而Anchor Boxes算法能够帮助我们达到在同一个窗格里检测出多个物体。
做法:在目标函数里增加一个物体的数据。
Anchor box example
9. YOLO Algorithm
Training
Make predictions
Outputting the non-max supressed outputs
10. Region Proposals
之前的算法会在输入图像的每个区域都进行计算以判别是否存在待检测物体,这样可能会在很多明显是空白的区域浪费时间。R-CNN会将输入图像划分为若干个分隔区域,然后然检测算法分别在这些分隔区域去进行计算。
R-CNN的缺点时运行很慢,虽然已有很多改进。
注:如无特殊说明,以上所有图片均截选自吴恩达在Coursera开设的神经网络系列课程的讲义。