Fast RCNN
1. Introduction
RCNN的缺点:
- multi-stage
- 训练消耗大量空间与时间
- 测试速度慢
RCNN耗时的原因在于CNN是在每一个Proposal上单独进行的,没有共享计算
Fast RCNN的优点在于:
- 检测的准确率更高
- 训练是单阶段的
- 训练可以更新所有网络层
- No disk storage is required for feature caching
2. Fast RCNN architecture and training
- 输入为整张图以及若干个RoIs
- 首先使用卷积网络对整张图进行处理,得到特征图
- 对每个RoI,从特征图中抽取固定长度的特征向量输入全连接层
- 最终分成两个输出层:
- 一个输出K个类别+1个背景类别的softmax概率估计
- 另一个为K个类别的每一个类别输出四个实数值
2.1 The Roi Pooling layer
RoI指的是在一张图片上完成Selective Search后得到的“候选框”在特征图上的一个映射,RoI Pooling的过程就是将一个个大小不同的box矩形框,都映射成大小固定(w * h)的矩形框;
- ROI pooling的输入:各个roi区域在特征图上对应的特征区域
- 通过max pooling输出到固定尺寸
- RoI有四个参数 (r,c,h,w) 除了尺寸参数 h,w 外,还有两个位置参数 r,c 表示RoI的左上角在整个图片中的坐标。
2.2 Initializing from pre-trained networks
当用一个预训练的网络初始化一个Fast R-CNN网络需要经历三个转换。
- 最后的最大池化层要替换成RoI池化层,配置的参数H和W要与网络的第一个全连接层想适应(对于VGG16来说,就是H=W=7)。
- 网络的最后一个卷积层和softmax(1000路ImageNet分类)层要替换成两个并行的层。一个是全连接层并输出K+1路的softmax,一个是类别相关的约束框回归器。
- 网络修改为接受两个数据输入:一组图像和一组这些图像的RoI。
2.3 Fine-tuning for detection
Fast R-CNN整个网络可以被使用BP算法训练是一个极大的优点:SGD mini_batch分层采样方法。
首先随机取样N张图片,然后每张图片取样R/N个RoIs 。除此之外,网络在一次微调中将softmax分类器和bbox回归一起优化,区别于R-CNN的softmax回归,SVM,bbox回归的三步分开优化。
Multi-task loss
loss_cls层评估分类代价。由真实分类u对应的概率决定:
loss_bbox评估检测框定位代价:
其中g为Smooth L1误差,对outlier不敏感:
总代价为两者加权和,如果分类为背景则不考虑定位代价:
3. Train/Test
3.1 Train
- 对训练集中的图片,用selective search提取出每一个图片对应的一些proposal,保存图片路径和bounding box信息;
- 对每张图片,根据图片中bounding box的ground truth信息,给该图片的每一个proposal标记类标签,并保存。具体操作:对于每一个proposal,如果和ground truth中的proposal的IOU值超过了阈值(IOU>=0.5),则把ground truth中的proposal对应的类标签给原始产生的这个proposal,其余的proposal都标为背景;
- 使用mini-batch=128,25%来自非背景标签的proposal,其余来自标记为背景的proposal;
- 训练CNN,最后一层的结果包含分类信息和位置修正信息,用多任务的loss,一个是分类的损失函数,一个是位置的损失函数。
3.2 Test
- 用selective search方法提取图片的2000个proposal,并保存到文件;
- 将图片输入到已经训好的多层全卷积网络,对每一个proposal,获得对应的RoI Conv featrue map;
- 对每一个RoI Conv featrue map,按照3.1中的方法进行池化,得到固定大小的feture map,并将其输入到后续的FC层,最后一层输出类别相关信息和4个boundinf box的修正偏移量;
- 对bounding box 按照上述得到的位置偏移量进行修正,再根据nms对所有的proposal进行筛选,即可得到对该张图片的bounding box预测值以及每个bounding box对应的类和score。