前面我们一起学了
SPP-Net
和R-CNN
的相关知识,如下:
目标检测算法SPP-Net详解
目标检测R-CNN通俗详解
由于每期都是逐步改进,重复的不在赘述,所以建议先阅读前面的,这期我们继续改进,学习一下Fast-RCNN
都做了哪些改进?
上期,我们知道SPP-Net
主要对R-CNN
做了两点改进:
特征映射,只需要做一次卷积池化操作。
金字塔池化层,可以适应任意尺寸的输入。
但是由于SPP-Net
仍采用SVM
训练分类器和边框回归的方式,无法实现端到端的操作。那么Fast RCNN
借鉴了SPP-Net
算法的思想,改进了这3
点:
利用softmax
代替了svm
进行分类器训练
利用神经网络代替了边框回归
简化了SPP-Net
的金字塔池化层
我们先来直接看看Fast RCNN
的总体框架。
Fast RCNN
借鉴了SPP-Net
的思想,保留了SPP-Net
的特征映射和简化了金字塔池化层,如下图:
我们一起看一下Fast RCNN
的流程:
对输入图像利用SS
算法进行候选框选取,记录下来候选框的位置。
将原始输入图像输入到卷积网络进行特征提取,得到特征图。
利用SPP-Net
中学的特征映射的方法将候选框的位置映射到特征图相应位置,并提取特征。
将提取的特征经过ROI Pooling
层来固定特征数量。
将经过ROI Pooling
的的特征输入到共享全连接层。
最后将共享全连接层的输出分别经过各自的全连接层利用softmax
进行分类以及进行边框回 归。
从上面的步骤,我们可以看出,Fast RCNN
算法通过将softmax
分类器替换掉svm
,以及利用神经网络代替之前的边框回归,实现了目标检测端到端的操作。至于softmax
分类器和这里的边框回归,这里不再赘述,可公众号回复【深度学习】进行学习。
这里我们看一下ROI Pooling
是如何实现的。
我们知道前面学的SPP-Net
中关于金字塔池化的原理,是经过3
个级别的金字塔网格池化。这里Fast RCNN
将其简化为只用一个3x3
的网格,如下图:
这里将候选区域对应的特征图区域经过一个3x3
的网格进行最大值池化,每张候选框对应的特征图区域得到9
个特征,这样讲特征数量固定之后,就可送到全连接层进行分类和回归训练。
总的来说,Fast RCNN
最大的改进就是将svm
分类器和边框回归都集成到了一起,实现了端到端操作。那么Fast RCNN
的性能怎么样呢?
这里,通过对比前面我们学过的R-CNN
和SPP-Net
来看下Fast RCNN
的性能如何,如下表:
上表中的S
,M
,L
分别表示网络的大小,以大的网络为例,可以看到R-CNN
的training
时间为84
小时,SPP-Net
为25
小时,而Fast RCNN
训练时间为9.5
小时,总体速度与R-CNN
相比提高了8.8
倍。
而测试阶段,在大网络情况下,R-CNN
单张图像测试用时为47.0
秒,SPP-Net
用时为2.3
秒,而Fast RCNN
用时为0.32
秒。测试速度在利用SVD
降维的情况下与R-CNN
相比更是提高了213
倍。而在mAP
指标上Fast RCNN
和R-CNN
相差不大。来看一下R-CNN
和Fast RCNN
在不同分类器上的性能比较,如下表:
从上表中可以看到R-CNN
和Fast RCNN
在SVM
分类器上,在小网络和中网络情况下R-CNN
稍好一些,在大网络情况下,则Fast RCNN
要高一些;而Fast RCNN
在SVM
和Softmax
之间发现三种网络下Softmax
都要比SVM
稍高一些。
总体来说,Fast RCNN
和R-CNN
相比在mAP
指标上相差不大,但是在检测速度和训练速度上都有了大幅度的提升。虽然速度提升了不少,但是还是无法达到实时检测的需求,那么要如何改进?我们下期一起学习Faster RCNN
.
好文章,我在看♥