R-CNN有以下几个缺点:
1、训练分多阶段,首先fine-tune CNN,然后训练SVM作为检测器,最后训练bonding box 回归器。
2、训练时间空间消耗大。特征需要写入硬盘。
3、测试时间比较长。一张图片在VGG16网络上,GPU运行需要47s。因为对每个region proposal都当做一幅图像,通过CNN提取特征。
SPPnets(Spatial pyramid pooling networks):
SPPnets【1】提高了R-CNN的速度。根据R-CNN的速度慢的缺点,R-CNN对每个region proposal都当做一幅图像,通过CNN提取特征,没有共享计算。SPPnet的思想是把整副图像输入CNN网络,然后把每个region proposal的对应特征提取出来,输入CNN。这样一幅图像就需要一遍CNN前向传播,共享了计算。但是每个region proposal的大小形状不一样,对应的特征大小也不一样,但全连接层需要特定大小的输入,所以SPP-NET恰好可以解决这个问题:
上图对应的就是SPP-NET的网络结构图,任意给一张图像输入到CNN,经过卷积操作我们可以得到卷积特征(比如VGG16最后的卷积层为conv5_3,共产生512张特征图)。图中的window是就是原图一个region proposal对应到特征图的区域,只需要将这些不同大小window的特征映射到同样的维度,将其作为全连接的输入,就能保证只对图像提取一次卷积层特征。SPP-NET使用了空间金字塔采样(spatial pyramid pooling):将每个window划分为4*4, 2*2, 1*1的块,然后每个块使用max-pooling下采样,这样对于每个window经过SPP层之后都得到了一个长度为(4*4+2*2+1)*512维度的特征向量,将这个作为全连接层的输入进行后续操作。
SPPnets因为实现了计算共享,所以测试速度比R-CNN快了10~100倍,训练速度也提高了3倍。
SPPnets也存在着不足:
1.训练还是多阶段的,region proposal+fine-tune CNN+训练svm+fit Bounding box regression。特征还是需要写入硬盘。
2.fine-tune过程中只调整了全连接层,对spatial pyramid pooling之前的层没有更新。这个限制了网络的准确性。
FAST R-CNN[2]
针对R-CNN和SPPnets的缺点,FAST R-CNN 被提出来。FAST R-CNN 有以下几个优点:
1.比R-CNN和SPPnets有更高的检测准确率(mAP)。
2.使用多任务损失,训练是单阶段的。
3.训练时可以更新所有的层。
4.不需要硬盘存储提取的特征。
从上图可以看出,FAST R-CNN的整个结构和R-CNN类似,改变的地方有在卷积层后有一个ROI pooling layer 这个层的左右是把大小不同的region proposal 的特征下采样的同样的大小。最后输出采用的多任务的输出,将分类和BBOX 回归整合到一块进行。用softmax代替SVM分类器。测试时,最后输出后要经过非极大值抑制和R-CNN一样。注意:region proposal步骤还是要提前单独进行的。
The RoI pooling layer:
所有的ROI都要下采样到固定的大小H*W。若某个ROI长宽为h,w。那么要把ROI均匀分成H*W个方格,每个方格进行max pooling。是一种特殊的SPPnets,只有一层。
fine-tune:
把最后一个pooling层改为POI层,最后一个全连接层和softmax层被两个姐妹层代替(全连接层和一个K+1类的softmax,和类别相关的BBox回归)。把输入改为一幅图像和一系列的region proposals。
为了能够高效的fine-tune全部层的权重,采取了新的策略。每个mini-batch采样N幅图,每幅图采样R/N个ROIs。因为每幅图里的POIs可以共享计算,这样就提高了训练速度。
Multi task loss:
Each training RoI is labeled with a ground-truth class u and a ground-truth bounding-box regression target v.
Truncated SVD for faster detection
因为每幅图有大量的ROIs,每个ROI都要经过全连接层,所以全连接层的时间占了一半左右。可以通过Truncated SVD压缩。
全连接层的权重矩阵W可以被如下分解:
因为t<<min(u,v),所以参数大大减少。一个全连接层可以被分解为两个全连接层。The first of these layers uses the weight matrix ΣtVT (and no biases) and the second uses U(with the original biases associated with W).
参考论文:
1.Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
2.faster R-cnn (ICCV 2015)