先前网络模型存在的问题
之前的SSPnet和Fast R-CNN已经实现在候选区域(region proposal)上进行目标检测的时间大幅缩短,但是如何在一张图片中快速提取候选区域的问题并没有解决,一直是该网络的一个瓶颈。例如:使用Selective Search方法在CPU上对一张图片提取候选区域需要2s。EdgeBoxes需要0.2s,但提取时间还是占据了整个网络运行的大部分时间。
本文提取的解决方案
针对上述存在的瓶颈,本文提出了Region Proposal Network(RPN),实现目标检测的实时性。使用RPN方法提取候选区域几乎不占据整个网络计算时间,每张图大约10ms。
网络整体结构
Faster-RCNN网络结构前向传播过程:以输入一张HxW彩色图片为例,其tensor为[1,3,H,W],经过backbone网络后(假设为VGG16)得到的featrue map为[1,512,H/16,W/16]。假设RPN网络,假设每个cell预测9个anchor box。
每个cell有9个anchor box
rpn_cls得到[1,18,H/16,W/16],一共产生9x(H/16)x(W/16)个anchor box,用于判断anchor box中有无含有目标,属于前景还是背景,并不细分具体类别。
rpn_reg得到[1,36,H/16,W/16],预测框的偏移量是[tx,ty,tw,yh],其中[x,y,w,h]是ground truth的真实值,[xa,ya,wa,ha]是anchor box的数据,预测框为[x,y,w,h]。目的是使预测框不断靠近真实框。
正负样本的定义:在训练时,对每个锚框采用二分类标签,即有无目标对象,但对目标对象的种类先不进行区分。将以下两种锚框定义为正样本:
(1)锚框中与真实框的交并比(IoU)值最高的那个锚框
(2)与任意一个真实框的交并比大于0.7的锚框
值得注意的是一个真实框可能有多个正样本的锚框。
负样本则是那些与所有真实框的交并比都小于0.3的锚框,那些既不是正样本又不是负样本的锚框将不用于训练。
ROI Pooling对(H/16)x(W/16)x9个anchor box根据nms方法,置信度等进行粗略筛选,得到N个proposal box。再将这N个proposal box映射到feature map的大小,得到[N,512,H,W],这N个的H和W可能各不相同,因为目标大小可能就不一样,所以通过ROI pooling,将其全部转化为[N,256,7,7]。
全连接层将[N,256,7,7]--reshape-->[N,12544]。经过两个全连接层得到[N,1024],再在不同分支预测类别概率和bbox_pred,COCO的类别数目为80,故分别得到[N,81]和[N,4x81]。因为前面的RPN的类别判断只是二分类的判别(判别是否含有目标),这里需要进行细分,到底属于哪种类别。bbox_pred也是对前面RPN粗略定位的一种提高。
损失函数的定义:基于上述正负样本的定义,文中参考Fast R-CNN的多任务损失函数,得到了下面这个损失函数:
损失函数
对于正样本,既要计算其分类损失,也要计算回归。而对于负样本,只需计算其分类损失即可。
结论
作者提出了RPN(Region proposal Network),能够高效、准确地生成候选区域。通过与检测任务共享卷积特征,使得提取候选区域几乎0代价,在深度学习的目标检测系统上可以达到5-17 fps,真正实现了及时性。
参考博客:https://www.cnblogs.com/wangyong/p/8513563.html
网友评论