MLP-Mixer: An all-MLP Architecture for Vision
论文地址:
https://arxiv.org/abs/2105.01601
MLP-Mixer:一种仅基于多层感知机(MLP)的体系结构!可比肩并旨在超越成熟的CNN和大火的视觉Transformer的阵营工作
可以不使用CNN和transformer,仅仅依靠MLP来解决复杂数据集的分类任务吗?
《MLP-Mixer: An all-MLP Architecture for Vision》为了解决上诉问题,它仅仅依赖于基础矩阵乘法运算和数据的布局变换 (reshapes and transpositions) ,以及非线性层。结果表明,尽管Mixer仅仅使用了MLP层,但是其结果却是极具竞争力的。作者在大型数据集 (约1亿=100M张图片,对比 ImageNet 是1.28M训练集,5万验证集和10万测试集) 上训练以后可以在ImageNet 的验证集上达到87.94% 的准确率 (对比 EfficientNet-B7是84.7%, ViT-B是77.9% );若在 稍微小一点的数据集 (约1-10M张图片) 上训练,也能达到接近CNN架构的性能。
由此可见,仅仅靠着MLP真的可以解决复杂数据集的分类任务,而且和CNN,Transformer模型的性能相当。
1.MLP-Mixer是如何处理输入图片的?
对于维度为HW3的图片,基于MLP的 MLP-Mixer将输入的图片分块(patch),每个patch的大小是p* p* 3,一共可以分成s=(HW/p** 2)个patch给展平(flatten),就展成一位向量,得到一个长度为3p** 2的向量。s个这样的向量拼在一起就结合成一个维度(s,3p** 2)的张量,再把张量通过线性映射将第2维的大小为c成为hidden dimension。这样最后我们就得到了一个维度是 (s,c)=patcheschannels的张量。它由s个1c的向量组成,每一个向量,我们称为1个to ken。这样的张量才是后续MLP-MiXer模型的真正输入
注:1×1卷积可以结合不同channels的信息,但不能结合不同空间位置的信息。
MLP-MiXer模型的真正输入的张量,不仅混合各种channels之间的信息(将每一块的图片信息flatten成一维向量),而且混合不同空间位置的信息(分块)。
2.MLP-MiXer架构
有了上面的铺垫再来理解MLP-Mixer的结构就很简单了。如上图2所示,Mixer 由大小相同的多个层和一个分类头组成。每个层由 2 个 MLP 块组成,其中,第一个块是 token-mixing MLP 块,第二个是 channel-mixing MLP 块。其中分类头就包括Global Average Pooling和一个全连接层。