常见的目标检测任务包含以下几种:
几种任务比较
- 目标定位与识别最简单,只有一个目标。
- 目标检测其次,因为它有多个目标,每一个都要识别。
- 语义分割最难,不仅有多个目标,还要明确标出分界线。
- 常规的识别任务也就是分类问题,比目标定位与识别更简单,因为目标定位与识别不仅返回label,还要返回位置。
对于第二个和第三个任务,可以以某一个很小的方框依次扫描整个图,从每一个采集到的图像中,送到识别器中,看是否是想要的。然后把方框逐渐变大,再从头到尾扫描。
AdaBoost的应用
最巧妙的地方在特征提取器和积分图,只用加加减减就完成了特征提取。
比如第一个feature,3次加减法算白的,3次加减法算黑的,再用1次加减法算白减黑,共7次。
分类器构造:取一些人脸(6000张左右)和一些非人脸(7万张)作为训练样本。总共特征,也就是f有20万。
对每一个特征构造一个分类器,也就是20万个弱分类器,然后用AdaBoost组合这些弱分类器。
具体流程:
- 首先在数据集D中选取正确率最高的特征, 用F1表示。
- 将数据集D分为两类,{F1分对的数据}和{F1分错的数据}。
- 以较大概率取F1分错的数据,以较小概率取F1分对的数据,形成新的集合D2。
- 在D2中选取正确率最高的特征,用F2表示。
- 将D分为:{F1、F2都分对的数据},{F1分对而F2分错的数据,以及F1分错而F2分对的数据},{F1,F2都分错的数据}。
- 以最大概率取{F1,F2都分错的数据},以次大概率取{F1分对而F2分错的数据,以及F1分错而F2分对的数据}, 以最小概率取{F1、F2都分对的数据},得到数据集D3.
- 在D3中选取正确率最高的特征,用F3表示。循环,以此类推。
- 用各个特征的线性组合构建分类器。
最能表征人脸的Haar特征:
第1个特征是,眼睛下面这一块减去眼睛的像素,说明这一块最能区别人脸和非人脸。第二个也差不多,第三个是面部中央减两边。
AdaBoost人脸检测流程
- 在图像中,对每一个24*24的格子遍历使用分类器,如果是人脸,则输出。
- 将图像缩小,长宽同时除以1.2,再用分类器遍历每一个24*24的格子。如果是人脸,将该处位置坐标乘以1.2, 等比例放大到原图。
- 重复2,直到图像长或宽小于24个像素为止。
目标识别与定位
单目标检测:
- multi-task,同时进行两个任务,分类和定位。
- 单目标检测和多目标检测的区别在于目标的不确定性。
多目标检测中,如何将卷积神经网络(CNN)用在目标检测上 ?
主要问题:
- 用大大小小的方框遍历所有图像不现实,如何快速挑出可能有物体的区域(Region of Interest, ROI)。
- 我们需要一个计算量不那么大的算法,提出ROI的候选区域(Region of Proposals, or Proposals)
主要有三篇层层递进的文章。
2014-R-CNN, a naïve deep detection model
Girshick, Ross, et al. "Rich feature hierarchies for accurate object detection and semantic segmentation." CVPR. 2014.
Basic Ideas:
- Use selective search to generate proposals
- Scale and resize proposals to fit the CNN
- SVM for final decisions
Main Problems:
- High cost to perform Selective Search (~5s per image)
- Too many passes to CNN (~2000 proposals per image)
- Lead to unacceptable test time (~50s per image)
- High space cost to train SVM (millions of 1024-d features)
流程图:
Region Proposals (Selective Search, SS)
给定一张图片,首先使用 Efficient Graph-BasedImage Segmentation 算法,将图片进行过分割 (Over-Segmentation)
如图所示,过分割后的每个region非常小,以此为基础,对相邻的region进行相似度判断并融合,形成不同尺度下的region。每个region对应一个bounding 。
Selective search,位置比较相近、纹理灰度等特征相似的划分为一个区域。2014年的这篇文章中,一幅图像给出2000个左右的region proposal。
Region Proposals
R-CNN问题:
- 非常缓慢
- 做了很多重复工作,比如一个大的框放进CNN做了卷积,包含了里面的小的方框,它也被放进CNN,也做了卷积。
2015-fast R-CNN, ROI pooling
Girshick, Ross. "Fast r-cnn." CVPR. 2015.
Basic Ideas:
- Reduce the computation redundancy caused by overlaps
Main Contributions:
- ROI pooling layer
- Replace SVM with softmax inside CNN
- Use SVD to accelerate fully connected layer
Main Problems:
- SS costs too much time (~2s for a fast version)
ROI Pooling
ROI pooling,对于不同大小的region proposal,在中间的某一层把它们归一化成统一的形状。也就是对整个图像做卷积,在后面的层中将其大大小小分开。
Fast R-CNN问题:现在生成selective search还是很慢,每张图片需要5s,
2015-faster R-CNN, RPN
Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." NIPS. 2015.
Basic Ideas:
- Reduce the time of generating region proposals
Main Contributions:
- Region Proposal Network (RPN)
- An end to end model finally!
对于特征图某个固定点,ANCHOR 生成9个矩形,共有3种形状,长宽比为大约为:width:height = [1:1, 1:2, 2:1]三种,实际上通过anchors就引入了检测中常用到的多尺度方法。
把任意大小的输入图像reshape成800x600(即图2中的M=800,N=600)。再回头来看anchors的大小,anchors中长宽1:2中最大为352x704,长宽2:1中最大736x384,基本是cover了800x600的各个尺度和形状。
Faster R-CNN检测结果
运行时间对比
在PASCAL VOC上的性能对比
MTCNN
目标检测 – 以人脸检测为例
Zhang K, Zhang Z, Li Z, et al. Joint Face Detection and Alignment Using Multitask Cascaded Convolutional Networks.
Multitask:
- Face detection
- Facial landmarks localization
P-Net (Proposal Network ):
该网络主要是检测图中人脸,产生多个人脸候选框和回归向量,再用回归向量对候选窗口进行校准,最后通过非极大值抑制NMS来合并高度重叠的候选框。
R-Net (Refine Network ):
该网络同样输出候选框置信度(根据置信度削减候选框数量)和回归向量,通过边界框回归和NMS精调候选框的位置。
O-Net (Output Network ):
比R-Net层又多了一层卷积层,处理结果更加精细,作用和R-Net层作用一样(削减框数量同时精调回归框)。再者,该层对人脸区域进行了更多的监督,最后输出5个人脸关键点坐标。
全卷积网络
目标检测 – 语义分割
Long, Shelhamer and Darreli, Fully Convolutional Networks for Semantic Segmentation, CVPR 2015
全卷积网络完全对称,并且先训练降采样部分,然后固定前面,再训练升采样部分。
Average pooling
Max pooling
降采样中,最大池化时,需要记住最大值的位置。然后升采样中,把非最大值位置全赋0。
卷积层的上采样(Upsampling),也叫反卷积(Deconvolution)或 转置卷积(Transpose Convolution)
考虑如下一个卷积层,输入特征图4*4,卷积核3*3,步长1,卷积后获得特征图维度为2*2,卷积流程:
反卷积流程:
全卷积网络还可以用在边缘提取、视频场景人数估计上。