物体定位与检测
一、任务描述
给定一张图片或视频帧,找到其中所有目标的位置,并给出每个目标的具体类别,图像中可能出现一个或者多个目标。如下图所示。
对计算机来说,目标检测最困难的部分在于计算机不清楚目标出现在图像中哪个区域。图像中的目标可能出现在任何位置,目标的形态可能存在各种各样的变化。
二、深度学习模型框架【1】
传统的目标检测中,常见的算法是DPM(Deformable Part Model)。2013年利用深度学习算法的R-CNN(Region-based Convolutional Neural Networks)的诞生使基于深度学习的目标检测进入了一个全新的时期。R-CNN在VOC 2007测试集的mAP达到48%。从此Ross Girshick一发不可收拾,连续推出了Fast R-CNN、Faster R-CNN。受Ross Girshick启发许多基于深度学习的目标检测算法被提出,例如YOLO,SSD。
1.使用Region Proposal方法
R-CNN【2】
论文地址:https://arxiv.org/abs/1311.2524
代码地址:https://github.com/rbgirshick/rcnn (matlab)
paper采用的方法是:首先输入一张图片,我们先定位出2000个物体候选框,然后采用CNN提取每个候选框中图片的特征向量,特征向量的维度为4096维,接着采用svm算法对各个候选框中的物体进行分类识别。也就是总个过程分为三个程序:a、找出候选框(例如Selective Search方法);b、利用CNN提取特征向量;c、利用SVM进行特征向量分类。具体的流程如下图片所示:
![](https://i-blog.csdnimg.cn/blog_migrate/3a8cff1837f1433a71521984cbfcf6e1.jpeg)
Fast R-CNN【3】
论文地址:https://arxiv.org/abs/1504.08083
代码地址:https://github.com/rbgirshick/fast-rcnn (matlab-Caffe)
paper采用的方法是:
1)整图经过CNN,得到特征图
2)提取域候选框,例如Selective Search方法
3)把候选框投影到特征图上,Pooling采样成固定大小
4)经两个全连接后,分类与微调选框位置
具体流程如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/aa2d9006d85ae564247d194e9a2a6f6f.jpeg)
Fast R-CNN方法解决了R-CNN方法三个问题:
问题一:测试时速度慢
R-CNN一张图像内候选框之间大量重叠,提取特征操作冗余。
本文将整张图像归一化后直接送入深度网络。在邻接时,才加入候选框信息,在末尾的少数几层处理每个候选框。
问题二:训练时速度慢
原因同上。
在训练时,本文先将一张图像送入网络,紧接着送入从这幅图像上提取出的候选区域。这些候选区域的前几层特征不需要再重复计算。
问题三:训练所需空间大
R-CNN中独立的分类器和回归器需要大量特征作为训练样本。
本文把类别判断和位置精调统一用深度网络实现,不再需要额外存储。
Faster R-CNN【4】
论文地址:https://arxiv.org/abs/1506.01497
代码地址:https://github.com/rbgirshick/py-faster-rcnn(python-Caffe)
paper采用的方法是:技术上将RPN(区域候选网络)网络和Fast R-CNN网络结合到了一起,将RPN获得的proposal直接连接到ROI pooling层,是一个CNN网络实现端到端目标检测的框架。RPN的核心思想是使用卷积神经网络直接产生region proposal,使用的方法本质上就是滑动窗口,网络结构如下图所示。
![](https://i-blog.csdnimg.cn/blog_migrate/70d7e9b33afac0195ca0391ebeda07b1.jpeg)
在这个特征图上使用3*3的卷积核(滑动窗口)与特征图进行卷积,那么这个3*3的区域卷积后可以获得一个256维的特征向量。因为这个3*3的区域上,每一个特征图上得到一个1维向量,256个特性图即可得到256维特征向量。
3*3滑窗中心点位置,对应预测输入图像3种尺度(128,256,512),3种长宽比(1:1,1:2,2:1)的region proposal,这种映射的机制称为anchor,产生了k=9个anchor。即每个3*3区域可以产生9个region proposal。所以对于这个40*60的feature map,总共有约20000(40*60*9)个anchor,也就是预测20000个region proposal。
后边接入到两个全连接层,即cls layer和reg layer分别用于分类和边框回归。clslayer包含2个元素,用于判别目标和非目标的估计概率。reglayer包含4个坐标元素(x,y,w,h),用于确定目标位置。cls:正样本,与真实区域重叠大于0.7,负样本,与真实区域重叠小于0.3。reg:返回区域位置。
最后根据region proposal得分高低,选取前300个region proposal,作为Fast R-CNN的输入进行目标检测。
R-FCN【5】
论文地址:https://arxiv.org/abs/1605.06409
代码地址:https://github.com/daijifeng001/R-FCN (matlab-Caffe)
代码地址:https://github.com/Orpine/py-R-FCN (python-Caffe)
R-FCN的idea出发点(关键思想)
分类需要特征具有平移不变性,检测则要求对目标的平移做出准确响应。现在的大部分CNN在分类上可以做的很好,但用在检测上效果不佳。SPP,Faster R-CNN类的方法在ROI pooling前都是卷积,是具备平移不变性的,但一旦插入ROI pooling之后,后面的网络结构就不再具备平移不变性了。因此,本文想提出来的position sensitive score map这个概念是能把目标的位置信息融合进ROI pooling。
2.使用回归方法
YOLO【6】
论文地址:https://arxiv.org/abs/1506.02640
代码地址:https://pjreddie.com/darknet/yolo/ (c-darknet)
先前的检测系统多使用分类器(classifier)或者定位器(localizer)进行检测任务,把图片的不同局部位置和多种尺度输入到模型中去,图片得分较高的区域(region)作为检测目标。
YOLO(You Only Look Once)是一个全新的方法,把一整张图片一下子应用到一个神经网络中去。网络把图片分成不同的区域,然后给出每个区域的边框预测和概率,并依据概率大小对所有边框分配权重。最后,设置阈值,只输出得分(概率值)超过阈值的检测结果。
![](https://i-blog.csdnimg.cn/blog_migrate/8ac1b039b99d52ec021d05e1ab06d737.jpeg)
YOLO2【7】主要有两个大方面的改进:
- 使用一系列的方法对YOLO进行了改进,在保持原有速度的同时提升精度得到YOLOv2。
- 提出了一种目标分类与检测的联合训练方法,同时在COCO和ImageNet数据集中进行训练得到YOLO9000,实现9000多种物体的实时检测。
SSD【8】
论文地址:https://arxiv.org/abs/1512.02325
代码地址:https://github.com/weiliu89/caffe/tree/ssd (Caffe)
代码地址:https://github.com/zhreshold/mxnet-ssd (MXnet)
贴一张与YOLO方法比较的图,具体的细节可查看原文。
![](https://i-blog.csdnimg.cn/blog_migrate/70d7e9b33afac0195ca0391ebeda07b1.jpeg)
三、目标检测算法训练自己的数据集
这里不提供具体的操作过程,但会附上详细的博客,但由于条件局限性关系,并没有亲操是否正确,检验操作望自斟酌。
1.Faster R-CNN
Faster-RCNN+ZF用自己的数据集训练模型(Python版本)
http://blog.csdn.net/sinat_30071459/article/details/51332084
将数据集做成VOC2007格式用于Faster-RCNN训练
http://m.blog.csdn.net/sinat_30071459/article/details/50723212
2.YOLO
http://blog.csdn.net/sinat_30071459/article/details/53100791
http://blog.csdn.net/samylee/article/details/51729729
http://lib.csdn.net/article/deeplearning/57863?knId=1726
3.SSD
http://www.cnblogs.com/zjutzz/p/6845002.html
http://blog.csdn.net/zhang_shuai12/article/details/52346878
【1】http://blog.csdn.net/zchang81/article/details/69383950(深度学习物体检测——常用资源简述)
【2】http://blog.csdn.net/hjimce/article/details/50187029
【3】http://blog.csdn.net/shenxiaolu1984/article/details/51036677
【4】http://blog.csdn.net/XZZPPP/article/details/51582810
【5】http://www.cnblogs.com/lillylin/p/6277094.html
【6】https://zhuanlan.zhihu.com/p/25045711?refer=shanren7
【7】https://zhuanlan.zhihu.com/p/25167153