Hire-MLP: Vision MLP via Hierarchical Rearrangement
原始文档:https://www.yuque.com/lart/pa…
这篇文章十分好读,没有简单的单词和句式,从头看到尾十分顺畅。十分喜爱这样的写作格调。
从摘要理解文章
This paper presents Hire-MLP, a simple yet competitive vision MLP architecture via hierarchical rearrangement.
问题:
- 是什么?针对空间 MLP 的简化解决策略。
- 为什么?分而治之,简化解决。
- 如何做?将原有的无差别全局空间 MLP 替换为先部分解决后再对各个区域进行关联。
Previous vision MLPs like MLP-Mixer are not flexible for various image sizes and are inefficient to capture spatial information by flattening the tokens.
本文的目标:
- 去除已经的 MLP 办法对于输出数据尺寸的依赖
- 更无效的捕捉空间信息的形式
Hire-MLP innovates the existing MLP-based models by proposing the idea of hierarchical rearrangement to aggregate the local and global spatial information while being versatile for downstream tasks.
部分和全局空间信息的集成:部分可能依赖卷积操作;在 MLP 的语境下,全局空间信息如果不应用空间 MLP 那又该如何解决呢?难不成是池化操作?——从前面看,这里实际上更相似于 SwinTransformer 的解决形式,先部分范畴内的密集连贯,再对各个区域进行关联。
对于上游工作(宰割检测等)更加通用,这阐明本文的办法会采纳多尺度构造。
那这里对于特色的下采样又是如何解决的?池化?跨步卷积?还是 patch 交融?——从论文中看,应用的是跨步卷积。
Specifically, the inner-region rearrangement is designed to capture local information inside a spatial region_. Moreover, to enable information communication between different regions and capture global context, _the cross-region rearrangement is proposed to circularly shift all tokens along spatial directions.
看来有些相似于 SwinTransformer 的解决,部分解决后,再进行全局的偏移来关联各个区域。
The proposed HireMLP architecture is built with simple channel-mixing MLPs and rearrangement operations, thus enjoys high flexibility and inference speed.
这里的解决仿佛没有提到空间 MLP,那么在部分区域外部是如何解决的?
Experiments show that our Hire-MLP achieves state-of-the-art performance on the ImageNet-1K benchmark. In particular, Hire-MLP achieves an 83.4% top-1 accuracy on ImageNet, which surpasses previous Transformer-based and MLP-based models with _better trade-off for accuracy and throughput_.
次要内容
能够看到,次要改变在于原始的空间 MLP 处,被替换为 Hire Module。
Hierarchical Rearrangement
这里是基于区域进行的解决,所以模块中须要先依照 H 轴和 W 轴进行区块的划分。
这里的重排操作是从两个维度上开展的,一个是沿着高一个是沿着宽。
Inner-region Rearrangement
从图中能够看到,区域内的重排,高方向就是将 H 轴上的相邻层(部分条形区域)重叠到通道 C 维度上,宽方向上解决也是相似,通过重叠到通道上,间接就是用通道 MLP 就能够实现部分区域特色的解决。
这里的想法很有意思。
然而认真思考的话,这里其实能够看做是对于卷积的一种合成。在 pytorch 中,应用 [nn.Unfold](https://pytorch.org/docs/stable/generated/torch.nn.Unfold.html?highlight=unfold#torch.nn.Unfold)
实现卷积操作的解决实际上和此相似。就是通过将部分窗口的数据重叠到通道维度上,之后应用全连贯层解决即可等价于更大的核的卷积操作。
而这里,能够看做是划窗无重叠的解决。说不定这篇后续的工作会尝试应用有重叠的模式。
不过这种形式,倒是更像卷积了。
>>> # Convolution is equivalent with Unfold + Matrix Multiplication + Fold (or view to output shape)
>>> inp = torch.randn(1, 3, 10, 12)
>>> w = torch.randn(2, 3, 4, 5)
>>> inp_unf = torch.nn.functional.unfold(inp, (4, 5))
>>> out_unf = inp_unf.transpose(1, 2).matmul(w.view(w.size(0), -1).t()).transpose(1, 2)
>>> out = torch.nn.functional.fold(out_unf, (7, 8), (1, 1))
>>> # or equivalently (and avoiding a copy),
>>> # out = out_unf.view(1, 2, 7, 8)
>>> (torch.nn.functional.conv2d(inp, w) - out).abs().max()
tensor(1.9073e-06)
另外一点是,这里将部分方形窗口的解决拆分成了 H 和 W 两个不同方向的一维条形窗口。行将 kxk 拆分成 1xk 和 kx1 的模式。
看来卷积模型的各种设计简直曾经将模型构造的根底单元穷尽了吧(^__^)。
Cross-region Rearrangement
而对于跨区域的重排,则是特色沿着 H 轴或者 W 轴进行整体的 shift(torch.roll
)来解决。该操作独自应用仿佛没什么用,然而如果在重排后再后面设计的区域内的解决,那么就恰好实现了部分区域的跨窗口。
然而这里有个问题须要留神,能够看到,这里的部分区域的解决仅仅蕴含在窗口特色偏移之后,而没有思考对偏移之前的特色进行部分解决。更正当的模式应该是 窗口外部解决 -> 窗口特色偏移 -> 窗口外部解决 -> 偏移的窗口特色地位复原 -> 窗口外部解决(可选)
,这样的穿插解决仿佛才能够更好的笼罩到更广的空间范畴,不像当初,窗口解决始终对应的都是固定的区域。
试验后果
融化试验次要探讨了以下几点:
- 划分的窗口数量:默认是沿着 H 轴和 W 轴划分的窗口宽度是一样的。更小的窗口会更加强调部分信息。并且试验中,经验性的在更浅层中应用更大的窗宽,来取得更大的感触野。
能够看到,当逐步增大窗宽的时候,性能会有降落。作者揣测随着区域大小的减少,瓶颈构造中可能会有一些信息失落。
- 跨窗口偏移的步长 s 的探讨。
能够看到,浅层窗口偏移大一点成果会好。或者是因为增大浅层特色的感触野能够带来肯定的好处。
- 针对不同 padding 模式的探讨。这里是因为对于 224 的输出,stage4 时特色大小为 7 ×7,这不能实现窗口的平均划分,所以在本文中无重叠的窗口的设定下,是须要加 padding 的。这里探讨了几种策略。
- Hire Module 中不同分支的重要性。
能够看到,区域外部的解决这个局部是十分重要的。其实也能够了解。如果没有了这样的部分操作。那么简略的偏移跨窗口偏移对于通道 MLP 而言也是没有什么意义的。因为原本就是点操作。
- 不同的跨窗口通信的模式。
这里比拟了偏移(能够保留肯定的相邻关系,即绝对地位信息)和 shufflenet 那样的组间 shuffle。能够看到绝对地位信息还是比拟重要的。
链接
- Hire-MLP: Vision MLP via Hierarchical Rearrangement: https://arxiv.org/pdf/2108.13341.pdf