读书笔记:Fast R-CNN:
其实我先读的faster rcnn,但是读起来很困难,感觉faster rcnn默认我知道了很多预备知识;因此我先来读一读fast rcnn
Abstract:
背景:region-based神经网络针对目标检测,在这个基础上进行了改进;
对比:fast-rcnn提出了创新,加快了training和testing的时间,同时还提升了精度。
最后吹捧一下自己的网络 fast rcnn厉害!
Introduction:
背景1:深度神经网络提升了分类/目标检测;但是与分类任务相比,目标检测更难,需要更多的步骤,而且训练模型(目标检测)是非常缓慢且复杂的。
背景2(目标检测):充满着复杂性,因为目标检测需要精确的目标类别和精确的位置信息,从而产生了两个挑战;
挑战1:众多的候选区域proposals必须被处理;挑战2:候选的proposals只有一个粗略的位置,需要重新定位一个更加精确的位置。为了解决这些困难和挑战,大多数的解决方法牺牲了速度和精确性;
我们的方法:我们简化了训练的过程,我们设置了单阶段训练算法,共同学习目标分类和重新定义空间位置信息;
背景3:R-CNN和SPPnet(spatial pyramid pooling networks)
这种region-based convolutional networks method(例如R-CNN)可以极大的提高目标检测的进度—通过深度卷积神经网络—不过也有着自己的缺点;
缺点1:训练是多阶段的RCNN先搞一个神经网络,通过一个logloss提出一个object proposals=candidate object detector ,之后将一个SVM作为object detector,最后一个阶段,bounding被用来回归。
缺点2:训练占用了大量的时间/内存,再训练SVM和BBOX回归训练的,feature从each object proposal被提取出来之后被写到disk之中,十分的占用算力和时间
缺点3:object detection is slow
接下来我们接着谈slow RCNN,RCNN缓慢的原因之一是object proposal再神经网络之中正向传递,在这个过程中不需要也不会共享计算。Spatial pyramid pooling network被提出来来加速训练网络,通过共享算力。Sppnet method计算所有输入图像的卷积特征图,然后在共享的特征图提取特征向量,然后再通过特征向量从而进行分类。特征都从proposal中而提取,通过最大池化特征图中有着(proposal的部分)。Sppnet加速了testing的时间,同时也减少了训练时间。Sppnet也有着明显的缺点。缺点与RCNN相同训练也是多步骤,包括:特征提取,微调网络,训练分类SVM和regression ,并且还有着其他的限制:例如网络层数较为固定等。
本文贡献:
提出了新的算法,弥补了RCNN与Sppnet的缺点,还提升了他们的速度和精准度,我们叫他为fast-rcnn,可以快速的训练和测试;
优点:
- high mAP;
- 训练单阶段,用的mullti-task loss;
- 训练可以更新到所有的层;
- 提取特征不需要那么多空间;
Fast R-CNN的结构和训练
A FAST RCNN Network 将整个图像和object proposal(Region of interest)作为input,从而送进卷积神经网络。每一个ROI被池化为一个固定大小的特征图,然后通过一个Fully connected layers转化为一个特征向量,每一个ROI将会有两个output的vectors:softmax的概率和regression的概率。
Architecture
network的第一阶段处理整个图像通过一些卷积和池化产生一个卷积特征图,然后每一个object proposal产生一个ROI,ROI被池化为一个固定大小的特征图,通过一个FC转化为特征向量,最后的分支为两个:softmax/regressor,分别estimate“K”object的类别(class)另一个直接output K object的4个数值(x,y,w,h)
The ROI Pooling Layer
the roi pooling layer用了最大池化将一个(ROI)从特征图中池化为一个固定大小的特征图,ROI是一个矩型的特征图。Each ROI被定义为(r,c,h,w),通过ROI得到输出统一大小的特征区域,一边FC进行其他的操作等:
具体的方法可以参考这个链接:
添加链接描述
初始化预训练网络
我们在Imagenet之中进行预训练网络,在5-13个卷积层中有五个最大池化层,我们初始化预训练的Fast RCNN网络经历了三个改变:
- 最后一层的最大池化改为了ROI Pooling层为了得到统一区域的特征区域,便于FC一维化;
- 网络的全连接层和softmax被换成了softmax 的概率和bbox regressionor
- 网络的输入进行了修改,网络有两个输入a list of image a list of ROI
对detection进行微调/改进
通过反向传播训练得到权重是Fast RCNN的一项重要的能力,在这之前我们先解释一下为什么SPPnet不能更新权重。
主要原因是SPPnet在训练不同图像时反向传播的效率比较低,但这样正是Sppent和RCNN这样所训练的。这种低效率源于每一个ROI有一个较大的接收野——这是什么意思呢,我们的输入经常跨度整个图像;
我们提出了更有侠侣的方式(应用了特征共享的优势)在训练阶段。在Fast-Rcnn,我们使用了随机梯度下降SGD和mini batch进行分层采样,先采样N张图片,然后采样R/N的ROIS。还有一个是fast rcnn是一个阶段共同优化sofrmax classifier和bounding-box的regressor,而不是分三个阶段去分别训练softmax分类器、SVM和回归的regressor。接下来我们就介绍
-
loss
-
mini-batch sampling stratgy
-
反向传播 通过ROI pooling层
-
SGD
-
MULTI-TASK loss
fast-rcnn network 有两个相同级别的输出。第一个输出输出的是概率密度 p=(p1…pk)K+1个类别,和以往一样p通过softmax得到k+!中输出第二个输出的是bbox的回归(tx,ty,tw,th)训练ROI labeled使用groundtruth class u 和groundtruth target。咱们一步到位,每一个ROI的classification和regression我们使用multi-task loss
这个地方公式不太好输入,我们直接截取原文
- mini batch 小批量sampling
每一个SGD的mini batch设定为N=2 images,我们使用的mini-batch的size是 R=128, R/N=64。采样64个ROI从object proposal。同时IOU与groundtruth有交集的部分至少是0.5的ROI及以上。这样的ROI组成了我们images的前景和背景。同时我们还将图片进行了反转,进行了数据增强。 - Back-propogation 通过ROI pooling layers
反向传播通过导数运算通过ROI pooling layers。大概的情况是xi—activation——ROI pooling layers—yi
- SGD hyper-parameters
超参数的设定
Fast RCNN:
一旦Fast RCNN被修改了之后,detection可被视为一个前向传递。
each ROI output 概率P和 bounding box r。
截断的SVD为了faster detection
对于整个检测来说,用在完全连接层上的时间比用在卷积层上的时间多得多。
所以说,全连接层进行压缩可以有效的加速detection,截断SVD也减少了参数的数量;
Main result
两个主要的追求:
精度
速度