目标检测RCNN系列演进总结
RCNN
关键流程
- 生成region proposal: 方法选用selective search,大约2000个图,并wrap到固定尺寸(227x227,各向同性缩放)
- 特征提取:CNN从每个region proposal中提取出一个4096维的特征(Alexnet等,5卷积层,2全连接层),输出大致为2000x4096
- 类别分类:SVM对4096维特征进行分类,得到一个2000x20的矩阵(20种类别),然后对每一列进行NMS非极大值抑制
- 位置修正:回归器校正非极大值抑制后剩下的region proposal,输入CNN网络pool5层的特征,输出为xy方向的缩放和平移
训练方法
- 对CNN的有监督预训练:在ILSVRC样本集(只有分类标签)上对CNN网络进行有监督预训练,此时网络最后的输出是4096维特征->1000类分类的映射,并不完全是R-CNN的部分
-
特定样本下CNN的微调:在PASCAL VOC 2007上进行,学习率是有监督预训练第一步学习率的1/10,将第1步中的1000类分类输出改为21类(20类+背景),注意此处仍然是softmax,而不是SVM。
- 正样本:Ground Truth+与Ground Truth相交IoU>0.5的Region proposal
- 负样本:与Ground Truth相交IoU≤0.5的建议框 -
每一类的SVM的训练:输入正负样本在CNN网络计算下的4096维特征(fc7层)
- 正样本:Ground Truth
- 负样本:与Ground Truth相交IoU<0.3的建议框,由于负样本太多,采用hard negative mining的方法在负样本中选取有代表性的负样本 -
每一类的Bounding-box regression训练:
- 正样本:与Ground Truth的IoU最大,且IoU>0.6的Region Proposal
创新点
- 采用数据驱动的特征提取方式(CNN网络)代替经验驱动的HOG、SIFT特征提取方式
- 采用大样本下有监督预训练+小样本微调的方式解决小样本难以训练甚至过拟合等问题
SPP-Net
关键流程
R-CNN中单幅图片大约有2000个region proposal,重复用CNN为每个region proposal提取特征极其费时。因此SPP-net提出在feature map上提取region proposal,这样就只需要在整幅图像上做一次卷积,大大提高了速度。
创新点
- 使用空间金字塔池化层(Spatial Pyramid Pooling)替代原来的pool5
存在的问题
- 同R-CNN一样,分开训练CNN、SVM、BB回归器,训练SVM的特征需要提前保存在磁盘,对磁盘空间要求大(一张图片有2000*4096 bytes存储,图片很多,造成对磁盘空间要求高)
- CNN、SVM分开训练导致SVM loss无法更新SPP-Net之前卷积参数,因此即使采用更深的CNN网络进行特征提取,也无法保证SVM分类器精确率的提升
- 使用Selective Search的方法提取 region proposal是在CPU上进行的,较GPU慢
Fast RCNN
关键流程
- 生成region proposal: 方法选用selective search,大约2000个图
- ROI Pooling:整体输入到CNN中,在最后一个卷积层上对每个region proposal求映射关系,并用一个ROI pooling layer来统一到相同的大小(替代掉最后一个pooling层)
- 分类和回归:经过两个全连接层得到特征向量,分别输入到用于分类的softmax和bounding box回归
创新点
- 直接使用Soft max进行分类,替换掉R-CNN中的SVM分类器
- 将分类、回归一起进行多任务学习
- 借鉴SPP-Net精髓,在Feature Map上获取region proposal
Faster RCNN
关键流程
创新点
- 提出Region Proposal Network(RPN),实现了一个完全的End-To-End的CNN目标检测模型
- 共享RPN与Fast R-CNN的特征