视觉 Transformer 的演进之路:从 CNN 进化到 VIT
引言计算机视觉的核心就是从图像里提取边缘、纹理、形状这些关键信息而它的发展自始至终都围绕着“怎么更高效地学习图像特征”这件事。早期像Sobel算子、Canny边缘检测这些方法都得靠人工设计规则面对复杂的真实场景根本扛不住后来人们引入了SVM、k近邻这类机器学习算法但还是得人工做特征工程传统的人工神经网络ANN碰到高清图像时光是输入神经元就有几百万个这会让权重参数暴涨训练起来的成本高到根本承受不起。就在这样的背景下卷积神经网络CNN应运而生而且在计算机视觉领域占据主导地位十多年。后来Transformer在自然语言处理NLP领域大获成功能捕捉全局特征的视觉TransformerViT也慢慢成了研究热点。这篇文章就拆解一下CNN和ViT的核心架构对比两者的关键差异再结合实战案例帮你彻底搞懂ViT到底是怎么工作的。一、CNN统治十年的视觉架构CNN能成为计算机视觉领域的“顶流”核心原因就是它能自动学习图像特征而且处理高清图像时计算效率很高。它的经典架构能拆成6个核心层1.1 CNN核心架构解析输入层直接接收原始图像数据是以多维数组的形式存在的比如64×64×3的图像就对应64宽、64高、3个色彩通道。卷积层这是CNN的核心部分。我们可以把卷积核理解成一个个过滤器它会在图像上滑动对图像的局部区域做卷积操作这样就能捕捉到边缘、纹理这些基础特征。不过卷积操作的输出是线性的还得靠激活函数加入非线性因素。激活层ReLU用的是修正线性单元ReLU公式是f(x) max(0, x)简单说就是把卷积层输出的负值都变成0这样能减少无效激活让网络运行更高效。池化层主要是对激活后的特征图进行降维最常用的就是2×2窗口的最大池化Max Pooling。这么做既能降低计算的复杂度又能把关键特征保留下来。全连接层和传统的ANN一样把前一层所有的神经元都和后一层的神经元连起来把提取到的所有特征整合到一起为最后做分类做好准备。输出层输出图像的分类结果训练的时候会通过损失函数计算预测的误差再不断优化模型的精度。整个过程充分利用了图像的空间结构通过“分层学习特征”自动提取有用的信息但CNN也有自己绕不开的短板。1.2 CNN的“先天局限”难抓全局特征CNN的卷积核只能关注到像素的局部区域而且权重共享机制让同一个卷积核作用在整张图像上——这两个特点虽然能提高模型的泛化能力却限制了它捕捉全局特征的能力。简单说就是CNN擅长学习局部关联的特征比如相邻像素组成的边缘但如果碰到需要跨区域关联的全局模式比如图像里“车头”和“车轮”的整体关系它的学习效率就会大打折扣。这种“归纳偏置”在普通的视觉任务里是优势但在需要关注全局关系的场景下反而会拖低性能。二、ViT借势NLP的视觉新范式ViT的核心思路很简单就是把NLP里Transformer的核心逻辑搬到图像领域——先把图像拆成一个个类似“单词”的补丁Patch再通过自注意力机制捕捉全局特征。咱们以224×224像素的图像为例看看ViT是怎么处理的2.1 ViT核心架构拆解补丁嵌入Patch Embedding先把224×224的图像切成若干个16×16的等大补丁每个补丁就相当于NLP里的“单词令牌Token”。接着把每个补丁展平成一维向量再通过线性投影层把这个向量转换成固定长度的D维嵌入向量比如16×16×3的补丁最后会转换成D维向量。位置编码Positional EncodingTransformer本身没法感知补丁在图像里的位置所以得给每个补丁加上位置嵌入信息。要是少了这一步模型会把所有补丁当成杂乱无章的集合根本没法还原图像的空间结构。Transformer编码器把带有位置编码的补丁嵌入序列输入Transformer编码器通过自注意力机制让每个补丁都能和其他所有补丁建立关联这也是ViT和CNN最核心的区别ViT从一开始就能捕捉全局特征而不是局限在局部。分类令牌CLS Token在补丁序列的最前面加一个可学习的CLS令牌训练的时候它会通过自注意力把所有补丁的信息聚合起来。最后模型会根据CLS令牌的向量表示通过全连接层完成分类。三、CNN vs ViT核心差异一次看清虽然CNN和ViT都用来做图像分类但从输入处理到特征学习两者有着本质上的区别四、实战演示用ViT做汽车零部件分类我们用PyTorch的TorchVision库借助预训练的ViT-B/16模型来完成汽车零部件分类任务——这个数据集里包含40类汽车零部件整个核心流程很简单具体如下数据预处理先对输入的图像做标准化、调整尺寸这些操作目的就是让图像符合ViT模型的输入要求模型加载与适配把预训练好的ViT-B/16模型加载进来然后微调一下分类层让它能适配我们这40类的分类任务就行训练与验证我们用交叉熵损失函数CrossEntropyLoss作为优化目标实际训练的时候模型不仅准确率高泛化能力也很不错预测验证把新的图像输入到训练好的模型里它能直接输出概率最高的前5类汽车零部件预测结果。通过这个实战能明显看出ViT的核心优势它靠自注意力机制能捕捉到图像各个补丁之间的关联就算是复杂的图像分类任务也能高效完成。五、ViT的优势与短板优势全局特征捕捉能力强自注意力机制能让模型直接学习图像各个区域之间的长距离关联特别适合需要全局上下文信息的任务迁移性好预训练好的ViT模型不用做太多复杂操作简单微调一下就能适配不同的图像分类数据集灵活性高它的弱归纳偏置能让模型学习到更复杂的模式尤其是在大数据集下性能优势会特别明显。短板计算成本高Transformer架构的计算复杂度比CNN高很多不管是训练模型还是进行推理都需要性能更强的GPU资源数据依赖大如果数据集比较小ViT的性能还不如那些优化得很成熟的CNN——毕竟CNN的强归纳偏置更适合小数据场景。六、总结选CNN还是ViT其实CNN和ViT并不是非此即彼的选择不用非要二选一如果你的任务数据量小、计算资源有限或者重点是提取局部特征比如简单的目标检测、边缘识别那CNN还是更高效、更稳定的选择如果你的任务需要捕捉全局特征而且数据量充足、也有足够的计算资源那ViT就能发挥出更强的性能。从CNN到ViT计算机视觉的发展本质上就是打破局部限制去拥抱全局特征。这两种架构各有各的适配场景只要搞懂它们的核心差异就能根据自己的实际需求选到最适合的模型——这也是掌握现代计算机视觉的关键所在。