模块出处
[ICLR 25 Submission] [link] UltraLightUNet: Rethinking U-shaped Network with Multi-kernel Lightweight Convolutions for Medical Image Segmentation
模块名称
Multi-Kernel Inverted Residual (MKIR)
模块作用
超轻量编码器块
模块结构
模块特点
- 类Inverted Residual操作。在MKDC之前,使用一组Conv-BN-ReLU提升通道数。在MKDC之后,使用一组Conv-BN降低或维持通道数。该操作最早在mobilenet v2中实现。
- 使用不同kernel size的深度卷积以进行多尺度特征提取。深度卷积相比于标准卷积而言计算量更小。
- 使用ReLU6激活函数替代ReLU。相比于ReLU,ReLU6会将结果约束在0~6之间,更适用于轻量级的低精度(如int8)计算。
- 多个branch的特征使用add进行融合而非concat。concat会增大通道数带来更大的计算开销。
- 融合特征使用channel shuffle以鼓励不同branch特征间的进一步交互,类似于1×1卷积。
模块代码
import torch
import torch.nn as nn
import torch.nn.functional as F
def gcd(a, b):
while b:
a, b = b, a % b
return a
def channel_shuffle(x, groups):
batchsize, num_channels, height, width = x.data.size()
channels_per_group = num_channels // groups
x = x.view(batchsize, groups,
channels_per_group, height, width)
x = torch.transpose(x, 1, 2).contiguous()
x = x.view(batchsize, -1, height, width)
return x
class MultiKernelDepthwiseConv