Depth study of the road (four): Fast-RCNN

The foregoing has been told RCNN SPP-Net as well as two classic entry-level algorithm, came down to us is RCNN family, another outstanding representatives --Fast-RCNN. region proposal

Fast-RCNN name suggests, is fast RCNN, its purpose is to solve RCNN training slow, slow detection problem.

A paper reading

Fast-RCNN thesis was that "Fast RCNN", whose author is God rbg large, simple paper, strong purpose thief. (Baidu cloud link: https://pan.baidu.com/s/1fQlWVSY19kphn8X9zOyGEA , extraction code: aglm).

Fast-RCNN classification is based on the effective target in the convolution neural network used before the results. Employing a number of techniques, thereby increasing the speed of training and testing haste to improve detection accuracy. Fast-RCNN during training VGG-16 9 times faster than RCNN, 213 times faster detection, and also achieved a high detection accuracy (data set on the PASCAL VOC).

Chapter 1 Introduction paper introduces the current development of image classification and detection algorithms has made great achievements, But, target detection due to its complexity detect not only slow, but also poor detection accuracy. Then the paper on the right it shows the complexity of two causes: one is a must handle a large number of candidate regions, and the second is a candidate frame positioning is not accurate, it is necessary to achieve fine positioning. To solve these problems will inevitably result in slow detection speed, detection accuracy is poor. Then, the paper put its own Fast-RCNN raised.

Next essay giving a more detailed analysis of the advantages and disadvantages R-CNN and SPP-Net, where the important point is that the training process of these two models is a multi-stage pipeline: involving feature extraction, using the log loss function to fine-tune the network, training SVM classifier using regression fitting detection frame.

Finally, rbg Great God first chapter of confidence pointed out several advantages of Fast-RCNN:

Than R-CNN SPP-Net and the target having a higher detection accuracy (mAP);

Training is a single-phase training in the use of multi-tasking loss;

Training can update all network layer parameters;

Storage feature is not required disk space.

Next, figure (or the R-CNN goes riding FIG classic!)

 

输入图像和多个RoI被输入到卷积网络中。每一个RoI被池化到固定大小的特征图中,然后通过全连接层映射到特征向量(这里的映射是重点,需要注意一下映射)。等到以上操作完成后,接下来就要输出了,这里会有两个输出向量:Softmax概率和每一类检测框的回归偏移量。

Fast R-CNN网络将整个图像和一组候选框作为输入。网络首先使用几个卷积层(conv)和最大池化层来处理整个图像,以产生卷积特征图。然后,对于每个候选框,RoI池化层从特征图中提取固定长度的特征向量。每个特征向量被送入一系列全连接(fc)层中,其最终分支成两个同级输出层 :一个输出个类别加上1个背景类别的Softmax概率估计,另一个为个类别的每一个类别输出四个实数值。每组4个值表示个类别的一个类别的检测框位置的修正。

相比较于R-CNN,Fast-RCNN最大的不同点在于RoI池化层和FC层中的目标分类与检测框回归的统一。(抛弃了SVM!)

首先要讲解的是ROl池化层,其涉及的灵感是来源于SPP-Net,但是在这里rbg大神做了一些简化,抛弃了多尺度池化,转而利用M*N的网格进行maxpooling(注意M不一定等于N,也就是不一定每个网格是方形的,这个改进对于后来的模型具有一定的启示作用。)

这这里需要声明的一点,在前期的准备中,Fast-RCNN还是采用了SS算法进行候选区域的选取。

然后是联合目标分类与候选框回归的FC层

在R-CNN中,首先提取region proposal,然后CNN提取特征,然后SVM分类,最后再BBox回归,不得不说比较繁琐。Fast-RCNN直接将分类和回归一并放入到了全连接层,形成一个multi-task模型。输出两层结构,其一是用来分类的cls_score层,即分类得分看看属于哪一类的分数最高。其二是BBox_predict层,用来进行候选框的微调(这个微调在后面还会提及)。

二. 训练

和R-CNN相似,首先获得预训练的模型(以VGG-16和ZF为例),然后再PASCAL VOC数据集上进行微调。

在调优训练时,每一个mini-batch中首先加入2张完整图片(即mini-batch=2,这是一个考验硬件的参数!),而后加入从2张图片中选取的128个候选框。这128个候选框可以复用2张图片前5个阶段的网络特征。(这里提及了复用的概念,很重要!)

在进行微调前,需要对有监督预训练后的模型进行3步转化:其一是RoI池化层取代预训练模型中卷积网络最后一层池化层(相当于连接了一个空间金字塔池化层);其二是两个并行层取代预训练模型中的最后一层全连接层和softmax层,并行层之一是新全连接层1加原softmax层1000个分类输出修改为21个分类输出(20+1,20类+1个背景,这个参数在做自己数据集训练时会经常用到),并行层之二是新全连接层2加候选区域窗口回归层;其三是预训练模型由原来单输入修改为双输入(图像的列表和这些图像中的RoI的列表)。

三. 其他的一些重要点

微调

卷积神经网络的参数训练,很大程度上是一种猜测,只有通过不断地调整才能猜的更准确。那么怎么才能更好的调整呢?当然是我随口说一个,然后你给我一个反馈,告诉我说的对不对,说的是大了还是小了,然后我再带着这个反馈进行下一轮猜测这才是一个正确并且高效的方法(二分法是不是也是这个思想?)。

卷积神经网络的参数调整同样也是这样的,这里有一个名词是“反向传播”。利用反向传播进行卷积神经网络的参数调整是重要的知识点!Fast-RCNN相较于SPP-Net的一个重要能力便是可以实现“反向传播训练”,那么为什么SPP-Net不能够实现反向传播训练呢?

原因很简单,当每一个训练样本(RoI)来自不同的图像时,通过空间金字塔池化层进行反向传播是非常低效的,低效的部分是因为每一个RoI可能具有非常大的感受野,通常跨越整个输入图像。

为了解决这个问题,实现微调。Fast-RCNN采用了以下办法。

首先是特征共享,在Fast RCNN网络训练中,随机梯度下降(SGD)的小批量是被分层采样的,首先采样N个图像,然后从每个图像采样R/N个 RoI。关键的是,来自同一图像的RoI在向前和向后传播中共享计算和内存。减小N,就减少了小批量的计算。(想要收敛的快,就加大N,加大了N就会吃内存!)。

其次是,在微调阶段联合优化Softmax分类器和检测框回归,而不是分别在三个独立的阶段训练softmax分类器、SVM和回归器。 

多任务损失

Fast-RCNN有两层输出,自然也就会有两个损失等待处理,因此需要计算多任务损失。分别是

 

多任务损失自然就是两者带权之和了。

前边巴拉巴拉讲了很多,基本上说明了Fast-RCNN的基本原理、模型的基本结构和训练的基本操作。Fast-RCNN具有极大的有点就是在训练和检测上都进行了极大的提速,并且保证了检测的质量。

其缺点还是有的,最大的缺点其还是采用SS算法进行候选区域的预选择,这就造成了其并不是一个完整的或者说是全部的卷积神经网络(虽然已经改造了99%了),这样带来的问题就是其检测速度还是不是很快,那么有没有一种方法可以将候选区域的选择也纳入到卷积神经网络之中呢?(当然有了,不然我也就不会说出来了!)

未完待续。。。

发布了4 篇原创文章 · 获赞 1 · 访问量 139

Guess you like

Origin blog.csdn.net/qq_33439794/article/details/104583147