首先给出论文地址:Rich feature hierarchies for accurate object detection and segmentation
这篇论文提出的房价叫做R-CNN,中文解释可以为基于区域候选的卷积神经网络。这个网络结构也是发挥了很大的作用,也导致了后面很多的网络都是基于这个改进的,例如啊:Fast R-CNN、Faster R-CNN等等。这个框架在当时的数据集VOC 2012取得了非常好的效果,高于之前最好的结果约30%,实现了平均准确率为53.3%。
这篇博文的结构大概是这样的:
1、区域候选的产生方法----selective search
2、模型的框架
3、CNN 微调
3、分类策略
4、定位策略
区域候选的产生方法----selective search
使用区域候选方法创建目标检测的感兴趣区域(ROI)。在选择性搜索中,我们可以先分成足够小的区域,然后将两个区域相近的合并,这样子一直做下去,直到合成最后一个区域为整个图片。
在介绍Selective Search之前,先说些小知识点:
a.适应不同尺度:穷举搜索通过改变窗口大小来适应物体的不同尺度,选择搜索同样无法避免这个问题。
b.多样化:单一的策略无法对应多种类别的图像,使用颜色、纹理、大小等多种策略对分割的区域进行合并。
c.速度快。
下面具体讲讲两个区域合并,要满足什么条件这两个区域才能合并呢?——这就是多样新策略
-距离计算方式
距离计算方式需要满足两个条件:速度快,因为我们有这么多的区域建议还有这么多的多样性 ,其二是合并后的特征好计算,因为我们通过贪心算法合并区域,如果每次都需要重新计算距离,这个计算量就太大了。
-
颜色距离:
我们费劲心思搞了这个多的色彩空间,首先当然是计算颜色距离:
S c o l o r ( r i , r j ) = ∑ k = 1 n m i n ( c i k , c j k ) S_{color}(r_i, r_j) = \sum\limits_{k=1}^nmin(c_i^k, c_j^k) Scolor(ri,rj)=k=1∑nmin(cik,cjk)
距离的计算方式很简单,就是对各个通道计算颜色直方图,然后取各个对应bins的直方图最小值。这样做的话两个区域合并后的直方图也就很好计算,直接通过直方图大小加权然后除以总区域大小就好了。 -
纹理距离
S t e x t u r e ( r i , r j ) = ∑ k = 1 n m i n ( t i k , t j k ) S_{texture}(r_i, r_j) = \sum\limits_{k = 1}^nmin(t_i^k, t_j^k) Stexture(ri,rj)=k=1∑nmin(tik,tjk)
纹理距离计算方式和颜色距离几乎一样,我们计算每个区域的快速sift特征,其中方向个数为8, 3个通道,每个通道bins为10,对于每幅图像得到240维的纹理直方图,然后通过上式计算距离。 -
优先合并小的区域
如果仅仅是通过颜色和纹理特征合并的话,很容易使得合并后的区域不断吞并周围的区域,后果就是多尺度只应用在了那个局部,而不是全局的多尺度。因此我们给小的区域更多的权重,这样保证在图像每个位置都是多尺度的在合并。
S s i z e ( r i , r j ) = 1 − s i z e ( r i ) + s i z e ( r j ) s i z e ( i m ) S_{size}({r_i, r_j}) = 1 - \frac{size(r_i) + size(r_j)}{size(im)} Ssize(ri,rj)=1−size(im)size(ri)+size(rj) -
区域的合适度度距离
不仅要考虑每个区域特征的吻合程度,区域的吻合度也是重要的,吻合度的意思是合并后的区域要尽量规范,不能合并后出现断崖的区域,这样明显不符合常识,体现出来就是区域的外接矩形的重合面积要大。因此区域的合适度距离定义为:
f i l l ( r i , r j ) = 1 − s i z e ( B B i j ) − s i z e ( r i ) − s i z e ( r j ) s i z e ( i m ) fill(r_i, r_j) = 1 - \frac{size(BB_{ij})-size(r_i) - size(r_j)}{size(im)} fill(ri,rj)=1−size(im)size(BBij)−size(ri)−size(rj) -
综合各种距离
现在各种距离都计算出来,我们要做的就是整合这些距离,通过多种策略去得到区域建议,最简单的方法当然是加权咯:
S ( r i , r j ) = α 1 S s c o l o r ( r i , r j ) + α 2 S t e x t u r e ( r i , r j ) + α 3 S s i z e ( r i , r j ) + α 4 S f i l l ( r i , r j ) S(r_i, r_j) = \alpha_1S_{scolor}(r_i, r_j) + \alpha_2S_{texture}(r_i, r_j) + \alpha_3S_{size}(r_i, r_j) + \alpha_4S_{fill}(r_i,r_j) S(ri,rj)=α1Sscolor(ri,rj)+α2Stexture(ri,rj)+α3Ssize(ri,rj)+α4Sfill(ri,rj) -
参数初始化多样性
我们基于基于图的图像分割得到初始区域,而这个初始区域对于最终的影响是很大的,因此我们通过多种参数初始化图像分割,也算是扩充了多样性。
返回目录
模型的框架
这篇论文对图片特征提取的框架与之前的AlexNet框架是一样的,没有什么大的变化。这个框架可以参考我之前的博文:【论文】 ImageNet Classification with Deep Convolutional Neural Networks(讲解)
CNN 微调
CNN 微调,英文为 CNN fine-tuning,这个方法是非常有用的,特别是在我们的训练集数据比较少的时候显得很有用。
像我们之前的模型训练的方法是,先搭建我们的模型,然后用这个model去fit我们的训练集,这些初始化的参数都是我们随机的,或者是一些经验值,这样,可能会导致一个过拟合,因为我们的数据集如果很少的话,第二个就是这样训练的时间会比较长,而且性能也不是特别好。
fine-tuning的思想是借助一个大的训练集去训练,等训练完后,然后将这些参数保存起来,再将这个模型在我们自己的训练集上去训练,而且论文中的实验也表明,对卷积层微调对性能提升不大,什么没有提升,但是对全连接层进行微调后,性能上有了比较明显的提升,这就说明,对特征层进行提高针对某个具体任务产生的影响不大,对全连接层微调让整个网络更适应当前任务。
返回目录
分类策略
这篇文论就是训练了一个SVM来做分类检测的。
返回目录
定位策略
这里大家还是要好好理解一下那些公式的,很有意思。具体的大家可以去看论文。
Reference
[1]目标检测(1)-Selective Search