2012年,AlexNet横空出世,推动深度学习快速发展,带动AI的第三波浪潮,转眼已经十年弹指一挥间。

https://subscription.packtpub.com/book/data/9781789614381/5/ch05lvl1sec17/evolution-of-cnn-architectures

十年来,计算机视觉(CV)突飞猛进,VGGNet,GoogLeNet/Inception,ResNet、ResNeXt,DenseNet,MobileNet 和 EfficientNet等一大批ImageNet竞赛的年度冠军等优秀模型蓬勃发展,你方唱罢我登场,精彩纷呈,卷积神经网络CNN作为图像处理的标配卷过了AI的大半边天。

直到最近两年,自然语言处理 (NLP) 好像和CV是两条平行线,各自相对独立的发展。RNN和CNN是教科书中两个独立的章节,分别对应自然语言的序列(Sequence)和图像局部特征的特点。2017年,Google在NLP领域发表了Attention is all you need[1],提出基于自注意力(self-attention)的Transformer,当时,CV界被微软研究院He kaiming的ResNet打破人类分类错误率下限而激动不已,很少有人意识到CNN的“大厦将倾”的危险,正如经典物理学在20世纪初晴空万里的两朵乌云,看似不温不火NLP算法并将在数年后“全面碾压“看似更为“成熟”的CV领域,并显示了一统江湖的野心。

BERT 左2 《芝麻街》系列论文

2018年的NLP领域注定不凡,谷歌的Jacob Devlin等人提出了基于Transformer的BERT[2](Bidirectional Encoder Representations from Transformers),BERT的B表示双向,了解NLP的朋友都知道“语言模型” (Language Model),根据一句话左边的词预测右边的词最有可能是哪个;BERT将这个预测游戏变成了自监督的“完形填空”,不再预测最右侧的词,而是预测句子中的任何位置的词,可同时利用将该位置左右两边(Bidirectional)的词进行预测。随着基于Transformer的BERT在NLP的各个子任务上“屠榜”,隔壁已经卷到无以复加的CV圈有点坐不住了。

ViT: Vision Transformer

2020年Transformer在CV领域一炮打响,谷歌提出的Vision Transformer (ViT)[3] (An Image is Worth 16x16 Words,模仿“An Image is Worth a thousand Words”)再次横空出世,只是简单的将图片切成16X16的patch,扔到原封不动的NLP的Transformer中,结果竟然就一骑绝尘,表现超过了一众沉淀了多年的CNN,最神奇的是,完全不考虑图像的特点,把图像打成patch后就按NLP的Sequence的方法处理!

ViT的核心思想是将图片看成一系列16X16的patch序列,看来处理图像和自然语言并没有太大差别,在ViT/Transformer看来,一切都不过是Sequence而已,Transformer如同“降龙十八掌”,不管你是CV还是NLP的任务,都是一招制敌!不过 ViT 严重依赖大量训练技巧,包括花式数据增强等,但ViT毕竟是开创性工作,不宜苛求,总是要留点饭给后人吃的嘛(挖了很多大坑,比如NLP/CV多模态)。

Long Range Arena: A Benchmark for Efficient TransformersViT

恐怕是CV界自AlexNet(2012)以来最大的突破(之前各种CNN架构都是改良),之后各种XX-Former层出不穷(Long Range Arena: A Benchmark for Efficient Transformers[4]),结构上相对简单的CNN就像是过气的曾经大牌明星被拍的灰头土脸,不知道哪天才能恢复往日的荣光。

Swin Transformer

2021 年年中,微软发表了一款基于窗口移动(Shift Window)的Swin Transformer[5],窗口移动有点CNN的感觉又回来了,窗口移动能够促进相邻patch之间交互,也是个屠榜级的存在,文章自称可以作为Backbone,大家知道,Backbone都是史上留名的经典架构。

AE https://towardsdatascience.com/applied-deep-learning-part-3-autoencoders-1c083af4d798

类似于NLP领域的BERT,自监督学习最近两年风头正劲,虽然这个概念并不新,2006年,Hinton老爷子在深度学习的三篇开山之作之一 Reducing the Dimensionality of Data with Neural Networks[6]就展示了Autoencoder优于PCA的数据表达/压缩能力,Autoencoder通过调整参数,力求使输出等于输入。十多年后,idea还是那个idea,无需人工标注的自监督学习再次流行。Autoencoder的Auto并不是“自动”的意思,而是“自”的意思,类似用法还有自回归Autoregressive,自闭症Autism等。Autoencoder一般由encoder和decoder两个部分组成,两者往往是对称的(下面也有不对称的例子),比如医疗影像分割的U-Net[7]是个典型的对称结构。

VAE https://medium.com/mlearning-ai/a-crash-course-on-vaes-vq-vaes-and-vae-gans-3fdcc40b059e

2013年出现的VAE(Variational Autoencoder)[8]恐怕是最著名的生成式模型(Generative Model)了,VAE和AE的差异在于VAE学到的是隐空间的概率分布,然后再对该概率分布进行采样,生成输出,比AE多了学习概率分布参数这一步。

生成式模型长期不温不火是因为表现一直比常见的判别式模型要弱一点,但历史总是用来被打破的!

2018年之后,NLP领域自监督的BERT的一统江湖。随着ViT将Transformer引入CV领域,CV领域是否也会产生一种类似于BERT这样的一种屠榜的自监督生成式模型呢?

MAE的效果

2021年底,kaiming大神的MAE[9](Masked Autoencoder)来了,和VAE一样,MAE是个生成模型,它的Encoder和Decoder是不对称的。所谓Masked就是“掩盖”,上图80%的patch都被盖住 (左),MAE还原的效果(中)和ground truth(右)的对比。感觉比我厉害多了,我很难看出原来的被盖住图像是啥。

MAE

MAE的encoder和decoder都是Transformer block,但是encoder只处理不被掩盖的patch,由于大部分patch都被掩盖了,所以计算量相对要小很多。大概2017年左右,当时还在微软研究院的kaiming提出的ResNet解决了深度学习的层数限制问题,残差连接成为了至今仍被最广泛应用的技术之一,Swin Transformer中两个前后连续的block中分别都有两个残差连接(指向  的箭头),残差连接在今天的深度学习中几乎无处不在,ResNet的引用量已破10万+。现在加盟Facebook (FAIR,Facebook AI Research)的kaiming看来也转战Transformer了,随着Facebook改名为Meta,FAIR是不是也要改名了,MAIR?

Swin Transformer 两个前后连续的block

ConNeXt

同样还是FAIR,最近从CNN发起了绝地反击,A ConvNet for the 2020s一文提出ConvNeXt[10],借鉴了 Vision Transformer 和 CNN 的成功经验,构建一个纯卷积网络,其性能超越了高大上(复杂的) 基于Transformer 的先进的模型,荣耀归卷积网络!但仔细看,好像也没又什么大的idea方面的创新,只是一堆Trick。但至少回应了“廉颇老矣,尚能饭否”的质疑,“饮食不弱于从前”!

ConvNeXt 采用标准神经网络 ResNet-50 并对其进行现代化改造,以使设计更接近ViT,使用 AdamW 优化器,使用更多 epoch 对其进行训练,应用花式数据增强技术和正则化(高斯误差线性单元GELU代替Relu),使用大卷积核和Inverse Bottleneck(中间粗两头细)。

ConvNeXt的出现证明,并不一定需要Transformer那么复杂的结构,只是对原有CNN的技术和参数优化也能达到SOTA,未来CV领域卷积和Transformer谁主沉浮?

虽然ConvNeXt扳回一城,但未来应该也不是ConvNeXt is all you need! Transformer的价值不会被抹杀。

从Swin和PVT(Pyramid Vision Transformer)[11]可以看出,仅仅有注意力不太够用,(小patch)计算成本指数增长 O(n^2) ,大patch的颗粒度比较粗,不能满足语义分割等dense prediction的要求,而卷积具有提取本地特征计算成本低的优点,Transformer则更擅长于长程(long range)的全局特征(计算量大)处理,这恰是CNN的弱点(不杠空洞卷积哈),两者具有互补性;而ConvNext则借鉴了Transform的一些参数设置(如Block的数量)。

个人观点:未来CV的发展方向可能是ConvNet在前面对底层的特征进行抽取,后面接Transformer对全局特征处理,两者各司其职,并进行相应的结构简化。