目标检测2: faster rcnn对比fast rcnn,训练流程分析,边框损失函数loss分析

注:个人理解,错误难免,推荐看论文

1.结构:

faster-rcnn(https://arxiv.org/abs/1506.01497)和fast-rcnn(https://arxiv.org/abs/1504.08083)的结构类似,下面二者结合着分析。下图左边为fast rcnn右边为faster rcnn。

fast-rcnn的大致流程:

fast rcnn把一张图像用select search 算法得出2000个候选区域(region proposals)及其位置,然后把这张完整图像直接送入基础网络vgg16(https://arxiv.org/abs/1409.1556)得到特征图feature map(r-cnn是分别resize后再送入网络),由于网络结构是固定的,这些候选区域在特征图中的位置也能算出来,这些位置在论文中被称为ROI。ROI本质上是每个候选区域在特征图上对应的框,使用r, c, h, w表示,这4个参数分别为左上角的坐标及高和宽。有了ROI后,每个ROI的尺寸也不一样,不便于后续计算,因此之后对ROI所在的特征进行了max pooling,使ROI的大小变为固定的HxW(如7x7),这个过程称为ROI pooling layer(fast rcnn中把vgg16中的最后一个max pooling用ROI pooling layer取代了)。经过ROI pooling layer后尺寸都一致了,之后跟2个全连接层(这是vgg16中的2个fc层),这里的输出被称为ROI feature vector。之后送到softmax分类器(输出个数为num_classes+1(背景))和regression边框回归中。

faster-rcnn对fast-rcnn的改进:

faster对fast进行了改进,由于fast rcnn在一张原图上用select search找出2000个候选区域比较耗时,用cpu约耗时2s,为了解决这个问题作者自己设计了一个RPN网络(region proposal network, 10ms每张图像)代替select search。如果把RPN看作一个黑盒子,faster-rnn与fast-rcnn的结构相差不大,只是RPN代替了select search算法,而且select search的位置是在原图中进行的,RPN是在特征图上进行的。

2. 回归bounding box:

faster-rcnn的box回归是在rcnn(https://arxiv.org/abs/1311.2524)的基础上改动的,首先要讲一下rcnn中的回归框,下图为rcnn的box回归。

P为通过RPN(或者通过select search)得到的候选区域边框,是已知的。P的位置肯定与真实的groundtruth边框G有偏差,所以指定了一种学习方式dx(P),dy(P),dw(P),dh(P)进行调节,让预测的框G^更接近真实的框G。

如下图所示,dx(P),dy(P),dw(P),dh(P)中有待学习的参数,咱们暂且把它们分别看作一个整体。我们把包含待训练参数的这些项都移动到等式左边,可以得到下图右上的公式。其实dx(P),dy(P),dw(P),dh(P)内部是vgg16的特征图输出(用φ(P)表示)和一个矩阵w的乘积,这样它们可以用wxφ(P), wyφ(P),wwφ(P),whφ(P)表示了,如下图右侧中间的公式。公式(6)-公式(9)的tx, ty, tw, th是可以根据groundtruth和候选区域的位置直接算出来的。我们的目标是训练网络让网络的wxφ(P), wyφ(P),wwφ(P),whφ(P)与tx, ty, tw, th尽可能接近,所以现在我们就能写一个简单的loss了,如下图右下角的公式,再加上一项正则化项就和公式5一样了。这样rcnn的boundingbox回归loss就写出来了。

faster rcnn回归box的smooth L1 loss:

faster rcnn中boundingbox的训练使用smooth L1损失,其他和rcnn一样。

3. 整体的损失loss:

loss = loss(分类) + loss(回归)

分类loss可以使用交叉熵,回归loss即上面的2。有了总loss就能梯度下降,训练模型了。

下一篇:yolov3:https://blog.csdn.net/u010397980/article/details/85058630

猜你喜欢

转载自blog.csdn.net/u010397980/article/details/85055840