Conformer(cnn+transformers)论文详解

从知乎转载:目标检测算法Conformer(卷积-注意力机制) - 咚咚的文章 - 知乎 https://zhuanlan.zhihu.com/p/397080280

目标检测算法Conformer(卷积-注意力机制)

本文主要对目标检测算法Conformer进行讲述,本文逻辑结构和论文保持一致。

论文:Conformer: Local Features Coupling Global Representations for Visual Recognition

代码: https://github.com/pengzhiliang/Conformer

摘要

  1. 在卷积神经网络 (CNN) 中,卷积操作擅长提取局部特征,但难以捕获全局表示
  2. 在本文中,我们提出了一种称为 Conformer 的混合网络结构,以利用卷积运算和自注意力机制来增强表示学习。 Conformer 源于特征耦合单元 (FCU),它以交互方式融合不同分辨率下的局部特征和全局表示。 Conformer 采用并发结构,最大限度保留局部特征和全局表征。
  3. 在 ImageNet 上的性能比transformer(DeiT-B)高 2.3%。 在 MSCOCO 上,它在对象检测和实例分割方面的性能分别比 ResNet-101 高 3.7% 和 3.6%

研究背景

  1. 卷积神经网络 (CNN)具有显着先进的计算机视觉任务,例如图像分类、对象检测和实例分割。 这在很大程度上归功于卷积操作,它以分层的方式收集局部特征作为强大的图像表示。 尽管在局部特征提取方面具有优势,但 CNN 难以捕捉全局表征,这通常对高级计算机视觉任务至关重要。 一个直观的解决方案是扩大感受野,但这可能需要更密集但具有破坏性的池化操作。
  2. 最近,transformer 架构 已被引入视觉任务。 ViT 方法 通过分割每个图像成带有位置嵌入的patch来构建一个tokens,并应用级联transformer块来提取参数化向量作为视觉表示。 由于自注意力机制和多层感知器(MLP)结构,transformer反映了复杂的空间变换和长距离特征依赖性,构成了全局表示。 不幸的是,观察到视觉transformer忽略了局部特征细节,这降低了背景和前景之间的可辨别性。 一些改进的视觉转换器提出了一个标记化模块或利用 CNN 特征图作为输入标记来捕获特征相邻信息。 然而,关于如何将局部特征和全局表示精确地相互嵌入的问题仍然存在

研究现状

  1. 在深度学习时代,CNN可以被视为具有不同接收场的局部特征的分层集成。 不幸的是,大多数 CNNs擅长提取局部特征,但难以捕捉全局线索。
  2. CNN: 为了缓解这种限制,一种解决方案是通过引入更深的架构和/或更多的池化操作来定义更大的感受野 。 空洞卷积方法 增加了采样步长,而可变形卷积 学习了采样位置。 SENet和 GENet 提出使用 global Avgpooling 来聚合全局上下文,然后用它来重新加权特征通道,而 CBAM 分别使用 global Maxpooling 和 global Avgpooling 在空间和通道维度上独立地细化特征。
    另一种解决方案是全局注意力机制 ,它在自然语言处理 中展示了捕获长距离依赖的巨大优势。 受非局部均值方法的启发,非局部操作 以自注意方式引入 CNN,以便每个位置的响应是所有(全局)位置的特征的加权和。 注意增强卷积网络将卷积特征图与自注意特征图连接起来,以增强卷积操作以捕获远程交互。 关系网络提出了一个对象注意模块,通过外观特征和几何形状之间的交互同时处理一组对象。
    尽管取得了进展,但将全局线索引入 CNN 的现有解决方案具有明显的缺点。 对于第一种解决方案,更大的感受野需要更密集的池化操作,这意味着较低的空间分辨率。对于第二种解决方案,如果卷积操作没有与注意力机制正确融合,局部特征细节可能会恶化。
  3. Transformer: 作为一项开创性工作,ViT验证了纯Transformer架构在计算机视觉任务中的可行性。 为了利用长距离依赖性,transformer 块充当独立的架构或被引入 CNN 以进行图像分类、目标检测 、语义分割 、图像增强和图像生成。 然而,Transformers 经常忽略局部特征细节。 为解决这个问题,DeiT提出使用蒸馏token将基于 CNN 的特征转移到视觉transformer,而 T2T-ViT 提出使用tokenization模块将图像递归重组为考虑相邻像素的标记。 DETR 方法将 CNN 提取的局部特征馈送到转换器编码器-解码器,以串行方式对特征之间的全局关系进行建模。
    不幸的是,观察到视觉transformer忽略了局部特征细节,这降低了背景和前景之间的可辨别性。 一些改进的视觉transformer 提出了一个tokenization模块或利用 CNN 特征图作为输入token来捕获特征相邻信息。 然而,关于如何将局部特征和全局表示精确地相互嵌入的问题仍然存在

研究内容

Overview

  1. 卷积特征和patch embedding两种风格特征互相融合。在Conformer中,我们连续将transformer分支的全局上下文馈送到卷积特征图,以加强CNN分支的全局感知能力。 类似地,来自 CNN 分支的局部特征逐渐反馈到patch embedding中,以丰富transformer分支的局部细节。 这样的过程构成了相互作用。
  2. Conformer 由一个主干模块、双分支、桥接双分支的 FCU 和用于双分支的两个分类器(一个 fc 层)组成。
  3. 主干模块:主干模块是一个 7×7 卷积,步长为 2,然后是一个 3×3最大池化,步长为 2,用于提取初始局部特征(例如,边缘和纹理信息)。
  4. 双分支:然后将它们馈送到双分支。 CNN 分支和transformer分支分别由N(例如12)个重复的卷积块和transformer 块组成。 这样的并发结构意味着CNN和transformer分支可以分别最大程度地保留局部特征和全局表示。
  5. FCU: FCU 作为桥接模块,将 CNN 分支中的局部特征与transformer分支中的全局表示融合,见下图 (b)所示。 FCU 从第二个块开始应用,因为两个分支的初始化特征是相同的。 沿着分支,FCU 以交互方式逐步融合特征图和patch embedding。
  6. 分类:最后,对于 CNN 分支,所有特征都被汇集并馈送到一个分类器。 对于transformer 分支,类token 被取出并馈送到另一个分类器。 在训练过程中,使用两个交叉熵损失来分别监督两个分类器。 损失函数的重要性根据经验设置为相同。 在推理过程中,将两个分类器的输出简单概括为预测结果

Network Structure

  1. CNN分支: 上图(b)所示,CNN分支采用特征金字塔结构,特征图的分辨率随着网络深度的增加而降低,而通道数增加。 我们将整个分支分为 4 个阶段。 每个stage由多个卷积块组成,每个卷积块包含n个bottlenecks。 遵循 ResNet 中的定义,bottlenecks包含 1×1 卷积(减小通道数)、3×3 空间卷积、1×1 卷积(恢复通道数)以及输入和输出之间的残差连接。 实验中,n在第一个卷积块中设置为1,在随后的N-1个卷积块中满足≥2。
    transformer 通过一步将图像patch投影到向量中,导致局部细节丢失。 而在 CNN 中,卷积核滑动重叠的过特征图,这提供了保留精细局部特征的可能性。 因此,CNN 分支能够为transformer分支连续提供局部特征细节。
  2. Transformer Branch: 类似ViT ,该分支包含N个重复的transformer块。 如上图(b) 所示,每个 Transformer 块由一个多头自注意力模块和一个 MLP 块组成。在每一层之前应用layernorm,并且在自注意力层和 MLP 块这两个层中都有残差连接 。我们将主干模块生成的特征图压缩成 14×14 的patch embedding,而没有重叠,通过线性投影层,这是一个步长为 4 的 4×4 卷积。 考虑到 CNN 分支(3×3 卷积)对局部特征和空间位置信息进行编码 ,不再需要位置嵌入。 这有助于提高下游视觉任务的图像分辨率。
  3. FCU: 给定CNN分支中的特征图和transformer分支中的patch embedding,如何消除它们之间的错位是一个重要问题。 为了解决这个问题,我们建议 FCU 以交互方式将局部特征与全局表示连续耦合。
    一方面,我们必须意识到CNN和transformer的特征维度不一致。 CNN特征图的维度为C×H×W(C、H、W是通道、高度和宽度),而patch embeddings的形状为(K+1)×E,其中K、1和E分别表示图像块的数量、类别 token和embedding维度。 当馈送到transformer分支时,特征图首先需要通过 1×1 卷积来对齐patch embedding的通道数。 然后使用下采样模块(上图(a))完成空间维度对齐。最后,特征图添加patch embedding,如上图(b)所示。 当从transformer branch 反馈到CNN 分支时,patch embedding需要上采样(上图(a))以对齐空间尺度。 然后通过 1×1 卷积将通道维度与 CNN 特征图的维度对齐,并添加到 特征图中。同时,LayerNorm 和 BatchNorm 模块用于对特征进行正则化。
    另一方面,特征图和patch embedding之间存在显着的语义差距,即特征图是从局部卷积算子中收集的,而patch embedding与全局自我聚合。 注意力机制。 因此在每个块(除了第一个)中应用 FCU 以逐步填补语义空白。

猜你喜欢

转载自blog.csdn.net/qq_39333636/article/details/125240170