向AI转型的程序员都关注了这个号👇👇👇html
机器学习AI算法工程 公众号:datayxpython
FPN:feature pyramid networks for object detection
对用卷积神经网络进行目标检测方法的一种改进,经过提取多尺度的特征信息进行融合,进而提升目标检测的精度,特别是在小物体检测上的精度。FPN是ResNet或DenseNet等通用特征提取网络的附加组件,能够和经典网络组合提高原网络效果。程序员
1、问题背景
网络的深度(对应到感觉野)与总stride一般是一对矛盾的东西,经常使用的网络结构对应的总stride通常会比较大(如32),而图像中的小物体甚至会小于stride的大小,形成的结果就是小物体的检测性能急剧降低。web
传统解决这个问题的思路包括:面试
(1)多尺度训练和测试,又称图像金字塔,以下图(a)所示。目前几乎全部在ImageNet和COCO检测任务上取得好成绩的方法都使用了图像金字塔方法。然而这样的方法因为很高的时间及计算量消耗,难以在实际中应用。算法
(2)特征分层,即每层分别预测对应的scale分辨率的检测结果。以下图(c)所示。SSD检测框架采用了相似的思想。这样的方法问题在于直接强行让不一样层学习一样的语义信息。而对于卷积神经网络而言,不一样深度对应着不一样层次的语义特征,浅层网络分辨率高,学的更可能是细节特征,深层网络分辨率低,学的更可能是语义特征。flask
于是,目前多尺度的物体检测主要面临的挑战为:微信
1. 如何学习具备强语义信息的多尺度特征表示?网络
2. 如何设计通用的特征表示来解决物体检测中的多个子问题?如object proposal, box localization, instance segmentation.app
3. 如何高效计算多尺度的特征表示?
2、特征金字塔网络(Feature Pyramid Networks)
做者提出了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一一对应。金字塔结构中全部层级共享分类层(回归层)。
3、fast rcnn中的特征金字塔
4、其余问题
Q1:不一样深度的feature map为何能够通过upsample后直接相加?
答:做者解释说这个缘由在于咱们作了end-to-end的training,由于不一样层的参数不是固定的,不一样层同时给监督作end-to-end training,因此相加训练出来的东西可以更有效地融合浅层和深层的信息。
Q2:为何FPN相比去掉深层特征upsample(bottom-up pyramid)对于小物体检测提高明显?(RPN步骤AR从30.5到44.9,Fast RCNN步骤AP从24.9到33.9)
答:做者在poster里给出了这个问题的答案
对于小物体,一方面咱们须要高分辨率的feature map更多关注小区域信息,另外一方面,如图中的挎包同样,须要更全局的信息更准确判断挎包的存在及位置。
Q3:若是不考虑时间状况下,image pyramid是否可能会比feature pyramid的性能更高?
答:做者以为通过精细调整训练是可能的,可是image pyramid(金字塔)主要的问题在于时间和空间占用太大,而feature pyramid能够在几乎不增长额外计算量状况下解决多尺度检测问题。
5、代码层面看FPN
三、 FPN自上而下的网络结构代码怎么实现?
注意 P6是用在 RPN 目标区域提取网络里面的,而不是用在 FPN 网络;
另外这里 P2-P5最后又作了一次3*3的卷积,做用是消除上采样带来的混叠效应。
四、 如何肯定某个 ROI 使用哪一层特征图进行 ROIpooling ?
看代码:
224是ImageNet的标准输入,k0是基准值,设置为5,表明P5层的输出(原图大小就用P5层),w和h是ROI区域的长和宽,image_area是输入图片的长乘以宽,即输入图片的面积,假设ROI是112 * 112的大小,那么k = k0-1 = 5-1 = 4,意味着该ROI应该使用P4的特征层。k值会作取整处理,防止结果不是整数。
五、 上面获得的5个融合了不一样层级的特征图怎么使用?
能够看到,这里只使用2-5四个特征图:
对每一个 box,都提取其中每一层特征图上该box对应的特征,而后组成一个大的特征列表pooled。
六、 金字塔结构中全部层级共享分类层是怎么回事?
先看代码:
这里的PyramidROIAlign获得的 x就是上面一步获得的从每一个层的特征图上提取出来的特征列表,这里对这个特征列表先接两个1024通道数的卷积层,再分别送入分类层和回归层获得最终的结果。
也就是说,每一个 ROI 都在P2-P5中的某一层获得了一个特征,而后送入同一个分类和回归网络获得最终结果。
FPN中每一层的heads 参数都是共享的,做者认为共享参数的效果也不错就说明FPN中全部层的语义都类似。
七、 它的思想是什么?
把高层的特征传下来,补充低层的语义,这样就能够得到高分辨率、强语义的特征,有利于小目标的检测。
八、 横向链接起什么做用?
若是不进行特征的融合(也就是说去掉全部的1x1侧链接),虽然理论上分辨率没变,语义也加强了,可是AR降低了10%左右!做者认为这些特征上下采样太屡次了,致使它们不适于定位。Bottom-up的特征包含了更精确的位置信息。
原文连接 https://www.cnblogs.com/hellcat/p/9741213.html
视频课程资源,由浅入深讲解,通俗易懂。
须要优惠券联系小编微信:hai299014

阅读过本文的人还看了如下文章:
《深度学习入门:基于Python的理论与实现》高清中文PDF+源码
2019最新《PyTorch天然语言处理》英、中文版PDF+源码
《21个项目玩转深度学习:基于TensorFlow的实践详解》完整版PDF+附书代码
PyTorch深度学习快速实战入门《pytorch-handbook》
【下载】豆瓣评分8.1,《机器学习实战:基于Scikit-Learn和TensorFlow》
李沐大神开源《动手学深度学习》,加州伯克利深度学习(2019春)教材
【Keras】完整实现‘交通标志’分类、‘票据’分类两个项目,让你掌握深度学习图像分类
如何利用全新的决策树集成级联结构gcForest作特征工程并打分?
Machine Learning Yearning 中文翻译稿
斯坦福CS230官方指南:CNN、RNN及使用技巧速查(打印收藏)
中科院Kaggle全球文本匹配竞赛华人第1名团队-深度学习与特征工程
不断更新资源
深度学习、机器学习、数据分析、python
搜索公众号添加: datayx
机器学习算法资源社群
不断上传电子版PDF资料
技术问题求解
QQ群号: 333972581
长按图片,识别二维码
本文分享自微信公众号 - 机器学习AI算法工程(datayx)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。