R-CNN
注:这篇博客适合初学者,高手勿喷。
R-CNN的总体步骤分为如下几步:
1.用selective search提取出2k个候选region proposal
2.将每一个region proposal 使用warped 的方法调整到227*227像素(warped不了解见后面)
3.对于每个region,使用AlexNet网络去掉最后softmax来提取4096维特征。
4.使用AlexNet提取出来的特征作为输出,训练出来K个L-SVM作为分类器,得到每个region属于某一类的得分。
5. 最后对每个类别用NMS来舍弃掉一部分region,得到detection的结果
fine-tuning
计算通过selective search 选出的region 与ground-truth boxs 的IOU,选出IOU大于0.5的区域,并将其标记为对应ground-truth 的label...
这样做的目的是:由于ground-truth 较少,fine-tuin 加入一些额外的region可以有效的防止过拟合,但是由于这样选取的数据并不精准,因此fine-tuning
得到的网络并不是精确定位。
Object category classifiers:
这里作者是将于相关类的与ground-truth的值小于0.3的作为负例(这里0.3是作者在[0,0.5]的区间里面进行搜索得到的),将(0.3到1之间的忽略),并且仅仅将ground-truth作为正例,训练线性svm,这样我理解的是使得正例与负例之间的margin尽可能的大,从而加大区分度。
作者在文中还讨论了为什么要对此进行区分,为什么不直接使用fine-tuning 之后的特征来进行softmax打分。
作者认为有两点:
1.fine-tuning所使用的正例并没有精确定位
2.softmax 所用的负例是从所有负例中随机采样得到,而svm的训练过程中使用的是对应subset的负例,这些负例更"hard negative”,所以作者认为svm得到的结果会更好
visualization:
作者将网络第五层:max-pooling 层的每一个激活对应的所有图像的得分排名前几的列出来,通过这种方式来可视化每一个激活单元所得出的图像特征,同样是值得学习与借鉴。
ablation studies(消融学习)
1.在不使用fine-tune 的时候,作者发现,使用第五个pool层得出的结果要比fc6和fc7得出的结果还要好,因此作者认为cnn主要的特征表征性是来自于卷基层而不是更加复杂的全连接层。
2.在使用fine-tune的时候,fc6与fc7的结果要比pool的要好,作者得出,从ImageNet的网络得出的feature是general的,fine-tuin提高的部分是两个全连接层,能够得到的是domain-specific 的信息。
一些需要补全的基础知识:
1.selective选出的2000个region是什么样的?
答:选出的是任意形状的矩形区域
2.图中warped reegion 是什么 意思?
作者在文中的处理是在原图像加上16个像素,然后在按照比例缩放到227*227的alexNet的标准输入上去
加上16个像素的目的是为了增加一些背景信息。
什么是NMS?
NMS是指非极大抑制(Non-Maximum Suppression),其目的是给你一副图像的很多bouding box,然后对这些bouding box
进行筛选,筛选的目的是为了选取的bouding box 之间的IoU要低于指定阈值,并且bouding box的得分尽可能大。
具体可以参看http://blog.csdn.net/danieljianfeng/article/details/43084875 的matlab 代码
什么是IoU?
Intersection-over-union 就是交比上并,这里在r-cnn中两个region的IoU是指两个region像素级别的交比上像素级别的并。
总结:1.作者所做的实验非常充分,发现两种不同的方法造成的提高之后,会分析为什么这一种方法会比另外一种方法要好,分析的很透彻,值得学习与借鉴。
2.这篇paper作者分析了每个输出层的可视化结果,能够知道每一层到底得到的是哪些东西,虽然我们并不了解CNN的真正的内部原理,但是我们能够从结果出发反向推导出每一层的具体表征意思, 这一点值得我们去学习,凡是要弄清楚为什么,以及尽可能的去解释背后的原因。