• 论文题目:FeaturePyramidNetworksforObjectDetection
  • 论文链接:https://arxiv.org/abs/1612.03144

所要解决的问题

针对小目标检测网络,CV领域一般用的是特征金字塔。即将原图以不同的比例采样,然后得到不同分辨率的图像进行训练和测试,在多数情况下是有效的。但是特征金字塔的计算、内存和时间开销都非常大,导致在工程中应用是及其困难。FPN(即特征金字塔)提出了一个独特的特征金字塔网络来避免图像金字塔产生的超高计算量,同时可以较好的处理目标检测中的尺度变化问题,对于小目标检测具有很强的鲁棒性。

简介

下图表示FPN的整体结构:

图a  多尺度金字塔 这是一个特征图像金字塔,整个过程是先对原始图像构造图像金字塔,然后在图像金字塔的每一层提出不同的特征,然后进行相应的预测。这种方法的缺点是计算量大,需要大量的内存;优点是可以获得较好的检测精度。

图b  浅层的网络更关注于细节和位置信息,高层的网络更关注于语义信息,而高层的语义信息能够帮助我们准确的检测出目标,因此我们可以利用最后一个卷积层上的feature map来进行预测。

图c  同时利用低层特征和高层特征,分别在不同的层同时进行预测,这是因为我的一幅图像中可能具有多个不同大小的目标,区分不同的目标可能需要不同的特征,对于简单的目标我们仅仅需要浅层的特征就可以检测到它,对于复杂的目标我们就需要利用复杂的特征来检测它。整个过程就是首先在原始图像上面进行深度卷积,然后分别在不同的特征层上面进行预测。

图d(FPN网络) 首先我们在输入的图像上进行深度卷积,然后对Layer2上面的特征进行降维操作(即添加一层1x1的卷积层),对Layer4上面的特征就行上采样操作,使得它们具有相应的尺寸,然后对处理后的Layer2和处理后的Layer4执行加法操作(对应元素相加),将获得的结果输入到Layer5中去。其背后的思路是为了获得一个强语义信息,这样可以提高检测性能。其实看下面的代码就可以明白,把卷积之后的{Ck}层和上采样之后的{Pk}层进行相加,目的是把低层次高分辨率的信息和高层次强语义的信息结合起来,提高检测性能和小目标识别。

FPN结构

自底向上

这是神经网络的前向计算,就是由卷积和池化层组成的特征提取网络。在这个自底向上的结构中,一个stage对应特征金字塔的一个level。对于以ResNet为backbone的主干网络,选取conv2、conv3、conv4、conv5层的最后一个残差block层特征作为FPN的特征,记为{C2、C3、C4、C5},也即是FPN网络的4个级别。这几个特征层相对于原图的步长分别为4、8、16、32。

自上向下和侧向连接

自上向下是前向计算后将输出的特征图放大的过程,我们一般采用upsample(上采样)来实现。FPN的巧妙之处就在于从高层特征上采样不仅可以利用顶层的高语义、低分辨率信息(有助于分类),而且利用浅层的、低语义、高分辨率信息(有助于定位)。为了将上述两者相结合,论文提出了类似于残差结构的侧向连接。向连接将上一层经过上采样后和当前层分辨率一致的特征,通过相加的方法(如:pytorch的torch.cat或torch.add)进行融合。同时为了保持所有级别的特征层通道数都保持一致,这里使用1*1卷积来实现。

ResNet+FPN网络结构及代码实现

# Build the shared convolutional layers.
# Bottom-up Layers
# Returns a list of the last layers of each stage, 5 in total.
# 扔掉了C1
_, C2, C3, C4, C5 = resnet_graph(input_image, "resnet101", stage5=True)
# Top-down Layers
# TODO: add assert to varify feature map sizes match what's in config
P5 = KL.Conv2D(256, (1, 1), name='fpn_c5p5')(C5)
P4 = KL.Add(name="fpn_p4add")([KL.UpSampling2D(size=(2, 2), name="fpn_p5upsampled")(P5),KL.Conv2D(256, (1, 1), name='fpn_c4p4')(C4)])
P3 = KL.Add(name="fpn_p3add")([KL.UpSampling2D(size=(2, 2), name="fpn_p4upsampled")(P4),KL.Conv2D(256, (1, 1), name='fpn_c3p3')(C3)])
P2 = KL.Add(name="fpn_p2add")([KL.UpSampling2D(size=(2, 2), name="fpn_p3upsampled")(P3),KL.Conv2D(256, (1, 1), name='fpn_c2p2')(C2)])
# 把每个{Pk}层都乘以一个3*3的卷积生成特征图.
P2 = KL.Conv2D(256, (3, 3), padding="SAME", name="fpn_p2")(P2)
P3 = KL.Conv2D(256, (3, 3), padding="SAME", name="fpn_p3")(P3)
P4 = KL.Conv2D(256, (3, 3), padding="SAME", name="fpn_p4")(P4)
P5 = KL.Conv2D(256, (3, 3), padding="SAME", name="fpn_p5")(P5)
# P6 is used for the 5th anchor scale in RPN. Generated by
# subsampling from P5 with stride of 2.
P6 = KL.MaxPooling2D(pool_size=(1, 1), strides=2, name="fpn_p6")(P5)
# Note that P6 is used in RPN, but not in the classifier heads.
rpn_feature_maps = [P2, P3, P4, P5, P6]
mrcnn_feature_maps = [P2, P3, P4, P5]

实验

FPN对Fast RCNN的影响

使用和实验1相同的规则对Fast RCNN做了实验,结果如下表所示。

FPN对Segment Proposal的影响

结论

本文提出了一种简单、有效的建立特征金字塔的方式。它的使用对RPN方法和Fast/Faster RCNN方法都有极大的性能提升。另外,它的训练和测试时间和普通的Faster RCNN方法相差很小。因此,它可以作为图像特征金字塔的一种较好的替代。

论文开源代码

https://github.com/unsky/FPN

目标检测算法之FPN(附FPN代码实现)相关推荐

  1. 【目标检测算法-锚框公式推导及代码详解】

    目标检测算法-锚框公式推导及代码详解 0 沐神对锚框的宽高计算并未推导以及讲解 1 锚框宽高公式推导 1.1 基础概念 1.2 锚框宽高公式推导 1.3 图片验证计算 1.4 小结 2 代码详解 2. ...

  2. a*算法matlab代码_NSGAII多目标优化算法讲解(附MATLAB代码)

    小编今天为大家讲解NSGA-II多目标优化算法,提到多目标优化,大家可能第一个就想到NSGA-II算法,今天小编就带领大家解开NSGA-II的神秘面纱. NSGA-II全称是快速非支配排序遗传算法,这 ...

  3. 2018目标检测最新算法+经典目标检测算法

    干货 CVPR2018的目标检测总结(论文+开源代码)https://blog.csdn.net/wfei101/article/details/80861681 目标检测算法集合(论文+开源代码)h ...

  4. 首个实时单目3D目标检测算法:RTM3D,代码将开源

    o 点击我爱计算机视觉标星,更快获取CVML新技术 基于单目图像的3D目标检测是在输入RGB图像的情况下估计目标的3D包围框,在自动驾驶领域非常有用. 今天来自中科院沈阳自动化所等单位的学者公布论文提 ...

  5. 目标检测算法之常见评价指标的详细计算方法及代码解析

    前言 之前简单介绍过目标检测算法的一些评价标准,地址为目标检测算法之评价标准和常见数据集盘点.然而这篇文章仅仅只是从概念性的角度来阐述了常见的评价标准如Acc,Precision,Recall,AP等 ...

  6. 基于深度学习的目标检测算法综述(一)

    基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述(二) 基于深度学习的目标检测算法综述(三) 本文内容原创,作者:美图云视觉技术部 检测团队,转载请注明出处 目标检测(Object ...

  7. CVPR2018 目标检测算法总览(最新的目标检测论文)

    CVPR2018上关于目标检测(object detection)的论文比去年要多很多,而且大部分都有亮点.从其中挑了几篇非常有意思的文章,特来分享,每篇文章都有详细的博客笔记,可以点击链接阅读. 1 ...

  8. 基于深度学习的目标检测算法综述(二)

    转自:https://zhuanlan.zhihu.com/p/40020809 基于深度学习的目标检测算法综述(一) 基于深度学习的目标检测算法综述(二) 基于深度学习的目标检测算法综述(三) 本文 ...

  9. 目标检测算法实现(八)——YOLOV5学习笔记

    非常感谢江大白大佬的研究与分享 附链接 深入浅出Yolo系列之Yolov5核心基础知识完整讲解 目录 1.网络结构图+v5性能对比 2.v5的改进和优势 2.1 输入端 2.1.1 Mosaic数据增 ...

  10. Grid R-CNN解读:商汤最新目标检测算法,定位精度超越Faster R-CNN

    作者 | 周强 来源 | 我爱计算机视觉 Grid R-CNN是商汤科技最新发表于arXiv的一篇目标检测的论文,对Faster R-CNN架构的目标坐标回归部分进行了替换,取得了更加精确的定位精度, ...

最新文章

  1. 对于图像分类任务,相对于全连接的DNN,CNN模型的主要优点有哪些?
  2. Java文档阅读笔记-JDBC Driver
  3. 协程-greenlet版(python 版)
  4. 实战分享:activemq 在灾备双活建设中的研究
  5. AutoCAD.net: 用于ObjectARX 开发的Visual Studio 智能感知文件
  6. 2022.7台式机装机指南(3060 + 12490F)
  7. vmware esxi6.5安装使用教程(图文安装)
  8. 简单的有监督学习实例——简单线性回归
  9. 带妹入坑,她该怎样提高自己的编程能力?
  10. Linux Signal信号详解
  11. 杭州西湖.湖中音乐喷泉[录象]
  12. 机器学习:《统计学习方法》笔记(一)—— 隐马尔可夫模型
  13. 【算法】震惊!!!史上最详细的卡特兰数浅谈!!!
  14. 暗影格斗3一直显示服务器,暗影格斗3重置的方法操作流程
  15. Hetian lab Day 10:工欲善其事必先利其器
  16. 荔枝架构实践与演进历程
  17. 如何在页面完美显示版权符号(转)
  18. 「GoTeam 招聘时间」星图比特 后端开发工程师(上海)
  19. C语言调用函数一次就自动结束了 不执行下面的程序 帮忙看看把
  20. 论文参考文献格式Chinese Std GBT7714

热门文章

  1. Codeforces | CF1029F 【Multicolored Markers】
  2. POJ1958 Strange Towers of Hanoi [递推]
  3. jQuery easing 使用方法
  4. Windows下安装node
  5. 仿淘宝分页按钮效果简单美观易使用的JS分页控件
  6. STL map 内存改变,迭代器失效,_Isnil(_Ptr)和红黑树
  7. CCF202009-1 称检测点查询
  8. 专栏推荐丨Oracle Database 21c 专栏
  9. 【ACDU】国产数据库有奖征文活动开始啦!发原创奖京东卡,最高可领1000元!...
  10. 揭密 GaussDB T 主备物理复制搭建过程(全)