论文名称:《 Rich feature hierarchies for accurate object detection and semantic segmentation 》
论文下载:https://arxiv.org/pdf/1311.2524.pdf
论文代码:https://github.com/rbgirshick/rcnn
目标检测 ,就是在给定的图片中精确找到物体所在位置,并标注出物体的类别。detection 要解决的问题就是“大概在哪里——是什么——具体在哪里”这整个流程的问题。然而,这个问题可不是那么容易解决的,物体的尺寸变化范围很大,摆放物体的角度,姿态不定,而且可以出现在图片的任何地方,更何况物体还可以是多个类别。故用一般的方法是比较难处理的,这也是为什么在深度学习兴起之前,ILSVRC 检测比赛检测那么沉寂的原因。随着 Hinton 在 2012 年的比赛用 CNN 虐杀其他团队之后,深度学习以及深度卷积网络再一次进入人们视线,这种比较困难的问题也渐渐有思路了。
在R-CNN横空出世之前,最开始的想法是,先训练出一个网络能分出是否是物体,即先不管是什么物体,只要 bounding box 与 ground truth 的 IOU 大于某个阈值,就认为是正样本,小于某个阈值为负样本,然后直接训练,然后直接给它 ground truth,然后用当前框位置与 ground truth 的欧式距离作为 loss,让它自己去学习什么是 object 以及 object 在哪里呢,也就是说把这个任务当成分类问题 + 回归问题来做。通过这个网络在一张大图 sliding windows,就能确定存在物体的区域,再根据回归,来使得 bounding box 框得更准。
不过实际上,想想就能知道,这种方法是开始没有任何限制地去学习,这样会导致任务复杂度非常高,网络会不收敛,而且在测试的时候会非常慢,因为不知道在哪里有什么东西,需要 sliding windows 并且需要不同尺度的缩放,另外并且在 RCNN 的论文中提到了不加限制直接当回归来做实际效果并不是特别好。我觉得不好的原因可能是学习的复杂度太高,这相当于在一开始就没有给任何限制,让网络自己去根据自己预测的和真实的框的距离差去学习,这样子的话,同一种物品在不同位置以不同的大小都可以认为是全新的一个训练样本,完全去拟合这样的任务显然是不太可能的。所以说,这种问题一定要先降低任务复杂度,然后再去学习降低复杂度的等价任务。
Ross Girshick 大神为了降低检测任务的复杂度,把检测任务最直观的在哪里(回归问题),转化成先用传统方法先定候选框(通过边缘特征、轮廓特征等使得整个问题的复杂度降低,我不是全图搜索 object,而是只在符合 proposals 算法的区域来搜索),然后在确定是什么(是背景还是是某种物体),然后根据这些已经判断是物体的区域(object score 分数高于阈值)来进行回归(精确位置所在)。检测最难做的是网络判断物体大致在哪里这个过程,而具体是什么,精确位置,当知道大致的位置后也就变得异常简单了,迭代就好,把一切交给深度学习就好。
1、算法三大步:
1)候选区域选择
Region Proposal 是一类传统的区域提取方法,可以看作不同宽高的滑动窗口,通过窗口滑动获得潜在的目标图像,关于 Proposal 大家可以看下 SelectiveSearch,一般 Candidate 选项为 2k 个即可,这里不再详述;
根据 Proposal 提取的目标图像进行归一化,作为 CNN 的标准输入。
2)CNN 特征提取
标准 CNN 过程,根据输入进行卷积 / 池化等操作,得到固定维度的输出;
3)分类与边界回归
实际包含两个子步骤,一是对上一步的输出向量进行分类(需要根据特征训练分类器);二是通过边界回归(bounding-box regression) 得到精确的目标区域,由于实际目标会产生多个子区域,旨在对完成分类的前景目标进行精确的定位与合并,避免多个检出
2、三个明显问题:
1)多个候选区域对应的图像需要预先提取,占用较大的磁盘空间;
2)针对传统 CNN 需要固定尺寸的输入图像,crop/warp(归一化)产生物体截断或拉伸,会导致输入 CNN 的信息丢失;
3)每一个 ProposalRegion 都需要进入 CNN 网络计算,上千个 Region 存在大量的范围重叠,重复的特征提取带来巨大的计算浪费。
1、有监督预训练
数据集为ILSVRC2012,ILSVRC样本集上仅有图像类别标签,没有图像物位
置标注;
采用AlexNet CNN网络进行有监督预训练,学习率=0.01; 该网络输入为
227×227的ILSVRC训练集图像,输出最后一层为4096维特征—>1000类的映
射,训练网络参数。
2、特定样本下的微调
PASCAL VOC 2007样本集上既有图像中物体类别标签,也有图像中物体位
置标签;
采用训练好的AlexNet CNN网络进行PASCAL VOC 2007样本集下的微调,
学习率=0.001【0.01/10为了在学习新东西时不至于忘记之前的记忆】;
mini-batch为32个正样本和96个负样本【由于正样本太少】; 该网络输入
为候选框【由selective search而来】变形后的227×227的图像,修改了原来的1000为类别输出,改为21维【20类+背景】输出,训练的是网络参数。
正样本: Ground Truth+与Ground Truth相交IoU>0.5的建议框
负样本:与Ground Truth相交IoU≤0.5的建议框
3、SVM训练
正样本: Ground Truth
负样本:与Ground Truth相交IoU≤0.3的建议框
由于SVM是二分类器,需要为每个类别训练单独的SVM;
SVM训练时输入正负样本在AlexNet CNN网络计算下的4096维特征,输出为该类的得分,训练的是SVM权重向量;
由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本,该方法具体见。
4、Bounding-box regression训练
正样本:与Ground Truth相交IoU最大的Region Proposal,并且与Ground Truth相交IoU>0.6的建议框
学习从建议框向Ground Truth变换的横向和纵向平移、放缩这四种线性变换函数的权值。
采取过分割手段,将图像分割成小区域,再通过颜色直方图,梯度直方图
相近等规则进行合并,最后生成约2000个建议框。
(1)对2000×20维矩阵中每列按从大到小进行排序;
(2)从每列最大的得分建议框开始,分别与该列后面的得分建议框进行IoU计算,若IoU>阈值,则剔除得分较小的建议框,否则认为图像中存在多个同一类物体;
(3)从每列次大的得分建议框开始,重复步骤(2);
(4)重复步骤③直到遍历完该列所有建议框;
(5)遍历完2000×20维矩阵所有列,即所有物体种类都做一遍非极大值抑制;
(6)最后剔除各个类别中剩余建议框得分少于该类别阈值的建议框。
(1)采用高容量的CNN进行特征提取
(2)采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题。小样本数据训练很容易造成网络过拟合,但是在大样本训练后利用其参数初始化网络可以很好地训练小样本,这解决了小样本训练的难题。文中利用ILSVRC2012的训练集先进行有监督预训练,再利用PASCAL 2007进行微调。
(1)需要多级训练,特征提取网络,分类器,边界回归需要分别训练。
(2)计算复杂度高,重复计算。建议框的数量有几千个,多数都是互相重叠,重叠部分会被多次重复提取特征,训练的时间和空间开销大。
(3)为每个目标候选框进行卷积神经网络正向传递,而不共享计算,导致检测速度很慢。