Fast RCNN是在RCNN的基础上进行的改进,整体的算法思路是一样的,改进之处如以下几点:
- 引入ROI pooling层,第一避免resize特征图到224*224,由于ROI pooling是可导的,所以实现了端到端的学习;
- CNN网络提前做了预训练,初始化权重是进过ImageNet数据集的训练得到,大大提高网络效率;
- 采用了多任务损失函数,一个任务是用softmax进行分类,另一个任务是边界框回归;
- 利用截断的奇异值分解加速网络。
Fast RCNN的总体框架图:
便于理解,借鉴了一个其他人的图:
- 读入一张图像,有两个步骤要做,第一利用selective search提取候选框,另一步是输入到FCN网络中提取特征,得到特征图;
- 根据RCNN的原理,提取的候选框都对应一个ground truth的回归框和此框的类别,回归框用(x,y,h,w)表示,(x,y)表示左上角坐标,(h,w)表示框的长宽,坐标框都是在原图像的坐标系下,特征图是网络下采样后得到的,所以坐标框坐标也应该相应缩小对应倍数,如VGG16下采样4次,缩小16倍,对应候选框也缩小16倍;
- 候选框框起来的特征图部分输入到ROI pooling层中,得到固定大小的输出特征图,ROI pooling层中将候选框划分为2*2的网格,并进行max pooling操作,由于后选矿缩小时,不一定是得到整数,所以需要就近取整,可能导致划分网格不均匀,如下:
- 得到的特征图通过全连接层,利用softmax得到一个类别标签,同时回归得到一个边框坐标,利用robust L1损失函数计算回归损失。