前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用全连接层替代掉卷积 -- RepMLP

用全连接层替代掉卷积 -- RepMLP

作者头像
Mezereon
发布2021-06-01 20:53:02
9420
发布2021-06-01 20:53:02
举报
文章被收录于专栏:MyBlogMyBlog

用全连接层替代掉卷积 -- RepMLP

这次给大家介绍一个工作, “RepMLP: Re-parameterizing Convolutions into Fully-connected Layers for Image Recognition”,是最近MLP热潮中的一篇有代表性的文章。

其github链接为https://github.com/DingXiaoH/RepMLP,有精力的朋友可以去跑一跑,看一看代码。

我们先回顾一下,先前的基于卷积网络的工作。之所以卷积网络能够有效,一定程度上是其对空间上的信息进行捕捉,通过多次的卷积提取到了空间上的特征,并且基本上覆盖了整张图片。假如我们将图片“拍平”然后用MLP进行训练,则失去了空间中的特征信息。

这篇文章的贡献在于:

  • 利用了全连接(FC)的全局能力(global capacity) 以及 位置感知 (positional perception),将其应用到了图像识别上
  • 提出了一种简单的、无关平台的 (platform-agnostic)、可差分的算法,来将卷积和BN合并成FC
  • 充分的实验分析,验证了RepMLP的可行性

整体框架

整个RepMLP分为两个阶段:

  • 训练阶段
  • 测试阶段

针对这两个阶段,如下图所示:

framework

看上去有些复杂,我们先单独看看训练阶段的部分。

首先是全局感知(global perceptron)

global

主要分为两条路径:

  • 路径1: 平均池化 + BN + FC1 + ReLU + FC2
  • 路径2: 分块

我们记输入张量的形状为

(N,C,H,W)
(N,C,H,W)

路径1

对于路径1,首先平均池化将输入转换成

(N,C,\frac{H}{h},\frac{W}{w})
(N,C,\frac{H}{h},\frac{W}{w})

, 相当于缩放,然后绿色的部分表示将张量“拍平”

也就是变成

(N,\frac{CHW}{hw})
(N,\frac{CHW}{hw})

形状的张量,经过两层FC层之后,维度仍然保持,因为整个FC就相当于左乘一个方阵。

最终对

(N,\frac{CHW}{hw})
(N,\frac{CHW}{hw})

形状的输出进行reshape,得到一个形状是

(\frac{NHW}{hw}, C, 1, 1)
(\frac{NHW}{hw}, C, 1, 1)

的输出

路径2

对于路径2,直接将输入

(N,C,H,W)
(N,C,H,W)

转换成

\frac{NHW}{hw}
\frac{NHW}{hw}

(h,w)
(h,w)

的小块,其形状也就是

(\frac{NHW}{hw},C,h,w)
(\frac{NHW}{hw},C,h,w)

最后将路径1和路径2的结果做加法,由于维度对不上,不过在PyTorch中,会进行自动的copy操作,也就是所有的

(h,w)
(h,w)

大小的块的每一个像素,都会加上一个值。

这一个部分的输出形状为

(\frac{NHW}{hw},C,h,w)
(\frac{NHW}{hw},C,h,w)

然后进入局部感知分块感知的部分,如下图所示:

local

对于分块感知(partition perceptron)

首先,将4维的张量拍成2维,即

(\frac{NHW}{hw},C,h,w)
(\frac{NHW}{hw},C,h,w)

变成

(\frac{NHW}{hw},Chw)
(\frac{NHW}{hw},Chw)

然后FC3是一个参照 分组卷积(groupwise conv) 的操作,其中

g
g

是组的数目

原本FC3应该是

(Ohw,Chw)
(Ohw,Chw)

的一个矩阵,但是为了降低参数量,使用了分组的FC(groupwise FC)

分组卷积本质上就是对通道进行分组,我举个例子: 假设输入是一个

(C,H,W)
(C,H,W)

的张量,如果我们希望输出是

(N,H',W')
(N,H',W')

通常我们的卷积核形状为

(N,C,K,K)
(N,C,K,K)

,其中

K
K

是卷积核的大小 我们对通道

C
C

进行分组,每

g
g

个通道为一组,那么就有

\frac{C}{g}
\frac{C}{g}

个组 对于单独每一个组,进行卷积操作,我们的卷积核形状就会缩小成

(N,\frac{C}{g},K,K)
(N,\frac{C}{g},K,K)

在这里,分组FC也就是对通道数

Chw
Chw

进行分组然后每一个组过FC,最终得到

(\frac{NHW}{hw}, O,h,w)
(\frac{NHW}{hw}, O,h,w)

的张量

再经过BN层,张量形状不变。

而对于局部感知(local perceptron)

local perceptron

类似FPN的思想,进行了不同尺度的分组卷积,得到了4个形状为

(\frac{NHW}{hw}, O,h,w)
(\frac{NHW}{hw}, O,h,w)

的张量

把局部感知的结果和分块感知的结果相加,就得到了

(N,O,H,W)
(N,O,H,W)

的输出

到这里你可能会问,这不是还存在着卷积吗?

这只是训练阶段,在推理阶段,便会把卷积都扔掉,如下图所示:

inference

至此,我们用MLP替代掉了一个卷积的操作

实验分析

首先是一系列消融实验(Ablation Study), 在CIFAR-10数据集上进行测试

cifar-10-ablation

A条件是在推断的时候保留BN层和conv层,结果没有变化

D,E条件分别是用一个9x9的卷积层替代掉FC3和整个RepMLP

Wide ConvNet是将本来的网络结构的通道数翻倍

结果说明局部感知和全局感知的重要性,同时推断的时候去除卷积部分没有影响,实现了MLP的替换

然后作者替换掉了ResNet50的一些block,进行了测试

c4-only

只替换掉倒数第二个残差块,参数量多了一些,但是正确率有小幅度的增加

倘若我们完全替换掉更多的卷积部分

replace

参数量会增加,正确率也会有小幅度的增加

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 用全连接层替代掉卷积 -- RepMLP
    • 整体框架
      • 实验分析
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档