尊敬的作者您好,
我在将《FADC: Frequency-Adaptive Dilated Convolution for Semantic Segmentation》中的 FADC 算子集成到基础 Vision Transformer(ViT)时,发现整体运行/推理速度明显变慢。我的实现中使用了 lp_type='avgpool',主要替换位置包括:
PatchEmbedding 模块中的 self.proj = nn.Conv2d(in_channels, emb_size, kernel_size=patch_size, stride=patch_size);
Multi-Head Attention 模块相关的卷积/投影位置,我在attention和MLP中使用kernel_size=1的2D卷积代替线性映射(然后以 FADC 代替原有卷积算子,当kernel_size=1时,我去掉了offset和mask矩阵的计算,仅包含FrequencySelection进行频域融合以及OmniAttention学习adaptive_weight,然后使用
x= F.conv2d(x_, adaptive_weight, bias=bias, stride=(1, 1),
padding=(1, 1) if isinstance(Pad, nn.Identity) else (0, 0),
dilation=(1, 1), groups= B))
来进行自适应权重的卷积操作。
想请教:
1.FADC 在 ViT 这类 Transformer 结构中是否需要特别的参数或改动(如 k_list、频段划分方式、groups/通道设置等)来避免显著的速度回退?
2.使用 avgpool 作为频段划分是否会在小 patch 场景下引入额外开销或不利的内存访问模式?是否更建议在 ViT 中改用 laplacian/fft 方案或其他方案,或仅在特定层(如 FFN/局部卷积处)使用 FADC?
3.在多头注意力路径上替换为 FADC 是否会破坏原有的张量并行/算子融合,从而导致下降?若是,是否有推荐的替换位置?
4.是否有您建议的高效实现要点(如 CUDA kernel/算子融合、合理的 k_list 与 dilation 范围、batch设置)?
非常感谢您提供可能原因与调参建议!
尊敬的作者您好,
我在将《FADC: Frequency-Adaptive Dilated Convolution for Semantic Segmentation》中的 FADC 算子集成到基础 Vision Transformer(ViT)时,发现整体运行/推理速度明显变慢。我的实现中使用了 lp_type='avgpool',主要替换位置包括:
PatchEmbedding 模块中的 self.proj = nn.Conv2d(in_channels, emb_size, kernel_size=patch_size, stride=patch_size);
Multi-Head Attention 模块相关的卷积/投影位置,我在attention和MLP中使用kernel_size=1的2D卷积代替线性映射(然后以 FADC 代替原有卷积算子,当kernel_size=1时,我去掉了offset和mask矩阵的计算,仅包含FrequencySelection进行频域融合以及OmniAttention学习adaptive_weight,然后使用
x= F.conv2d(x_, adaptive_weight, bias=bias, stride=(1, 1),
padding=(1, 1) if isinstance(Pad, nn.Identity) else (0, 0),
dilation=(1, 1), groups= B))
来进行自适应权重的卷积操作。
想请教:
1.FADC 在 ViT 这类 Transformer 结构中是否需要特别的参数或改动(如 k_list、频段划分方式、groups/通道设置等)来避免显著的速度回退?
2.使用 avgpool 作为频段划分是否会在小 patch 场景下引入额外开销或不利的内存访问模式?是否更建议在 ViT 中改用 laplacian/fft 方案或其他方案,或仅在特定层(如 FFN/局部卷积处)使用 FADC?
3.在多头注意力路径上替换为 FADC 是否会破坏原有的张量并行/算子融合,从而导致下降?若是,是否有推荐的替换位置?
4.是否有您建议的高效实现要点(如 CUDA kernel/算子融合、合理的 k_list 与 dilation 范围、batch设置)?
非常感谢您提供可能原因与调参建议!