本文转载自:AI深度视线
AC-FPN——用于目标检测的注意力引导上下文的特征金字塔网络 ,即插即用的新FPN模 块,替换Cascade R-CNN、Mask R-CNN等网络中的FPN,可直接涨点2%-3%!
论文:https://arxiv.org/abs/2005.11475
代码:https://github.com/Caojunxu/AC-FPN
Authors:腾讯&华南理工大学
1
摘要
对于目标检测,如何解决高分辨率输入上的特征图分辨率与感受野之间的矛盾要求仍然是一个悬而未决的问题。
在本文中,为了解决此问题,我们建立了一种新颖的体系结构,称为注意力引导的上下文特征金字塔网络(AC-FPN),该体系结构通过集成注意力导向的多路径特征来利用来自各个大型感受野的判别信息。该模型包含两个模块
- 第一个是上下文提取模块(CEM),它从多个感受野中探索大量上下文信息。
- 第二个模块是注意力引导模块(AM),为了处理冗余的上下文关系可能导致的误定位和误识别。该模块可以通过使用注意力机制来自适应捕获对象的显著依赖性。AM由两个子模块组成,即上下文注意模块(CxAM)和内容注意模块(CnAM),它们分别专注于捕获区分性语义和定位精确位置。
最重要的是,我们的AC-FPN可以轻松插入现有的基于FPN的模型中。关于目标检测和实例分割的大量实验表明,带有我们提出的CEM和AM的现有模型大大超过了没有它们的同类模型,并且我们的模型成功获得了最新的结果。
2
本文方法
近年,分层检测如FPN和DetNet等网络获得了很大的进步。然而,对于较大的输入图像,这些模型必须堆叠更多的卷积层,以确保接收域的适宜性。否则,就会陷入特征图分辨率和感受野的两难境地。此外,由于不同大小的感受野之间缺乏有效的交互,使得模型生成的特征表示能力受到限制。
为了缓解这些限制,我们提出了一种新的注意引导的上下文特征金字塔网络(AC-FCN),它从不同大小的接受域捕获上下文信息,生成具有较强识别能力的客观特征。如下图所示,我们的模型建立在基本FPN架构的基础上,有两个新的组件:1)上下文抽取模块(CEM),它利用不同大小的接受域的丰富上下文信息;2)增强显著上下文相关性的注意力引导模块(AM)。我们将在下面的小节中描述模型的每个部分。整理流程图参下图所示:
2.1 上下文抽取模块(CEM)
首先,自底向上的通道采用和FPN相同的结构处理,在获得前几层(即F5)的特征图后,为了利用丰富的上下文信息,我们将其输入到我们的CEM中,CEM由不同比率= 3,6,12等多路径扩展卷积层组成。这些分离的卷积层可以在不同的感受野中获取多个特征图。此外,为了提高几何变换建模的能力,在每条路径中引入可变形卷积,它确保我们的CEM能够从给定的数据中学习转换不变特征。
并且,为了精细地合并多尺度的信息,我们在CEM中使用了密集连接,每个扩展层的输出与输入特征图连接,然后输入到下一个扩展层。DenseNet使用密集连接来解决梯度消失的问题,在CNN模型越来越深的情况下加强特征传播。相比之下,我们采用密集的方式来实现具有不同感受野的特征在尺度上的多样性。
最后,为了保持初始输入的粗粒度信息,我们将扩展层的输出与上采样的输入连接起来,并将最小值输入到1×1卷积层,以融合粗粒度和细粒度的特征。
具体细节参考下表:
2.2 注意力引导模块(AM)
虽然CEM可以接入较丰富的感受野信息,但不是所有的信息都会对目标检测精度有效果,反而冗余的信息可能错误的引导bbox proposals而降低精度。为了去除这种负面影响并进一步提升特征图的表达能力,提出注意力引导模块,能够捕获具有强语义和精确位置的强依赖关系。AM包括两个部分:
- 上下文注意力模型CxAM
为了主动捕获子区域之间的语义依赖,这里引入了一个基于自我注意机制的上下文注意模块CxAM。我们将上述由CEM产生并包含多尺度感受野信息的特征传给CxAM模块。在这些信息特征的基础上,CxAM适应地更加关注子区域之间的相关关系。因此,CxAM的输出特性将具有清晰的语义,并在周围的目标中包含上下文依赖关系。
- 内容注意力模型CnAM
由于CEM中可变形卷积的影响,给定图像的几何特性被破坏,导致位置偏移。为了解决这个问题,我们设计了一个新的注意模块,称为内容注意模块(CnAM),以保持每个目标的精确位置信息。如下图所示,与CxAM类似,我们使用卷积层来转换给定的特征映射。但是,我们没有使用特征图F来产生注意矩阵,而是使用特征图F5∈R(C”xHxW),这样可以捕捉到每个物体更精确的位置。
3
实验效果
3.1 CEM
- CEM效果:
- 可变卷积的影响:
- 稠密连接:
3.2 AM
- CxAM和CnAM效果:
- 注意力可视化:
3.3 其他实验
- 计算复杂度和效率的比较:
由下表X和XI可以看出,ACFPN较FPN增加的有限的计算复杂度,但精度确提升明显: 骨干网络为ResNet50 时,ACFPN完成一次迭代所需的时间为1.18s,虽然较FPN的0.92s多了0.26s的时延,但精度可以提升3.2个百分点。如果对精度要求较高的场景,可以采用本文的改进策略,并且ACFPN在ResNet-50骨干网络情况下,可以超过FPN在ResNet101骨干网络下的AP精度,且参数量要更低,时间也更快。
- CEM的path数量:
下表为CEM采用不同Rate对结果的影响和相应的时间对比,可以看出,并不是CEM的path数量越多越好,但是却可以看出对于大分辨率的输入图像,有必要提升一定Path数量,可以有效提升精度。
3.4 和其他方法比较
在现有骨干上换上我们的模块结果对比:轻轻松松涨2-3%个点!
上面一行是原始FPN,下面一行是加上本文改进的FPN:有效减少漏检情况,和提升分割效果。
4
代码实操
- 模型训练:
- 在Maxwell的GPU(例如M40)上,训练大概需要4.2小时
- 推断时间应该在80ms左右/图像(也是在M40上)
python tools/train_net.py
--cfg configs/getting_started/tutorial_1gpu_e2e_faster_rcnn_R-50-FPN.yaml
OUTPUT_DIR /tmp/detectron-output
- COCO数据测试:
在NVIDIA Tesla P100 GPU上,每幅图像的推理时间应该在130-140毫秒之间。
代码语言:javascript复制python tools/test_net.py
--cfg configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml
TEST.WEIGHTS https://s3-us-west-2.amazonaws.com/detectron/35861858/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml.02_32_51.SgT4y1cO/output/train/coco_2014_train:coco_2014_valminusminival/generalized_rcnn/model_final.pkl
NUM_GPUS 1
- mask-rcnn批量图像测试举例:
python tools/infer_simple.py
--cfg configs/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml
--output-dir /tmp/detectron-visualizations
--image-ext jpg
--wts https://s3-us-west-2.amazonaws.com/detectron/35861858/12_2017_baselines/e2e_mask_rcnn_R-101-FPN_2x.yaml.02_32_51.SgT4y1cO/output/train/coco_2014_train:coco_2014_valminusminival/generalized_rcnn/model_final.pkl
demo