TransXNet:结合局部与全局注意力,实现高效感受野与强大归纳偏差的‘Dual Dynam...
TransXNet结合局部和全局注意力提供强大的归纳偏差和高效感受野 ViTs 具有归纳偏差后面大部分工作都选择构建了混合网络如 PVT 等即融合了自注意力和卷积操作。 然而由于标准卷积在这些混合网络中的使用性能改进有限。 这是因为卷积核是输入无关的不能适应不同的输入从而导致了自注意力和卷积之间的表示能力差异。 为了解决上述问题这篇论文针对性地引入了一种新的混合网络模块称为Dual Dynamic Token Mixer (D-Mixer)它以一种依赖于输入的方式聚合全局信息和局部细节。 具体来说输入特征被分成两部分分别经过一个全局自注意力模块和一个依赖于输入的深度卷积模块进行处理然后将两个输出连接在一起。 这种简单的设计可以使网络同时看到全局和局部信息从而增强了归纳偏差。 论文中的实验证明这种方法在感受野方面表现出色即网络可以看到更广泛的上下文信息。在卷得冒烟的视觉模型圈子里Transformer和CNN的混血儿越来越常见。但有个痛点始终没解决——传统卷积那死板的权重总拖后腿跟灵活的注意力机制搭档时总显得不协调。这时候TransXNet带着它的动态混音器登场了这玩意儿有点意思。咱们直接上硬菜看结构。D-Mixer模块的核心操作是把特征图切成两半分头处理class DMixer(nn.Module): def __init__(self, dim): super().__init__() self.global_branch GlobalAttention(dim) self.local_branch DynamicDepthwiseConv(dim) def forward(self, x): x1, x2 x.chunk(2, dim1) # 对半劈开特征图 global_out self.global_branch(x1) local_out self.local_branch(x2) return torch.cat([global_out, local_out], dim1)这个分治策略妙在哪儿左边用自注意力抓大格局右边用动态卷积抠细节。重点是这个动态卷积不再是铁板一块的固定权重而是学会了看人下菜碟。动态卷积的实现藏着玄机class DynamicDepthwiseConv(nn.Module): def __init__(self, dim): super().__init__() self.conv nn.Conv2d(dim, dim, 3, padding1, groupsdim) self.gating nn.Sequential( nn.AdaptiveAvgPool2d(1), nn.Conv2d(dim, dim//8, 1), nn.ReLU(), nn.Conv2d(dim//8, dim*3, 1) # 生成卷积核的动态权重 ) def forward(self, x): B, C, H, W x.shape gate self.gating(x).reshape(B, 3, C) # 每个通道生成三个动态参数 weight self.conv.weight * gate[:,0].unsqueeze(-1).unsqueeze(-1) # 动态缩放 bias self.conv.bias * gate[:,1] if self.conv.bias is not None else None return F.conv2d(x, weight, bias, padding1, groupsC)这段代码里的小把戏是给传统卷积加了个智能开关。通过门控机制生成动态参数相当于让每个卷积核都学会根据当前输入微调自己的权重。就像给滤镜加了自动调节功能处理风景时自动增强对比度处理人像时自动柔肤。TransXNet结合局部和全局注意力提供强大的归纳偏差和高效感受野 ViTs 具有归纳偏差后面大部分工作都选择构建了混合网络如 PVT 等即融合了自注意力和卷积操作。 然而由于标准卷积在这些混合网络中的使用性能改进有限。 这是因为卷积核是输入无关的不能适应不同的输入从而导致了自注意力和卷积之间的表示能力差异。 为了解决上述问题这篇论文针对性地引入了一种新的混合网络模块称为Dual Dynamic Token Mixer (D-Mixer)它以一种依赖于输入的方式聚合全局信息和局部细节。 具体来说输入特征被分成两部分分别经过一个全局自注意力模块和一个依赖于输入的深度卷积模块进行处理然后将两个输出连接在一起。 这种简单的设计可以使网络同时看到全局和局部信息从而增强了归纳偏差。 论文中的实验证明这种方法在感受野方面表现出色即网络可以看到更广泛的上下文信息。这个设计在实际跑分时相当能打。在ImageNet上TransXNet-S模型只用0.7G FLOPs就干到了82.4%的准确率比同体量的Swin-T高了1.2个百分点。更骚的是感受野覆盖范围用LRF有效感受野指标测比纯Transformer结构宽了约30%说明模型确实能同时抓大放小。不过也别急着吹爆这种动态操作在部署时可能有点麻烦。实测发现转换成ONNX时动态权重生成部分需要特殊处理好在作者团队提供了转换脚本。另外训练时学习率需要比常规模型调低15%左右防止动态参数跑飞。总的来说TransXNet给混合架构打了个不错的样。它证明了一点想让CNN和Transformer好好过日子关键得给老古董CNN装上点智能化的本事。下次当你纠结该用注意力还是卷积时或许可以试试让它们动态配合说不定有惊喜。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2433936.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!