深度学习 - 目标检测算法

1. 传统目标检测

传统目标检测算法流程为:多尺度滑动窗口,对每个窗口进行特征提取,分类器分类。以adaboost人脸检测算法为例:

1)多尺度滑动窗口提取很多不同尺度的窗口。

2)对每个窗口进行特征提取,在人脸检测中常用的harr特征,如下图:

深度学习 - 目标检测算法_第1张图片

分别对应的特征是:边缘特征,线性特征,方向特征。特征计算方式是白色区域像素之和 - 黑色区域像素之和。

3)分类器分类,一般分为两类:背景,目标。

4)框出最佳窗口,即bounding box。


2. 基于候选区域的目标检测

经典的算法是:RCNN,fast-RCNN。基本过程介绍:

2.1 RCNN:region with cnn features

RCNN本身与上面的传统方法没有太大区别,只是使用了多尺度卷积核的卷积网来代替了人工提取特征的过程。

2.2 selective search:选择性搜索

选择性搜索就是在一张图片上提取2000个窗口(当然数目灵活选择),使之尽可能覆盖整张图片。具体来说就是先对整张图像进行图像分割(如Efficient Graph-BasedImage Segmentation基于图的图像分割算法),然后对分割后的区域进行相似度度量,然后融合(根据颜色,纹理,大小进行融合),融合后的每个区域对应一个bounding box。

2.3 warp:图像变换

将搜索到的所有bounding box,进行缩放处理,固定成同样大小。

2.4 CNN提取特征

将得到的2000个bounding box输入到卷积网,进行特征提取,并在末端添加全连接层,将得到的特征向量输入到SVM进行分类。

2.5 NMS+SVM 

IOU:交并比,假设有两个区域A,B,则IOU(A, B) = (A∩B) / (A∪B)。

NMS:非极大值抑制,主要是计算IOU来去除冗余窗口。

在训练阶段,图像包含train_x,train_y。但是我们圈出来的2000个bounding box几乎不太可能与训练图像中标注的bounding box完全重合。因此我们就要对这2000个bounding box进行标注。使用的指标就是当前bounding box与标准的bounding box的重合度IOU,比如IOU>0.5,当前bounding box就标注为目标,否则为背景。这样2000个目标都被标注之后,就可以进行SVM训练了。

2.6 回归bounding box

回归是对bounding box位置进行精调,根据分类结果中的目标回归出bounding box位置:(x, y ,w, h),xy方向的平移和缩放。(x, y)为目标中心位置。


3. 回归方法的深度学习目标检测

经典的算法是:YOLO。与RCNN不同之处在于YOLO是直接回归出bounding box的位置,设要预测的目标类别为C种,基本过程介绍:

1) 给定一个输入图像,首先将图像划分为S*S的网格。

2)每个网格预测B个边框,一个边框使用一个5维向量来表示(x, y, w, h, confidence)。

3)每个网格使用C维向量,表示每个网格属于每个类别的概率。

4)最终形成一个S*S * (5B + C)的张量。





你可能感兴趣的:(计算机视觉,深度学习,deep,learning)