网站建设与网站优化,p2p网站怎么做,做网站卖机器,株洲网页定制论文介绍
CARAFE模块概述#xff1a;本文介绍了一种名为CARAFE#xff08;Content-Aware ReAssembly of FEatures#xff09;的模块#xff0c;它是一种用于特征上采样的新方法。应用场景#xff1a;CARAFE模块旨在改进图像处理和计算机视觉任务中的上采样过程#xff0…论文介绍
CARAFE模块概述本文介绍了一种名为CARAFEContent-Aware ReAssembly of FEatures的模块它是一种用于特征上采样的新方法。应用场景CARAFE模块旨在改进图像处理和计算机视觉任务中的上采样过程特别适用于目标检测、实例分割、语义分割和图像修复等任务。目标通过引入内容感知的重新组装机制CARAFE旨在提高上采样过程的准确性和效率。
创新点
内容感知上采样与传统的上采样方法如双线性插值、转置卷积等相比CARAFE引入了内容感知机制能够根据输入特征的内容动态地调整上采样过程。动态重新组装CARAFE通过预测每个位置的重新组装核reassembly kernel实现了对输入特征的局部区域进行重新组装从而生成更准确的上采样结果。高效性尽管CARAFE引入了额外的计算步骤但其计算开销相对较小且能够显著提高上采样后的特征质量。
方法
CARAFE框架CARAFE模块主要由两个关键组件组成核预测模块Kernel Prediction Module和内容感知重新组装子模块Content-Aware Reassembly Submodule。 核预测模块负责根据输入特征的局部区域预测重新组装核。该模块由通道压缩器、内容编码器和核归一化器三个子模块组成。内容感知重新组装子模块利用预测的重新组装核对输入特征的局部区域进行重新组装以生成上采样后的特征。 上采样过程对于每个输入特征位置CARAFE首先使用核预测模块预测一个重新组装核然后利用该核对局部区域进行加权求和从而得到上采样后的特征值。
模块作用
提高特征质量通过内容感知的重新组装机制CARAFE能够生成更准确的上采样特征这些特征在后续的任务如目标检测、语义分割等中能够提供更好的性能。增强模型泛化能力由于CARAFE能够动态地调整上采样过程以适应不同的输入特征因此它有助于提高模型的泛化能力使其能够更好地处理复杂和多样化的图像数据。减少计算开销与传统上采样方法相比CARAFE在计算开销方面更具优势。尽管它引入了额外的计算步骤但这些步骤的复杂度相对较低因此不会对整体计算性能造成显著影响。
改进的效果
目标检测在Faster R-CNN和Mask R-CNN等目标检测框架中使用CARAFE替代传统的上采样方法后模型的性能得到了显著提升。具体来说在ADE20k数据集上的mIoU指标提高了约1.8%。语义分割在语义分割任务中使用CARAFE的UperNet模型在ADE20k数据集上的mIoU指标也实现了显著提升从40.44%提高到42.23%。图像修复在图像修复任务中使用CARAFE的GlobalLocal和Partial Conv模型在Places数据集上的PSNR指标也实现了提高分别提高了1.1dB和更多。高效性尽管CARAFE引入了额外的计算步骤但由于其计算开销相对较小因此在实际应用中不会显著影响模型的训练和推理速度。
论文翻译《CARAFE基于内容感知的特征FEatures重新组装》
https://arxiv.org/pdf/1905.02188 特征上采样是许多现代卷积网络架构例如特征金字塔中的关键操作。其设计对于诸如目标检测和语义/实例分割等密集预测任务至关重要。在本文中我们提出了内容感知特征重组CARAFE这是一种通用、轻量级且高度有效的算子以实现这一目标。CARAFE具有几个吸引人的特性1大视野。与仅利用子像素邻域的前期工作例如双线性插值不同CARAFE可以在大感受野内聚合上下文信息。2内容感知处理。与对所有样本使用固定核例如反卷积不同CARAFE支持针对实例的内容感知处理可以即时生成自适应核。3轻量级且计算速度快。CARAFE引入的计算开销很小并且可以轻松集成到现代网络架构中。我们在目标检测、实例/语义分割和图像修复的标准基准上进行了综合评估。CARAFE在所有任务中都表现出一致且显著的增益分别为 1.2 % A P 1.2\% AP 1.2%AP、 1.3 % A P 1.3\% AP 1.3%AP、 1.8 % m I o U 1.8\% mIoU 1.8%mIoU、 1.1 d B 1.1 dB 1.1dB且计算开销可忽略不计。它有望成为未来研究的强大构建块。代码和模型可在https://github.com/open-mmlab/mmdetection获取。
1. 引言
特征上采样是深度神经网络中最基本的操作之一。一方面对于密集预测任务例如超分辨率[7,20]、图像修复[13,32]和语义分割[43,5]中的解码器高级/低分辨率特征图会上采样以匹配高分辨率监督。另一方面特征上采样还涉及将高级/低分辨率特征图与低级/高分辨率特征图进行融合这在许多最先进架构中被广泛采用例如特征金字塔网络[21]、U-Net[34]和堆叠沙漏网络[29]。因此设计有效的特征上采样算子成为一个关键问题。
最常用的特征上采样算子是最近邻和双线性插值它们采用像素之间的空间距离来指导上采样过程。然而最近邻和双线性插值仅考虑子像素邻域无法捕获密集预测任务所需的丰富语义信息。另一种实现自适应上采样的方法是反卷积[30]。反卷积层作为卷积层的逆算子学习一组与实例无关的上采样核。但是它有两个主要缺点。首先反卷积算子在整个图像上应用相同的核而不考虑底层内容。这限制了其响应局部变化的能力。其次当使用大核大小时它带有大量参数和繁重的计算工作量。这使得其难以覆盖超出小邻域的更大区域从而限制了其表达能力和性能。
在本文中我们超越了这些限制并寻求一种特征上采样算子其能够1在大感受野内聚合信息2即时适应特定实例的内容以及3保持计算效率。为此我们提出了一种轻量级且高度有效的算子称为内容感知特征重组CARAFE。具体而言CARAFE通过加权组合在每个位置为中心的预定区域内重新组合特征其中权重以内容感知的方式生成。此外对于每个位置有多组这样的上采样权重。特征上采样通过将生成的特征重新排列为空间块来完成。
请注意这些空间自适应权重不是作为网络参数学习的。相反它们是使用具有softmax激活的轻量级全卷积模块即时预测的。图1揭示了CARAFE的工作机制。通过CARAFE上采样后特征图可以更准确地表示对象的形状从而使模型能够预测更好的实例分割结果。我们的CARAFE不仅在空间上对特征图进行上采样还学习增强其判别能力。
为了证明CARAFE的普遍有效性我们使用主流架构在广泛的密集预测任务上进行了全面评估即目标检测、实例分割、语义分割和图像修复。在MS COCO 2018 test-dev数据集上CARAFE可以使Faster RCNN[33]在目标检测上的性能提升 1.2 % A P 1.2\% \mathrm{AP} 1.2%AP使Mask RCNN[9]在实例分割上的性能提升 1.3 % A P 1.3\% \mathrm{AP} 1.3%AP。在ADE20k[47, 48]验证集上的语义分割任务中CARAFE使UperNet[38]的性能提升了 1.8 % m I o U 1.8\% \mathrm{mIoU} 1.8%mIoU在Places[46]验证集上的图像修复任务中使GlobalLocal[13]的PSNR提升了1.1 dB。当将具有256个通道的 H × W H \times W H×W特征图上采样两倍时CARAFE引入的计算开销仅为 H ∗ W ∗ 199 k H * W * 199 k H∗W∗199k FLOPs相比之下反卷积的计算开销为 H ∗ W ∗ 1180 k H * W * 1180 k H∗W∗1180k FLOPs。在所有任务上取得的显著增益表明CARAFE是一种有效且高效的特征上采样算子未来有很大的潜力成为强有力的研究基石。
2. 相关工作
上采样算子。最常用的上采样方法是最近邻插值和双线性插值。这些插值方法利用距离来衡量像素之间的相关性并使用手工设计的上采样核。在深度学习时代提出了几种使用可学习算子对上采样特征图的方法。例如反卷积[30]是卷积的逆算子在这些可学习上采样器中最为著名。Pixel Shuffle[35]提出了一种不同的上采样器它将通道空间上的深度重塑为空间上的宽度和高度。最近[26]提出了引导上采样GUM通过采样具有可学习偏移量的像素来进行插值。然而这些方法要么仅利用了小邻域内的上下文信息要么需要昂贵的计算来进行自适应插值。在超分辨率和去噪领域其他工作[27,16,11]也探索了在低级视觉任务中空间上使用可学习核。本着类似的设计精神本文展示了内容感知特征重组在几个视觉感知任务中上采样的有效性和工作机制并提供了一种轻量级解决方案。
密集预测任务。目标检测是定位带有边界框的物体的任务实例分割进一步要求预测实例级掩码。Faster-RCNN[33]引入了区域提议网络RPN用于端到端训练该网络通过引导锚定方案[37]得到了进一步改进。[21, 24, 17, 45, 31]利用多尺度特征金字塔来处理不同尺度的物体。通过添加额外的掩码预测分支Mask-RCNN[9]及其变体[1, 12]获得了令人满意的像素级结果。语义分割[25, 19]要求对给定图像进行像素级语义预测。PSPNet[43]引入了多个网格尺度的空间池化而UperNet[38]基于PSPNet设计了一个更通用的框架。图像或视频修复[42, 40, 39]是填充输入图像缺失区域的一个经典问题。U-net[34]在最近的工作中[13, 36]很受欢迎并采用了多个上采样算子。Liu等人[23]引入了部分卷积层以减轻缺失区域对卷积层的影响。我们的CARAFE在各种密集预测任务中展示了普遍的有效性。
3. 内容感知特征重组
特征上采样是许多现代卷积网络架构中的关键算子这些架构是为包括目标检测、实例分割和场景解析在内的任务开发的。在这项工作中我们提出了内容感知特征重组CARAFE来上采样特征图。在每个位置上CARAFE可以利用底层内容信息来预测重组核并在预定义的附近区域内重新组合特征。得益于内容信息CARAFE可以在不同位置使用自适应和优化的重组核并且比主流上采样算子如插值或反卷积实现更好的性能。
3.1. 公式化
CARAFE作为具有内容感知核的重组算子包含两个步骤。第一步是根据内容为每个目标位置预测一个重组核第二步是使用预测的核重新组合特征。给定大小为 C × H × W C \times H \times W C×H×W的特征图 X \mathcal{X} X和上采样比例 σ \sigma σ假设 σ \sigma σ为整数CARAFE将生成大小为 C × σ H × σ W C \times \sigma H \times \sigma W C×σH×σW的新特征图 X ′ \mathcal{X}^{\prime} X′。对于输出 X ′ \mathcal{X}^{\prime} X′上的任何目标位置 l ′ ( i ′ , j ′ ) l^{\prime}\left(i^{\prime}, j^{\prime}\right) l′(i′,j′)在输入 X \mathcal{X} X上都有一个对应的源位置 l ( i , j ) l(i, j) l(i,j)其中 i ⌊ i ′ / σ ⌋ , j ⌊ j ′ / σ ⌋ i\left\lfloor i^{\prime} / \sigma\right\rfloor, j\left\lfloor j^{\prime} / \sigma\right\rfloor i⌊i′/σ⌋,j⌊j′/σ⌋。这里我们将 N ( X l , k ) N\left(\mathcal{X}_{l}, k\right) N(Xl,k)表示为以位置 l l l为中心、大小为 k × k k \times k k×k的 X \mathcal{X} X的子区域即 X l \mathcal{X}_{l} Xl的邻域。
在第一步中核预测模块 ψ \psi ψ根据 X l \mathcal{X}_{l} Xl的邻域为每个位置 l ′ l^{\prime} l′预测一个位置感知核 W l ′ \mathcal{W}_{l^{\prime}} Wl′如公式1所示。重组步骤如公式2所示其中 ϕ \phi ϕ是内容感知重组模块它使用核 W l ′ \mathcal{W}_{l^{\prime}} Wl′重新组合 X l \mathcal{X}_{l} Xl的邻域 W l ′ ψ ( N ( X l , k encoder ) ) X l ′ ′ ϕ ( N ( X l , k u p ) , W l ′ ) \begin{aligned} \mathcal{W}_{l^{\prime}} \psi\left(N\left(\mathcal{X}_{l}, k_{\text {encoder }}\right)\right) \\ \mathcal{X}_{l^{\prime}}^{\prime} \phi\left(N\left(\mathcal{X}_{l}, k_{u p}\right), \mathcal{W}_{l^{\prime}}\right) \end{aligned} Wl′Xl′′ψ(N(Xl,kencoder ))ϕ(N(Xl,kup),Wl′) 在以下部分中我们将详细说明 ψ \psi ψ和 ϕ \phi ϕ的细节。
3.2. 核预测模块
核预测模块负责以内容感知的方式生成重组核。在 X \mathcal{X} X上的每个源位置对应于 X ′ \mathcal{X}^{\prime} X′上的 σ 2 \sigma^{2} σ2个目标位置。每个目标位置需要一个 k u p × k u p k_{up} \times k_{up} kup×kup的重组核其中 k u p k_{up} kup是重组核的大小。因此该模块将输出大小为 C u p × H × W C_{up} \times H \times W Cup×H×W的重组核其中 C u p σ 2 k u p 2 C_{up}\sigma^{2} k_{up}^{2} Cupσ2kup2。
核预测模块由三个子模块组成即通道压缩器、内容编码器和核归一化器如图2所示。通道压缩器减少了输入特征图的通道数。然后内容编码器将压缩后的特征图作为输入对内容进行编码以生成重组核。最后核归一化器对每个重组核应用softmax函数。以下是对这三个子模块的详细解释。
通道压缩器。我们采用一个 1 × 1 1 \times 1 1×1的卷积层来将输入特征通道从 C C C压缩到 C m C_{m} Cm。减少输入特征图的通道数可以减少后续步骤中的参数数量和计算成本使CARAFE更高效。在相同的预算下也可以使用更大的内核大小为内容编码器。实验结果表明在可接受的范围内减少特征通道不会损害性能。
内容编码器。我们使用大小为 k encoder k_{\text {encoder}} kencoder的卷积层根据输入特征的内容生成重组核。编码器的参数为 k encoder × k encoder × C m × C u p k_{\text {encoder}} \times k_{\text {encoder}} \times C_{m} \times C_{up} kencoder×kencoder×Cm×Cup。直观上增加 k encoder k_{\text {encoder}} kencoder可以扩大编码器的感受野并利用更大区域内的上下文信息这对于预测重组核很重要。然而计算复杂度随着内核大小的平方增长而来自更大内核大小的收益则不会。通过我们在5.3节的研究经验公式 k encoder k u p − 2 k_{\text {encoder}}k_{up}-2 kencoderkup−2在性能和效率之间取得了良好的平衡。
核归一化器。在应用于输入特征图之前每个 k u p × k u p k_{up} \times k_{up} kup×kup的重组核都会通过softmax函数在空间上进行归一化。归一化步骤强制内核值的和为1这是在局部区域内的软选择。由于核归一化器CARAFE不会执行任何重新缩放并改变特征图的平均值这就是为什么我们提出的算子被称为特征的重组。
3.3. 内容感知重组模块
使用每个重组核 W l ′ \mathcal{W}_{l^{\prime}} Wl′内容感知重组模块将通过函数 ϕ \phi ϕ重新组合局部区域内的特征。我们采用 ϕ \phi ϕ的简单形式它只是一个加权和算子。对于目标位置 l ′ l^{\prime} l′和以 l ( i , j ) l(i, j) l(i,j)为中心的相应正方形区域 N ( X l , k u p ) N\left(\mathcal{X}_{l}, k_{up}\right) N(Xl,kup)重组如公式3所示其中 r ⌊ k u p / 2 ⌋ r\left\lfloor k_{up} / 2\right\rfloor r⌊kup/2⌋ X l ′ ′ ∑ n − r r ∑ m − r r W l ′ ( n , m ) ⋅ X ( i n , j m ) \mathcal{X}_{l^{\prime}}^{\prime}\sum_{n-r}^{r} \sum_{m-r}^{r} \mathcal{W}_{l^{\prime}(n, m)} \cdot \mathcal{X}_{(in, jm)} Xl′′∑n−rr∑m−rrWl′(n,m)⋅X(in,jm)
使用重组核区域 N ( X l , k u p ) N\left(\mathcal{X}_{l}, k_{up}\right) N(Xl,kup)中的每个像素都会基于特征的内容而不是位置的距离对上采样像素 l ′ l^{\prime} l′产生不同的贡献。由于局部区域内相关点的信息可以更多地被关注因此重新组合后的特征图的语义可能比原始特征图更强。
3.4. 与先前算子的关系
在这里我们讨论了CARAFE与动态滤波器[15]、空间注意力[3]、空间变换器[14]和可变形卷积[6]之间的关系它们具有相似的设计理念但侧重点不同。
动态滤波器。动态滤波器根据网络的输入生成特定实例的卷积滤波器然后将预测的滤波器应用于输入。动态滤波器和CARAFE都是内容感知算子但它们之间的根本区别在于内核生成过程。具体来说动态滤波器是一个两步卷积过程其中额外的滤波器预测层和滤波层需要大量的计算。相反CARAFE只是局部区域内特征的重新组合而不学习跨通道的特征变换。假设输入特征图的通道数为 C C C滤波器的内核大小为 K K K则在动态滤波器中每个位置预测的内核参数为 C × C × K × K C \times C \times K \times K C×C×K×K。对于CARAFE内核参数仅为 K × K K \times K K×K。因此它在内存和速度上更高效。
空间注意力。空间注意力预测一个与输入特征大小相同的注意力图然后对每个位置的特征图进行重新缩放。我们的CARAFE通过加权和对局部区域内的特征进行重新组合。总之空间注意力是一个具有逐点指导的重缩放算子而CARAFE是一个具有局部区域指导的重新组合算子。空间注意力可以看作是CARAFE的一种特殊情况其中重组核大小为1不考虑核归一化器。
空间变换网络STN。STN根据输入特征图预测一个全局参数变换并通过该变换对特征进行扭曲。然而这个全局参数变换假设太强无法表示复杂的空间变化而且STN的训练很难。在这里CARAFE使用位置特定的重组来处理空间关系这能够实现更灵活的局部几何建模。
可变形卷积网络DCN。DCN也采用了学习几何变换的思想并将其与常规卷积层相结合。它预测内核偏移量而不是使用网格卷积内核。与动态滤波器类似它也是一个重参数算子计算成本比CARAFE高24倍。它也对参数初始化很敏感。
4. CARAFE的应用
CARAFE可以无缝集成到需要上采样算子的现有框架中。在这里我们介绍一些在主流密集预测任务中的应用。CARAFE通过引入可忽略的额外参数在高层次和低层次任务如目标检测、实例分割、语义分割和图像修复中均提升了最先进方法的性能。
4.1. 目标检测和实例分割
特征金字塔网络FPN是目标检测和实例分割领域的一种重要且有效的架构。它显著提高了Faster R-CNN和Mask R-CNN等流行框架的性能。FPN通过自顶向下的路径和横向连接构建具有强大语义的特征金字塔。在自顶向下的路径中首先通过最近邻插值将低分辨率特征图上采样2倍然后与高分辨率特征图进行融合如图3所示。
我们提出在所有特征级别中用CARAFE替代最近邻插值。这一修改很平滑无需额外更改。除了FPN结构外Mask R-CNN在掩码头的末尾采用了一个反卷积层。它用于将预测的 14 × 14 14 \times 14 14×14数字上采样到 28 × 28 28 \times 28 28×28以获得更精细的掩码预测。我们也可以使用CARAFE来替代反卷积层从而进一步降低计算成本。
4.2. 语义分割
语义分割要求模型对整个图像输出逐像素级别的预测因此通常更喜欢高分辨率特征图。在该任务中上采样被广泛用于放大特征图并融合不同级别的语义信息。UperNet是语义分割的一个强大基线。它在以下三个组件中使用上采样即PPM、FPN、FUSE。我们采用CARAFE替代它们原有的上采样器。
金字塔池化模块PPM。PPM是PSPNet中的关键组件它分层地将输入特征图下采样到多个尺度 { 1 × 1 , 2 × 2 , 3 × 3 , 6 × 6 } \{1 \times 1,2 \times 2,3 \times 3,6 \times 6\} {1×1,2×2,3×3,6×6}然后通过双线性插值将它们上采样回原始尺寸。最后通过拼接将这些特征与原始特征进行融合。由于上采样比例非常大我们采用两步策略使用CARAFE在性能和效率之间取得平衡。首先我们使用双线性插值将 { 1 × 1 , 2 × 2 , 3 × 3 , 6 × 6 } \{1 \times 1,2 \times 2,3 \times 3,6 \times 6\} {1×1,2×2,3×3,6×6}特征上采样到原始特征图尺寸的一半然后使用CARAFE进一步将其上采样2倍。
特征金字塔网络FPN。与检测模型类似UperNet也采用FPN来丰富特征语义。它只有四个不同的特征级别 { P 2 , P 3 , P 4 , P 5 } \{\mathrm{P} 2, \mathrm{P} 3, \mathrm{P} 4, \mathrm{P}5\} {P2,P3,P4,P5}步长分别为 { 4 , 8 , 16 , 32 } \{4,8,16,32\} {4,8,16,32}。我们以与4.1节相同的方式替换上采样算子。
多级特征融合FUSE。UperNet在FPN之后提出了一个多级特征融合模块。它通过双线性插值将P3、P4、P5上采样到与P2相同的尺寸然后通过拼接融合这些不同级别的特征。该过程相当于一个顺序上采样-拼接过程即首先将P5上采样到P4的尺寸并进行拼接然后将拼接后的特征图上采样到P3的尺寸以此类推。我们在这里用CARAFE替换顺序双线性上采样。
4.3. 图像修复
U-net架构在最近提出的图像修复方法中很受欢迎如GlobalLocal [13]和Partial Conv [23]。在网络的后半部分有两个上采样算子。我们简单地将这两个上采样层替换为CARAFE并评估性能。对于Partial Conv我们可以通过使用我们的内容感知重组核更新掩码来方便地保持CARAFE中的掩码传播。
5. 实验
5.1. 实验设置
数据集与评估指标。我们在几个重要的密集预测基准上评估了CARAFE。默认情况下我们使用训练集进行训练并在验证集上评估这些数据集的性能。 目标检测和实例分割。我们在具有挑战性的MS COCO 2017数据集上进行了实验。结果采用标准的COCO评估指标即IoU从0.5到0.95的平均精度mAP。 语义分割。我们采用ADE20k基准来评估我们的方法在语义分割任务中的表现。结果通过平均IoUmIoU和像素准确率P.A.来衡量分别表示预测与真实掩码之间的平均IoU和每像素分类准确率。 图像修复。我们采用Places数据集进行图像修复。使用L1误差越低越好和PSNR越高越好作为评估指标。 实现细节。除非另有说明否则CARAFE在实验中采用一组固定的超参数其中通道压缩器的 C m C_{m} Cm为64内容编码器的 k encoder 3 k_{\text{encoder}}3 kencoder3 k u p 5 k_{up}5 kup5。更多实现细节见补充材料。 目标检测和实例分割。我们在Faster RCNN和Mask RCNN上评估了CARAFE主干网络为ResNet-50带FPN并遵循Detectron [8]和MMDetection [2]的1x训练计划设置。语义分割。我们使用UperNet的官方实现 1 ^{1} 1并采用相同的实验设置。 图像修复。我们采用GlobalLocal [13]和Partial Conv [23]作为基线方法来评估CARAFE。
5.2. 基准测试结果
目标检测与实例分割。我们首先通过将FPN中的最近邻插值替换为CARAFE针对Faster RCNN和Mask RCNN以及将Mask RCNN中掩码头的反卷积层替换为CARAFE来评估我们的方法。如表1所示CARAFE使Faster RCNN的bbox AP提高了 1.2 % 1.2\% 1.2%使Mask RCNN的掩码AP提高了 1.3 % 1.3\% 1.3%。 A P S \mathrm{AP}_{S} APS、 A P M \mathrm{AP}_{M} APM、 A P L \mathrm{AP}_{L} APL的提升均超过 1 % A P 1\% \mathrm{AP} 1%AP这表明它对各种目标尺度都有益。
如图1所示的定性结果支持了我们令人鼓舞的性能。我们可视化了FPN自上而下路径中的特征图并将CARAFE与基线即最近邻插值进行了比较。显然通过内容感知重组特征图更具判别性并且预测出了更精确的目标掩码。在图4中我们展示了一些实例分割结果的示例比较了基线和CARAFE。
为了研究不同上采样算子的有效性我们在Faster RCNN中使用了不同的算子在FPN中进行上采样并进行了大量实验。结果如表2所示。对于“N.C.”和“B.C.”分别表示“最近邻卷积”和“双线性卷积”我们在相应的上采样后添加了一个额外的 3 × 3 3 \times 3 3×3卷积层。“Deconv”、“Pixel Shuffle”表示为“P.S.”、“GUM”是三种具有代表性的基于学习的上采样方法。我们还比较了这里的“空间注意力”表示为“S.A.”。CARAFE在这些上采样算子中取得了最高的AP且FLOPs和参数相对较少这证明了它既有效又高效。“最近邻卷积”和“双线性卷积”的结果表明额外的参数并没有带来显著的增益。“Deconv”、“Pixel Shuffle”、“GUM”和“空间注意力”的性能均低于CARAFE这表明设计有效的上采样算子至关重要。
除了FPN这种金字塔特征融合结构外我们还探索了掩码头中的不同上采样算子。在典型的Mask R-CNN中采用反卷积层将RoI特征上采样2倍。为了公平比较我们没有对FPN进行任何修改只将反卷积层替换不同的为算子。由于我们只修改了掩码预测分支因此以掩码AP的形式报告性能如表3所示。在这些方法中CARAFE在实例分割方面取得了最佳性能。
在表4中我们报告了在Mask RCNN的FPN和掩码头中分别采用CARAFE的目标检测和实例分割结果。这些实验均取得了一致的改进。 语义分割。我们将UperNet中的上采样器替换为CARAFE并在ADE20k基准上评估结果。如表5所示CARAFE将单尺度测试的mIoU从 40.44 % 40.44\% 40.44%大幅提升至 42.23 % 42.23\% 42.23%。值得注意的是带有CARAFE的UperNet也取得了比最近的强大基线如PSPNet [43]和PSANet [44]更好的性能。
我们按照4.2节所述逐步研究了修改UperNet中不同组件的有效性。表6中的结果表明CARAFE对所有三个组件都有帮助且它们的组合带来了进一步的增益。 图像修复。我们证明了CARAFE在图像修复等低级任务中也是有效的。通过在两个强大的基线GlobalLocal [13]和Partial Conv [23]中将上采样算子替换为CARAFE我们观察到这两种方法都有显著改进。如表7所示我们的方法在PSNR指标上使两个基线分别提高了1.1 dB和0.2 dB。
5.3. 消融研究与进一步分析
模型设计与超参数。我们研究了模型设计中超参数的影响即压缩通道 C m C_{m} Cm、编码器核大小 k encoder k_{\text{encoder}} kencoder和重组核大小 k u p k_{up} kup。我们还测试了核归一化器中不同的归一化方法。我们使用带有ResNet-50主干的Faster RCNN对设计和设置进行了消融研究并在COCO 2017验证集上评估了结果。
为了实现高效设计我们首先分析了由浮点运算数FLOPs衡量的计算复杂度。当以因子 σ \sigma σ对输入通道为 C i n C_{in} Cin的特征图进行上采样时CARAFE的每像素FLOPs计算为 2 ( C in 1 ) C m 2 ( C m k encoder 2 1 ) σ 2 k u p 2 2 σ 2 k u p 2 C i n 2\left(C_{\text{in}}1\right)C_{m}2\left(C_{m}k_{\text{encoder}}^{2}1\right)\sigma^{2}k_{up}^{2}2\sigma^{2}k_{up}^{2}C_{in} 2(Cin1)Cm2(Cmkencoder21)σ2kup22σ2kup2Cin参见[28]。
我们在通道压缩器中尝试了不同的 C m C_{m} Cm值。此外我们还尝试移除通道压缩器模块这意味着内容编码器直接使用输入特征来预测重组核。表8中的实验结果表明将 C m C_{m} Cm压缩到64不会导致性能下降反而更加高效。进一步减小 C m C_{m} Cm会导致性能略有下降。在没有通道压缩器的情况下它可以达到相同的性能这证明了通道压缩器可以在不损害性能的情况下加快核预测速度。基于以上结果我们默认将 C m C_{m} Cm设置为64以在性能和效率之间取得平衡。
然后我们研究了 k encoder k_{\text{encoder}} kencoder和 k u p k_{up} kup的影响。直观上增加 k u p k_{up} kup也需要更大的 k encoder k_{\text{encoder}} kencoder因为内容编码器需要一个大的感受野来预测一个大的重组核。如表9所示同时增加 k encoder k_{\text{encoder}} kencoder和 k u p k_{up} kup可以提高性能而只增加其中一个则不会。我们总结了一个经验公式 k encoder k u p − 2 k_{\text{encoder}}k_{up}-2 kencoderkup−2这是所有设置中的一个好选择。尽管采用更大的核大小是有帮助的但我们默认设置 k u p 5 k_{up}5 kup5和 k encoder 3 k_{\text{encoder}}3 kencoder3以在性能和效率之间取得平衡。
除了softmax函数外我们还测试了核归一化器中的其他替代方案如sigmoid或带归一化的sigmoid。如表10所示“Softmax”和“Sigmoid Normalized”具有相同的性能并且优于“Sigmoid”这表明将重组核归一化为和为1是至关重要的。
CARAFE的工作原理。我们进行了进一步的定性研究以弄清楚CARAFE是如何工作的。我们使用训练好的采用CARAFE作为上采样算子的Mask RCNN模型在图5中可视化了重组过程。在特征金字塔网络FPN结构中低分辨率特征图将连续上采样几次以达到更高的分辨率因此上采样特征图中的一个像素会从更大的区域重新组合信息。我们在高分辨率特征图中采样了一些像素并查看它们是从哪些相邻像素重新组合而来的。绿色圆圈表示示例位置红色点表示在重组过程中高度加权的源。从图中可以清楚地看出CARAFE是内容感知的。它倾向于重新组合具有相似语义信息的点。人体上的一个位置更倾向于来自同一人体的其他点而不是其他物体或附近的背景。对于具有较弱语义的背景区域中的位置重组更加均匀或只是偏向于具有相似低级纹理特征的点。
6. 结论
我们提出了内容感知特征重组CARAFE这是一种通用、轻量级且高度有效的上采样算子。它在目标检测、实例/语义分割和图像修复的标准基准上分别一致地将性能提高了 1.2 % A P 1.2\% AP 1.2%AP、 1.3 % A P 1.3\% AP 1.3%AP、 1.8 % m I o U 1.8\% mIoU 1.8%mIoU、 1.1 d B 1.1 dB 1.1dB。更重要的是CARAFE引入的计算开销很小并且可以轻松集成到现代网络架构中。未来的研究方向包括探索CARAFE在低级视觉任务如图像恢复和超分辨率中的适用性。
致谢。本工作部分得到了商汤科技集团中大协议编号TS1610626和TS1712093、香港研究资助局GRF编号14236516和14203518、新加坡教育部MOEAcRF一级M4012082.020、南洋理工大学NTU学生资助基金SUG和NTU NAP的联合研究资助。
附录
附录A. 详细实验设置
目标检测和实例分割。我们在以ResNet-50为主干网络的Faster RCNN[33]和Mask RCNN[9]上评估CARAFE。这些方法使用了FPN[21]。在训练和推理中我们调整输入图像的大小使其短边有800像素或长边有1333像素同时保持其纵横比不变。我们采用同步SGD初始学习率为0.02动量为0.9权重衰减为0.0001。我们在8个GPU上使用16的批量大小每个GPU 2张图像。遵循Detectron[8]和MMDetection[2]的1倍训练计划我们总共训练12个周期并在第8个和第11个周期将学习率降低0.1倍。
语义分割。我们使用以ResNet-50为主干网络的UperNet的官方实现{ }^{3} [38]。在训练期间输入图像的短边大小随机从{300,375,450, 525,600}中选择。在推理中为了公平比较我们采用单尺度测试并将图像的短边设置为450像素。在训练和推理中图像长边的最大长度均设置为1200。我们采用同步SGD初始学习率为0.02动量为0.9权重衰减为0.0001。我们在8个GPU上使用16的批量大小每个GPU 2张图像并采用同步批量归一化这是语义分割中的常见做法。遵循[4]我们采用“poly”学习率策略其中当前迭代的学习率等于初始学习率乘以KaTeX parse error: Expected EOF, got _ at position 21: …ext { iter /max_̲iter })^{\text …。我们将power设置为0.9并总共训练20个周期。
图像修复。我们采用GlobalLocal[13]中的生成器和判别器网络作为基线。我们的生成器以带有掩码区域 M M M的 256 × 256 256 \times 256 256×256图像 x x x作为输入并输出缺失区域的 256 × 256 256 \times 256 256×256预测 y ^ \hat{\mathbf{y}} y^。然后我们通过 y ( 1 − M ) ⊙ x M ⊙ y ^ \mathbf{y}(1-M) \odot \mathbf{x}M \odot \hat{\mathbf{y}} y(1−M)⊙xM⊙y^将预测图像与输入图像结合。最后将组合后的输出 y \mathbf{y} y输入到判别器中。我们对基线模型进行了简单修改以获得更好的生成质量。与原始模型使用两个判别器相比我们仅在修复区域使用一个PatchGAN风格的判别器[18]。这种修改可以获得更好的图像质量。
为了公平比较并考虑实际应用我们使用[41]引入的自由形式掩码作为二进制掩码 M M M。对于Partial Conv[23]我们只需在生成器中将卷积层替换为官方的Partial Conv模块。在训练期间我们采用Adam求解器学习率为0.0001其中 β 1 0.5 \beta_{1}0.5 β10.5 β 2 0.9 \beta_{2}0.9 β20.9。训练批量大小为32。输入和输出在范围 [ − 1 , 1 ] [-1,1] [−1,1]内线性缩放。
附录B. CARAFE的可视化
在图6中我们通过更多示例展示了CARAFE如何进行内容感知重组。在FPN结构的自上而下路径中红色单元通过CARAFE重组为绿色中心单元。
附录C. 可视化结果比较 目标检测和实例分割。如图7所示我们提供了Mask RCNN基线和带有CARAFE的Mask RCNN在COCO[22] 2017验证集上的更多目标检测和实例分割结果比较。
语义分割。我们在图8中比较了ADE20k[47]验证集上UperNet基线和带有CARAFE的UperNet的语义分割结果。
图像修复。在图9中我们展示了Places[46]验证集上GlobalLocal基线和带有CARAFE的GlobalLocal的图像修复结果比较。 代码
class CARAFE(nn.Module):def __init__(self, c, k_enc3, k_up5, c_mid64, scale2): The unofficial implementation of the CARAFE module.The details are in https://arxiv.org/abs/1905.02188.Args:c: The channel number of the input and the output.c_mid: The channel number after compression.scale: The expected upsample scale.k_up: The size of the reassembly kernel.k_enc: The kernel size of the encoder.Returns:X: The upsampled feature map.super(CARAFE, self).__init__()self.scale scaleself.comp Conv(c, c_mid)self.enc Conv(c_mid, (scale*k_up)**2, kk_enc, actFalse)self.pix_shf nn.PixelShuffle(scale)self.upsmp nn.Upsample(scale_factorscale, modenearest)self.unfold nn.Unfold(kernel_sizek_up, dilationscale, paddingk_up//2*scale)def forward(self, X):b, c, h, w X.size()h_, w_ h * self.scale, w * self.scaleW self.comp(X) # b * m * h * wW self.enc(W) # b * 100 * h * wW self.pix_shf(W) # b * 25 * h_ * w_W torch.softmax(W, dim1) # b * 25 * h_ * w_X self.upsmp(X) # b * c * h_ * w_X self.unfold(X) # b * 25c * h_ * w_X X.view(b, c, -1, h_, w_) # b * 25 * c * h_ * w_X torch.einsum(bkhw,bckhw-bchw, [W, X]) # b * c * h_ * w_return X改进方法
将上面的代码复制到conv.py中如下图 在__init__.py中导入CARAFE代码如下 在task.py中导入CARAFE如下图 在task.py的parse_model函数中增加CARAFE如下图 代码 elif m is CARAFE:c2 ch[f]args [c2, *args]修改配置文件ultralytics/cfg/models/v10/yolov10l.yaml代码如下
# Parameters
nc: 80 # number of classes
scales: # model compound scaling constants, i.e. modelyolov8n.yaml will call yolov8.yaml with scale n# [depth, width, max_channels]l: [1.00, 1.00, 512] # YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPs# YOLOv8.0n backbone
backbone:# [from, repeats, module, args]- [-1, 1, Conv, [64, 3, 2]] # 0-P1/2- [-1, 1, Conv, [128, 3, 2]] # 1-P2/4- [-1, 3, C2f, [128, True]]- [-1, 1, Conv, [256, 3, 2]] # 3-P3/8- [-1, 6, C2f, [256, True]]- [-1, 1, SCDown, [512, 3, 2]] # 5-P4/16- [-1, 6, C2f, [512, True]]- [-1, 1, SCDown, [1024, 3, 2]] # 7-P5/32- [-1, 3, C2fCIB, [1024, True]]- [-1, 1, SPPF, [1024, 5]] # 9- [-1, 1, PSA, [1024]] # 10# YOLOv8.0n head
head:- [-1, 1, CARAFE, []]- [[-1, 6], 1, Concat, [1]] # cat backbone P4- [-1, 3, C2fCIB, [512, True]] # 13- [-1, 1, CARAFE, []]- [[-1, 4], 1, Concat, [1]] # cat backbone P3- [-1, 3, C2f, [256]] # 16 (P3/8-small)- [-1, 1, Conv, [256, 3, 2]]- [[-1, 13], 1, Concat, [1]] # cat head P4- [-1, 3, C2fCIB, [512, True]] # 19 (P4/16-medium)- [-1, 1, SCDown, [512, 3, 2]]- [[-1, 10], 1, Concat, [1]] # cat head P5- [-1, 3, C2fCIB, [1024, True]] # 22 (P5/32-large)- [[16, 19, 22], 1, v10Detect, [nc]] # Detect(P3, P4, P5)在项目的根目录添加train.py脚本代码如下
from ultralytics import YOLOv10
import osif __name__ __main__:# 加载模型model YOLOv10(modelultralytics/cfg/models/v10/yolov10l.yaml) # 从头开始构建新模型# Use the modelresults model.train(dataVOC.yaml, epochs300, device0, batch8, seed42,) # 训练模训练完成后就可以看到测试结果
在项目的根目录添加val.py脚本代码如下 from ultralytics import YOLOv10if __name__ __main__:# Load a model# model YOLO(yolov8m.pt) # load an official modelmodel YOLOv10(runs/detect/train/weights/best.pt) # load a custom model# Validate the modelmetrics model.val(splitval) # no arguments needed, dataset and settings remembered
splitval’代表使用验证集做测试如果改为split‘test’则使用测试集做测试
在项目的根目录添加test.py脚本代码如下
from ultralytics import YOLOv10if __name__ __main__:# Load a modelmodel YOLOv10(runs/detect/train/weights/best.pt) # load a custom modelresults model.predict(sourceultralytics/assets, device0,saveTrue) # predict on an imageprint(results)test脚本测试assets文件夹下面的图片save设置为true则保存图片的测试结果
测试结果
Starting training for 2 epochs...Epoch GPU_mem box_om cls_om dfl_om box_oo cls_oo dfl_oo Instances Size1/2 10.2G 3.708 5.323 3.95 3.418 7.359 3.959 40 640: 100%|██████████| 259/259 [02:3100:00, 1.71it/s]Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 15/15 [02:5900:00, 12.00s/it]all 230 1412 0.377 0.0558 0.00515 0.00178Epoch GPU_mem box_om cls_om dfl_om box_oo cls_oo dfl_oo Instances Size2/2 9.99G 2.733 3.948 2.944 2.492 5.033 2.72 40 640: 100%|██████████| 259/259 [02:0800:00, 2.02it/s]Class Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 15/15 [02:1100:00, 8.77s/it]all 230 1412 0.298 0.0439 0.0201 0.007662 epochs completed in 0.179 hours.
Optimizer stripped from runs\detect\train2\weights\last.pt, 52.6MB
Optimizer stripped from runs\detect\train2\weights\best.pt, 52.6MBValidating runs\detect\train2\weights\best.pt...
Ultralytics YOLOv8.1.34 Python-3.9.19 torch-1.13.1 CUDA:0 (NVIDIA GeForce RTX 4090 Laptop GPU, 16376MiB)
YOLOv10l summary (fused): 477 layers, 25946776 parameters, 0 gradientsClass Images Instances Box(P R mAP50 mAP50-95): 100%|██████████| 15/15 [01:4100:00, 6.77s/it]all 230 1412 0.298 0.0455 0.0201 0.00766c17 230 131 0.0447 0.084 0.0221 0.00841c5 230 68 0.0466 0.0147 0.0104 0.00403helicopter 230 43 0.0334 0.0698 0.0137 0.0067c130 230 85 0.0442 0.506 0.0698 0.0255f16 230 57 0.011 0.0175 0.00446 0.00154b2 230 2 0 0 0 0other 230 86 0.0889 0.0581 0.0251 0.00846b52 230 70 0 0 0.00733 0.00284kc10 230 62 1 0 0.0116 0.00291command 230 40 0 0 0.00526 0.00202f15 230 123 0.388 0.00813 0.00931 0.00311kc135 230 91 0.286 0.335 0.22 0.0956a10 230 27 0 0 0.001 0.000525b1 230 20 0 0 0 0aew 230 25 1 0 0.00636 0.00153f22 230 17 1 0 0 0p3 230 105 0 0 0.00693 0.00229p8 230 1 1 0 0 0f35 230 32 1 0 0 0f18 230 125 0.114 0.136 0.0771 0.0261v22 230 41 0 0 0.00674 0.0018su-27 230 31 1 0 0.0401 0.0122il-38 230 27 0 0 0.000987 0.000179tu-134 230 1 0 0 0 0su-33 230 2 0 0 0 0an-70 230 2 1 0 0 0tu-22 230 98 0 0 0.00352 0.00105
Speed: 0.7ms preprocess, 438.1ms inference, 0.0ms loss, 0.1ms postprocess per image
Results saved to runs\detect\train2Process finished with exit code 0总结
完整代码
通过百度网盘分享的文件YoloV10改进策略上采样改进CARAFE轻量级上采样即插即用附...
链接https://pan.baidu.com/s/1v_5pXkHq8j_5b73_azSx8A?pwdabj2
提取码abj2