ResNeSt: Split-Attention Networks论文学习笔记


这张图展示了一个名为"Split-Attention"的神经网络结构,该结构在一个基数组(cardinal group)内进行操作。基数组通常指的是在神经网络中处理的一组特征或通道。图中展示了如何通过一系列操作来实现对输入特征的注意力机制。

以下是图中各部分的解释:

输入层:

图中顶部有多个输入(Input 1, Input 2, ..., Input r),这些输入的特征维度为 (h,w,c),其中 h 和 w 分别表示特征图的高度和宽度,c 表示通道数。

特征聚合:

这些输入特征通过一个加法操作(+)聚合成一个特征图,其维度仍然是 (h,w,c)。

全局池化:

聚合后的特征图通过全局池化(Global pooling)操作,将其空间维度(即 h 和 w)压缩为一个单一的值,得到一个维度为 (c,) 的向量。

密集层和激活函数:

这个向量通过一个密集层(Dense c′ + BN + ReLU),其中 c′ 是输出维度,BN 表示批归一化(Batch Normalization),ReLU 是激活函数。这一步的目的是生成一个特征表示 (c′,)。

分割注意力:

特征表示 (c′,) 被分割成多个部分,每个部分通过一个密集层(Dense c)进行处理,生成多个特征向量 (ci​,)。

Softmax 操作:

这些特征向量通过一个 r-Softmax 操作,生成一组权重。Softmax 操作将这些特征向量转换为概率分布,表示每个特征的重要性。

加权特征:

这些权重与原始输入特征进行逐元素相乘(×),然后将结果相加(+),得到最终的输出特征图,其维度仍然是 (h,w,c)。

这个结构通过全局池化和密集层生成特征表示,然后通过Softmax操作生成权重,最后将这些权重应用于原始输入特征,以实现对输入特征的注意力机制。图中为了方便可视化,使用了 c=C/K 的表示,其中 C 是总通道数,K 是基数组的数量。


这张图比较了三种不同的神经网络块:SE-Net Block、SK-Net Block 和 ResNeSt Block。每种块都旨在通过不同的方法增强网络的特征提取能力。图中详细展示了这些块的结构和操作流程。

SE-Net Block

输入:特征图尺寸为 (h,w,c)。

操作:

通过一个 1×1 卷积层将通道数减少到 c′。

通过一个 3×3 卷积层进一步处理特征。

再次通过一个 1×1 卷积层恢复通道数到 c。

应用 Split Attention 机制。

最后通过一个加法操作将处理后的特征与原始输入特征相加。

SK-Net Block

输入:特征图尺寸为 (h,w,c)。

操作:

通过一个 1×1 卷积层将通道数减少到 c。

分别通过两个不同大小的卷积核(3×3 和 5×5)处理特征,每个卷积核的输出通道数为 c′,且分组数为 32。

应用 Split Attention 机制。

最后通过一个 1×1 卷积层恢复通道数到 c,并与原始输入特征相加。

ResNeSt Block

输入:特征图尺寸为 (h,w,c)。

操作:

将输入特征分成多个基数组(Cardinal groups),每个基数组包含 r 个特征图。

每个基数组内,特征图被进一步分割成 r 个部分,每个部分通过一个 1×1 卷积层将通道数减少到 c′/k,然后通过一个 3×3 卷积层处理特征。

应用 Split Attention 机制。

将处理后的特征图在每个基数组内进行拼接(Concatenate),然后通过一个 1×1 卷积层恢复通道数到 c。

最后通过一个加法操作将处理后的特征与原始输入特征相加。

总结

SE-Net Block:通过减少和恢复通道数,以及应用 Split Attention 机制来增强特征提取能力。

SK-Net Block:通过使用不同大小的卷积核和 Split Attention 机制来处理特征。

ResNeSt Block:通过将特征图分成多个基数组,并在每个基数组内应用 Split Attention 机制,然后将处理后的特征图拼接和恢复通道数,以增强特征提取能力。

中提到的 Split Attention 机制的详细视图在图 3 中展示,实际实现中使用基数-主视图(cardinality-major view),即具有相同基数组索引的特征图组相邻放置。在补充材料中提到,实际实现中使用基数-主视图可以通过分组卷积和标准 CNN 层进行模块化和加速。


图 4 展示了 ResNeSt 块的 Radix-major 实现方式。Radix-major 实现是将具有相同基数(radix)索引但不同基数组(cardinality)的特征图组物理上相邻放置。这种实现可以使用统一的 CNN 操作符来实现。

以下是图中各部分的解释:

输入层:

输入特征图的尺寸为 (h,w,c)。

特征图分割:

输入特征图被分割成 r 个部分,每个部分对应一个基数组(Cardinal group)。

基数组处理:

每个基数组包含多个特征图,每个特征图通过一个 1×1 卷积层将通道数减少到 c′/kr,然后通过一个 3×3 卷积层进一步处理特征。每个基数组处理后的特征图被拼接(Concatenate)在一起。

全局池化:

拼接后的特征图通过全局池化(Global pooling)操作,将其空间维度(即 h 和 w)压缩为一个单一的值,得到一个维度为 (c′,) 的向量。

密集层和激活函数:

这个向量通过两个密集层(Dense c′′,group = k 和 Dense c7,group = k),其中 c′′ 和 c7 是输出维度,group = k 表示分组数为 k。

Softmax 操作:

这些特征向量通过一个 r-Softmax 操作,生成一组权重。Softmax 操作将这些特征向量转换为概率分布,表示每个特征的重要性。

加权特征:

这些权重与原始输入特征进行逐元素相乘(×),然后将结果相加(+),得到最终的输出特征图,其维度仍然是 (h,w,c)。

输出层:

最后通过一个 1×1 卷积层恢复通道数到 c,并与原始输入特征相加。

这个结构通过将输入特征图分割成多个基数组,每个基数组内进行卷积操作,然后通过全局池化和密集层生成特征表示,再通过Softmax操作生成权重,最后将这些权重应用于原始输入特征,以实现对输入特征的注意力机制。图中展示的 Radix-major 实现方式使得具有相同基数索引但不同基数组的特征图组物理上相邻放置,从而可以使用统一的 CNN 操作符来实现。


相关推荐
Stanford_110640 分钟前
C++中常用的排序方法之——冒泡排序
java·学习·算法·微信小程序·排序算法·微信公众平台·微信开放平台
小菜鸟博士1 小时前
手撕Diffusion系列 - 第十一期 - lora微调 - 基于Stable Diffusion(代码)
网络·人工智能·深度学习·学习·算法·stable diffusion
飞yu流星2 小时前
c++ map/multimap容器 学习笔记
c++·笔记·学习
Long_poem5 小时前
【自学笔记】MySQL的重点知识点-持续更新
数据库·笔记·mysql
Future_yzx9 小时前
算法基础学习——快排与归并(附带java模版)
学习·算法·排序算法
三次拒绝王俊凯11 小时前
记忆力训练day08
学习
Xiaouuuuua12 小时前
多项日常使用测试,带你了解如何选择AI工具 Deepseek VS ChatGpt VS Claude
笔记
学游戏开发的12 小时前
UE求职Demo开发日志#12 完善击杀获得物品逻辑和UI
笔记·游戏引擎·unreal engine
英国翰思教育13 小时前
留学毕业论文如何利用不同问题设计问卷
人工智能·深度学习·学习·算法·学习方法·论文笔记
eggcode13 小时前
【CSS入门学习】Flex布局设置div水平、垂直分布与居中
css·学习