作为RCNN系列小说的第一篇,今天终于翻开了第一页。论文和论文详解博客夹着看,大概是文章要做的事情看懂了,代码等4篇看完再看,代码的复现就要等GPU买回来了。
一、文章做了什么
深度学习在目标检测领域的开山之作。用Selective Search生成2k个候选区域,经过归一化处理,通过AlexNet/VGG进行特征提取,然后用SVM进行识别分类,再用Bounding Box Regressing获得最终的候选框的(x,y,h,w)。
二、创新点在哪
1.用CNN进行特征提取.
传统的目标检测算法HOG、SIFT、DPM 等,以后再看。
2.迁移学习。用大样本数据集进行预训练pretrain,再对小样本进行fine-tuing。(用ILSVRC2012预训练,2百万图片,200个类别;用PASCAL VOC进行微调,20个类别)
解决的问题:如果只有小样本作为训练集,很难训练,而且可能会过拟合
三、算法步骤
1)候选区域的选择
Selective Search
从一张图像生成约2000-3000个候选区域。基本思路如下:
- 使用一种过分割手段,将图像分割成小区域
- 查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置
- 输出所有曾经存在过的区域,所谓候选区域
候选区域生成和后续步骤相对独立,实际可以使用任意算法进行。
2)CNN特征提取
1.预处理:Crop/Warp。全部归一化到227*227(AlexNet输入的图片分辨率)
2.有监督预训练。
训练集ILSVRC2012全部,学习率0.01,提取的特征为4096维,输出1000维类别的符号
3.fine-tuning
网络结构:同样的网络结构,最后一层换成4096->21的全连接网络
学习率0.01(为pretrain的1/10),每一个batch包含32个正样本和96个background
训练数据:
PASCAL VOC 2007的训练集,输入一张图片,输出21维的类别标号,表示20类+背景。
(考察一个候选框和当前图像上所有标定框重叠面积最大的一个。如果重叠比例大于0.5,则认为此候选框为此标定的类别;否则认为此候选框为背景)3)分类与边界回归
实际包含两个子步骤,一是对上一步的输出向量进行分类(需要根据特征训练分类器);二是通过边界回归(bounding-box regression) 得到精确的目标区域,由于实际目标会产生多个子区域,旨在对完成分类的前景目标进行精确的定位与合并,避免多个检出。
四、R-CNN有什么问题
1)多个候选区域对应的图像需要预先提取,占用较大的磁盘空间;
2)针对传统CNN需要固定尺寸的输入图像,crop/warp(归一化)产生物体截断或拉伸,会导致输入CNN的信息丢失;
3)每一个ProposalRegion都需要进入CNN网络计算,上千个Region存在大量的范围重叠,重复的特征提取带来巨大的计算浪费。
SPP-Net诞生,不想写了...