一、RepMLP
原文链接:https://arxiv.org/pdf/2105.01883.pdf
RepMLP(re-parameterized MLP)是考虑到FC层比起卷积来说不擅长捕捉局部信息的特点而提出的。其训练和推断是不同的。
训练阶段由全局感知器,partition感知器和局部感知器组成。
全局感知器
将feature map分割为partition。为了捕捉partition之间的交互,使用平均池化处理每个partition,输入到BN和2层的MLP,然后reshape,加到partition map上。
partition感知器
由一个FC层和BN层组成,以partition map作为输入。FC层为类似group卷积的group FC以减少参数。
group FC在编程时采用group 卷积实现,步骤如下:(1)将reshape为空间维度为的feature map;(2)使用分组的卷积处理;(3)将处理后的feature map reshape为。即:
RS表示reshape,gMMUL表示group FC。为group FC的权重矩阵(大小应为),表示转换的group卷积核(个核,每个核大小为),和分别为FC层输入和输出的维度。且应有,,。
局部感知器
将partition map通过多个并行的卷积层(保持分辨率大小和输入一致,后接BN),卷积组数应和Partition感知器中相同
最后所有卷积输出和Partition感知器的输出相加,还原形状,得到最终输出。
推断阶段会把RepMLP转化为3个FC层。
关键是两步:
1.将BN merge到之前的卷积中:
2.将卷积转化为FC层(为维的单位矩阵):
其中为padding,为卷积核,为FC层的权重。
这样可以把FC3和局部感知器的卷积合并。
二、ResMLP
原文链接:https://arxiv.org/pdf/2105.03404.pdf
Res表示residual。
模型结构
首先将原图分割为个patch,然后通过线性层得到维特征,输入到ResMLP中。图中的A为按列的仿射变换;T为转置。
Residual Multi-Perceptron层
线性层+前馈层。没有使用LN,而采用对每一列进行仿射变换:
这个变换在每个残差块进行两次(两次分别称为为pre和post)。它们在推断时会整合到线性层。
前馈网络和Transformer一样,为双层MLP,激活函数变为GELU。
其中为线性层权重,为维,为维,为维。
三、S²-MLPv2
原文链接:https://arxiv.org/pdf/2108.01072.pdf
S²-MLP
patch embedding层+数个S²-MLP块+分类头
patch embedding层将图像分割成的patch,然后通过FC得到维向量。
S²-MLP块
4个作用于通道维度的MLP+空间移位层。
空间移位:将沿通道方向分成4份,然后沿长和宽的正负方向分别平移1个单位。
split attention
设个大小为的feature map;其中为patch数,为通道数。沿空间维度进行求和得到维向量:
其中为全为1的行向量。
然后通过MLP把维度变为(,为GELU),再reshape为矩阵,沿第一维度softmax后得到,按照下面的公式生成新的feature map。
其中为按元素乘法。
S²-MLPv2:patch embedding层+数个S²-MLPv2块+分类头
S²-MLPv2块包含S²-MLPv2 component和channel-mixing MLP (CM-MLP)。CM-MLP结构和前面MLP-Mixer(见7种视觉MLP整理(上)中的二)中的结构相同。
S²-MLPv2块结构
将的维度变为。然后分为3个维度为的feature map,其中两个按下图做空间移位,另一个不变。
然后将3个feature mapreshape为的矩阵,通过split attention后再通过。