FPN特征金字塔网络--论文解读
2018-01-14 11:19
573 查看
这篇文章我认为算是对用卷积神经网络进行目标检测方法的一种改进,通过提取多尺度的特征信息进行融合,进而提高目标检测的精度,特别是在小物体检测上的精度。
文章的思想比较简单,主要是利用特征金字塔对不同层次的特征进行尺度变化后,再进行信息融合,从而可以提取到比较低层的信息,也就是相对顶层特征来说更加详细的信息。顶层特征在不断地卷积池化过程中可能忽略了小物体的一些信息,特征金字塔通过不同层次的特征融合,使得小物体的信息也能够比较完整地反映出来。这个方法可以广泛地应用在针对小目标物体的检测上。下面我对这篇文章的内容进行一个详细的介绍。
一 背景介绍
我们知道,R-CNN系列是在得到的最后一层特征图上进行特征提取,从而进行目标识别的。但是这样做存在的弊端在于,顶层特征中忽略了小物体的一些信息,因此只根据顶层特征进行目标识别,不能完整地反映小目标物体的信息。如果可以结合多层级的特征,就可以大大提高多尺度检测的准确性。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/04/7bede5f89661ea59c985719851b7d135)
传统的提取多层级特征的方法是应用图片金字塔。图像金字塔是一种以多分辨率来解释图像的有效但概念简单的结构。如下图所示,通过改变图像的尺度,将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/04/e87f8c75bdda2abc079407683dfceca7)
利用卷积神经网络在图片金字塔上进行特征提取,可以构建出特征金字塔。下图展示出了这个过程,左侧是图像金字塔,右侧是在图像金字塔上进行特征提取得到的特征金字塔。在得到特征金字塔后,下一步就是在特征金字塔上进行目标识别。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/04/76c21028173c46f74003161d89f63633)
但是这样处理存在的问题是运算耗时过大,需要的计算能力较高,因此,Fast/Faster R-CNN 都没有使用图像金字塔的方式。不过,图像金字塔并非构建特征金字塔的唯一方式。CNN计算的时候本身就存在多级特征图,且不同层的特征图尺度就不同,形似金字塔结构。如果可以利用这个金字塔结构进行目标检测,不仅没有增加额外的计算工作,也可以利用到低层特征。SSD(Single Shot Detector)就采用了这种方法。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/04/90cdfd7378b0c24ccaa9356df8688fc3)
上图展示了这个流程,从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。但作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。
二 FPN算法
因此,作者提出了FPN算法。做法很简单,如下图所示。把低分辨率、高语义信息的高层特征和高分辨率、低语义信息的低层特征进行自上而下的侧边连接,使得所有尺度下的特征都有丰富的语义信息。
![](https://img-blog.<br/>9b7e<br/>csdn.net/20180114104632934?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvd2VpeGluXzQwNjgzOTYw/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast)
作者的算法结构可以分为三个部分:自下而上的卷积神经网络(上图左),自上而下过程(上图右)和特征与特征之间的侧边连接。
自下而上的部分其实就是卷积神经网络的前向过程。在前向过程中,特征图的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变特征图大小的层归为一个阶段,因此每次抽取的特征都是每个阶段的最后一个层的输出,这样就能构成特征金字塔。具体来说,对于ResNets,作者使用了每个阶段的最后一个残差结构的特征激活输出。将这些残差模块输出表示为{C2, C3, C4, C5},对应于conv2,conv3,conv4和conv5的输出。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/04/012bb3272ee03a9607cae9472d3cb226)
自上而下的过程采用上采样进行。上采样几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素,从而扩大原图像的大小。通过对特征图进行上采样,使得上采样后的特征图具有和下一层的特征图相同的大小。
侧边之间的横向连接的过程在下图中展示。根本上来说,是将上采样的结果和自下而上生成的特征图进行融合。我们将卷积神经网络中生成的对应层的特征图进行1×1的卷积操作,将之与经过上采样的特征图融合,得到一个新的特征图,这个特征图融合了不同层的特征,具有更丰富的信息。 这里1×1的卷积操作目的是改变channels,要求和后一层的channels相同。在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应,如此就得到了一个新的特征图。这样一层一层地迭代下去,就可以得到多个新的特征图。假设生成的特征图结果是P2,P3,P4,P5,它们和原来自底向上的卷积结果C2,C3,C4,C5一一对应。金字塔结构中所有层级共享分类层(回归层)。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/04/eb3ef20b148a95b02006051a92f21b45)
三 实验
-----------------------------------------------实验一 RPN网络中的特征金字塔-----------------------------------------------
思想:RPN是Faster R-CNN中用于区域选择的子网络。RPN在特征图上应用9种不同尺度的anchor,然后进行二进制分类和边界框回归。考虑到我们已经有了一些包含不同语义信息的特征图,越是低层的特征图包含的信息就越复杂。因此作者认为没有必要在所有的特征图上都应用9种不同尺度的anchor,可以在低层特征图中应用尺度较小的anchor,在高层特征图中应用尺度较大的anchor。{P2, P3, P4, P5, P6}分别对应的anchor尺度为{32^2,62^2,128^2,256^2}。文章中依然采用了{1:2,
1:1, 2:1}三种比例。
实验:作者基于coco数据集,在RPN网络中构架了特征金字塔。(coco数据集上有更多的小物体, 以及更多的数据 (14万) 标注)在RPN中使用的特征提取网络是ResNets网络。为了证明RPN的效果,作者将以下三种网络进行了对比,分别是1 删除自上而下路径的网络 2 删除了横向连接的网络 3 采用生成的最后一层做预测, 作者以AR(召回率)作为评判标准,分别比较了在小物体/中型物体/大型物体上的召回率。实验结果如下图。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/04/ed056bd646993b04698df4f9ce30f9ab)
上图中的a/b/c部分将FPN目标识别结果和基于ResNets网络生成的特征图进行目标识别的结果进行了对比。相比于直接在ResNets网络生成的特征图上进行目标识别,在小物体的识别上,FPN直接将目标识别的召回率提高了13%,在大/中型物体上的召回率也提高了4%-5%。
图中的b/c/d分别展示了当删除自上而下路径的网络/删除横向连接的网络/只用生成的最后一层做预测等三种网络的召回率。这三种网络的效果都不如FPN网络,作者分析了其中的原因。
• 当删除了自上而下的路径,由于金字塔不同层次之间存在较大的语义差距,因此检测效果相对较差。
• 当删除了横向连接,由于这些特征都被上采样和下采样了好几次,因此相对来说性能不够精确。
•采用最后一层做预测:PRN网络是一个窗口大小固定的滑动窗口检测器,因此在金字塔的不同层滑动可以增加其对尺度变化的鲁棒性。
-------------------------------------------实验二 fast rcnn中的特征金字塔------------------------------------------------------
思想:Fast rcnn中的ROI Pooling层使用region proposal的结果和特征图作为输入。经过特征金字塔,我们得到了许多特征图,作者认为,不同层次的特征图上包含的物体大小也不同,因此,不同尺度的ROI,使用不同特征层作为ROI pooling层的输入。大尺度ROI就用后面一些的金字塔层,比如P5;小尺度ROI就用前面一点的特征层,比如P4。但是如何确定不同的roi对应的不同特征层呢?作者提出了一种方法。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/04/e02f4117ce5c75a66863d34ca16f08e7)
224是ImageNet的标准输入,k0是基准值,设置为5,代表P5层的输出(原图大小就用P5层),w和h是ROI区域的长和宽,假设ROI是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味着该ROI应该使用P4的特征层。k值做取整处理。这意味着如果RoI的尺度变小(比如224的1/2),那么它应该被映射到一个精细的分辨率水平。
实验:作者基于coco数据集,采用ResNet-50 网络在fast rcnn中构建了特征网络金字塔。评价标准和进行对比的网络与上个实验一致。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/04/ce7fe6146d450de6d39733829bebda76)
图中表明,FPN网络具有最好的召回率。最后一行是只采用最后一层特征进行预测得到的召回率,与FPN网络不相上下,作者在这里表明,不能认为只采用最后一层特征图就一定得到较差的结果。
下表Table4是和近几年在COCO比赛上排名靠前的算法的对比。注意到本文算法在小物体检测上的提升是比较明显的。
![](https://oscdn.geek-share.com/Uploads/Images/Content/202012/04/9090755311807af8cbc36b39fd037cc4)
另外作者强调这些实验并没有采用其他的提升方法(比如增加数据集,迭代回归,hard negative mining),因此能达到这样的结果实属不易。
在阅读这篇论文的时候,得知何恺明大神的论文Mask R-CNN 获得ICCV最佳论文,粗略阅读发现其中也应用了FPN网络,感兴趣的可以去阅读一下。
文章的思想比较简单,主要是利用特征金字塔对不同层次的特征进行尺度变化后,再进行信息融合,从而可以提取到比较低层的信息,也就是相对顶层特征来说更加详细的信息。顶层特征在不断地卷积池化过程中可能忽略了小物体的一些信息,特征金字塔通过不同层次的特征融合,使得小物体的信息也能够比较完整地反映出来。这个方法可以广泛地应用在针对小目标物体的检测上。下面我对这篇文章的内容进行一个详细的介绍。
一 背景介绍
我们知道,R-CNN系列是在得到的最后一层特征图上进行特征提取,从而进行目标识别的。但是这样做存在的弊端在于,顶层特征中忽略了小物体的一些信息,因此只根据顶层特征进行目标识别,不能完整地反映小目标物体的信息。如果可以结合多层级的特征,就可以大大提高多尺度检测的准确性。
传统的提取多层级特征的方法是应用图片金字塔。图像金字塔是一种以多分辨率来解释图像的有效但概念简单的结构。如下图所示,通过改变图像的尺度,将一层一层的图像比喻成金字塔,层级越高,则图像越小,分辨率越低。
利用卷积神经网络在图片金字塔上进行特征提取,可以构建出特征金字塔。下图展示出了这个过程,左侧是图像金字塔,右侧是在图像金字塔上进行特征提取得到的特征金字塔。在得到特征金字塔后,下一步就是在特征金字塔上进行目标识别。
但是这样处理存在的问题是运算耗时过大,需要的计算能力较高,因此,Fast/Faster R-CNN 都没有使用图像金字塔的方式。不过,图像金字塔并非构建特征金字塔的唯一方式。CNN计算的时候本身就存在多级特征图,且不同层的特征图尺度就不同,形似金字塔结构。如果可以利用这个金字塔结构进行目标检测,不仅没有增加额外的计算工作,也可以利用到低层特征。SSD(Single Shot Detector)就采用了这种方法。
上图展示了这个流程,从网络不同层抽取不同尺度的特征做预测,这种方式不会增加额外的计算量。但作者认为SSD算法中没有用到足够低层的特征(在SSD中,最低层的特征是VGG网络的conv4_3),而在作者看来足够低层的特征对于检测小物体是很有帮助的。
二 FPN算法
因此,作者提出了FPN算法。做法很简单,如下图所示。把低分辨率、高语义信息的高层特征和高分辨率、低语义信息的低层特征进行自上而下的侧边连接,使得所有尺度下的特征都有丰富的语义信息。
作者的算法结构可以分为三个部分:自下而上的卷积神经网络(上图左),自上而下过程(上图右)和特征与特征之间的侧边连接。
自下而上的部分其实就是卷积神经网络的前向过程。在前向过程中,特征图的大小在经过某些层后会改变,而在经过其他一些层的时候不会改变,作者将不改变特征图大小的层归为一个阶段,因此每次抽取的特征都是每个阶段的最后一个层的输出,这样就能构成特征金字塔。具体来说,对于ResNets,作者使用了每个阶段的最后一个残差结构的特征激活输出。将这些残差模块输出表示为{C2, C3, C4, C5},对应于conv2,conv3,conv4和conv5的输出。
自上而下的过程采用上采样进行。上采样几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素,从而扩大原图像的大小。通过对特征图进行上采样,使得上采样后的特征图具有和下一层的特征图相同的大小。
侧边之间的横向连接的过程在下图中展示。根本上来说,是将上采样的结果和自下而上生成的特征图进行融合。我们将卷积神经网络中生成的对应层的特征图进行1×1的卷积操作,将之与经过上采样的特征图融合,得到一个新的特征图,这个特征图融合了不同层的特征,具有更丰富的信息。 这里1×1的卷积操作目的是改变channels,要求和后一层的channels相同。在融合之后还会再采用3*3的卷积核对每个融合结果进行卷积,目的是消除上采样的混叠效应,如此就得到了一个新的特征图。这样一层一层地迭代下去,就可以得到多个新的特征图。假设生成的特征图结果是P2,P3,P4,P5,它们和原来自底向上的卷积结果C2,C3,C4,C5一一对应。金字塔结构中所有层级共享分类层(回归层)。
三 实验
-----------------------------------------------实验一 RPN网络中的特征金字塔-----------------------------------------------
思想:RPN是Faster R-CNN中用于区域选择的子网络。RPN在特征图上应用9种不同尺度的anchor,然后进行二进制分类和边界框回归。考虑到我们已经有了一些包含不同语义信息的特征图,越是低层的特征图包含的信息就越复杂。因此作者认为没有必要在所有的特征图上都应用9种不同尺度的anchor,可以在低层特征图中应用尺度较小的anchor,在高层特征图中应用尺度较大的anchor。{P2, P3, P4, P5, P6}分别对应的anchor尺度为{32^2,62^2,128^2,256^2}。文章中依然采用了{1:2,
1:1, 2:1}三种比例。
实验:作者基于coco数据集,在RPN网络中构架了特征金字塔。(coco数据集上有更多的小物体, 以及更多的数据 (14万) 标注)在RPN中使用的特征提取网络是ResNets网络。为了证明RPN的效果,作者将以下三种网络进行了对比,分别是1 删除自上而下路径的网络 2 删除了横向连接的网络 3 采用生成的最后一层做预测, 作者以AR(召回率)作为评判标准,分别比较了在小物体/中型物体/大型物体上的召回率。实验结果如下图。
上图中的a/b/c部分将FPN目标识别结果和基于ResNets网络生成的特征图进行目标识别的结果进行了对比。相比于直接在ResNets网络生成的特征图上进行目标识别,在小物体的识别上,FPN直接将目标识别的召回率提高了13%,在大/中型物体上的召回率也提高了4%-5%。
图中的b/c/d分别展示了当删除自上而下路径的网络/删除横向连接的网络/只用生成的最后一层做预测等三种网络的召回率。这三种网络的效果都不如FPN网络,作者分析了其中的原因。
• 当删除了自上而下的路径,由于金字塔不同层次之间存在较大的语义差距,因此检测效果相对较差。
• 当删除了横向连接,由于这些特征都被上采样和下采样了好几次,因此相对来说性能不够精确。
•采用最后一层做预测:PRN网络是一个窗口大小固定的滑动窗口检测器,因此在金字塔的不同层滑动可以增加其对尺度变化的鲁棒性。
-------------------------------------------实验二 fast rcnn中的特征金字塔------------------------------------------------------
思想:Fast rcnn中的ROI Pooling层使用region proposal的结果和特征图作为输入。经过特征金字塔,我们得到了许多特征图,作者认为,不同层次的特征图上包含的物体大小也不同,因此,不同尺度的ROI,使用不同特征层作为ROI pooling层的输入。大尺度ROI就用后面一些的金字塔层,比如P5;小尺度ROI就用前面一点的特征层,比如P4。但是如何确定不同的roi对应的不同特征层呢?作者提出了一种方法。
224是ImageNet的标准输入,k0是基准值,设置为5,代表P5层的输出(原图大小就用P5层),w和h是ROI区域的长和宽,假设ROI是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味着该ROI应该使用P4的特征层。k值做取整处理。这意味着如果RoI的尺度变小(比如224的1/2),那么它应该被映射到一个精细的分辨率水平。
实验:作者基于coco数据集,采用ResNet-50 网络在fast rcnn中构建了特征网络金字塔。评价标准和进行对比的网络与上个实验一致。
图中表明,FPN网络具有最好的召回率。最后一行是只采用最后一层特征进行预测得到的召回率,与FPN网络不相上下,作者在这里表明,不能认为只采用最后一层特征图就一定得到较差的结果。
下表Table4是和近几年在COCO比赛上排名靠前的算法的对比。注意到本文算法在小物体检测上的提升是比较明显的。
另外作者强调这些实验并没有采用其他的提升方法(比如增加数据集,迭代回归,hard negative mining),因此能达到这样的结果实属不易。
在阅读这篇论文的时候,得知何恺明大神的论文Mask R-CNN 获得ICCV最佳论文,粗略阅读发现其中也应用了FPN网络,感兴趣的可以去阅读一下。
相关文章推荐
- 干货 | 论文解读:GAN在网络特征学习中的应用
- 『计算机视觉』FPN特征金字塔网络
- CVPR 2017论文:基于网格的运动统计,用于快速、超鲁棒的特征匹配(附大神解读)
- 特征金字塔网络 FPN
- HOG特征原版论文解读
- 微软亚洲研究院论文解读:GAN在网络特征学习中的应用(PPT+视频)
- 论文阅读+SSP net+特征金字塔网络
- Object Detection -- 论文FPN(Feature Pyramid Networks for Object Detection)解读
- CVPR 2017 全部及部分论文解读集锦
- Deep Learning论文笔记之(七)深度网络高层特征可视化
- 阿里NIPS 2017论文解读:如何降低TensorFlow训练的显存消耗?
- 目标检测 Feature Pyramid Networks for Object Detection(FPN)论文笔记
- 计算机视觉-论文阅读笔记-基于高性能检测器与表观特征的多目标跟踪
- 【HEVC帧间预测论文】P1.1 基于运动特征的HEVC快速帧间预测算法
- 阿里妈妈首次公开新一代自研智能检索模型 | WWW 2018论文解读
- Deep Learning论文笔记之(一)K-means特征学习
- Boundary-sensitive Network for Portrait Segmentation论文解读
- Amazon Dynamo论文解读 — Dynamo数据划分算法
- 论文解读:基于机器学习的知道推荐—Enlister 推荐
- 高光谱遥感数据光谱特征的提取与应用---高光谱基础知识科普论文