主要工作
- 结构上的设计
- 使用卷积tokenizer来从图像中提取token特征,空间下采样1/4
 - tokenization后使用一个纯卷积结构再下采样1/2
 - 替换空间mlp为通道mlp和空间卷积的组合,这可以打破对于输入维度的限定(卷积的优势)
 - 引入多尺度结构,使用跨步卷积实现下采样
 
 - 卷积的引入了补充了空间上的交互
 整体结构具有更少的参数量(这主要还是因为以上卷积策略的应用)
关键图示
核心代码
class ConvMLPStage(Module):def __init__(self,embedding_dim,dim_feedforward=2048,stochastic_depth_rate=0.1):super(ConvMLPStage, self).__init__()self.norm1 = LayerNorm(embedding_dim)self.channel_mlp1 = Mlp(embedding_dim_in=embedding_dim, hidden_dim=dim_feedforward)self.norm2 = LayerNorm(embedding_dim)self.connect = Conv2d(embedding_dim,embedding_dim,kernel_size=(3, 3),stride=(1, 1),padding=(1, 1),groups=embedding_dim,bias=False)self.connect_norm = LayerNorm(embedding_dim)self.channel_mlp2 = Mlp(embedding_dim_in=embedding_dim, hidden_dim=dim_feedforward)self.drop_path = DropPath(stochastic_depth_rate) if stochastic_depth_rate > 0 else Identity()def forward(self, src):src = src + self.drop_path(self.channel_mlp1(self.norm1(src)))src = self.connect(self.connect_norm(src).permute(0, 3, 1, 2)).permute(0, 2, 3, 1)src = src + self.drop_path(self.channel_mlp2(self.norm2(src)))return src
链接

