1. Vision Transformer
Dosovitskiy, Alexey, et al. “An image is worth 16x16 words: Transformers for image recognition at scale.” arXiv preprint arXiv:2010.11929 (2020).
这是一篇奠定了Transformer在视觉领域击败传统卷积的文章,Transformer在NLP领域大放异彩之后,在视觉领域也取得了优异的效果,作者摒弃了所有的卷积操作,将图片分割为若干patch,再进行编码,像文本序列一样输入进Transformer模型中。在中等规模的数据集上取得的效果并没有卷积的效果好,但是在大规模的数据集上的表现已经能够超越卷积。

假设一张图片的尺寸为H×W×CH \times W \times CH×W×C,patch的尺寸为P×PP \times PP×P, 那么划分后的图片可以表示为N×(P2×C)N \times (P^2 \times C)N×(P2×C), 其中N=(H×W)/P2N = (H \times W) / P^2N=(H×W)/P2。那么一个patch的初始编码长度就等于(P2×C)(P^2 \times C)(P2×C)对其进行线性投影和位置编码之后就可以像训练文本一样。此外,如图所示,输入进网络中的patch有九个,但是对于最后用哪个编码结果进行图像分类是很难决定的,于是在网络中额外输入一个用于分类的cls_token,它的维度与patch是一致的,我们可以认为它是一个用于最终分类的人为添加的patch。
注意力机制并不是第一次用于图像处理中,SE(sequeeze and excitation)块其实也是一种注意力机制,不过它是作用于通道维的,而ViT是作用于全局的。每个patch都能与任意通道的patch做注意力。其实,当patch的形状是1x1时,效果就和SE块很类似了。

实验参数设置如图所示,可以看到参数量很大。
2. 代码
import torch
import torch.nn as nn
from einops import rearrange, repeat
from einops.layers.torch import Rearrange
<

本文介绍Vision Transformer(ViT),一种在图像识别领域应用Transformer的方法。文章详细阐述了ViT的工作原理,包括如何将图像分割成补丁(patch),并利用类似于文本序列的方式进行编码,通过注意力机制实现图像分类任务。此外,还提供了实现ViT的Python代码。
最低0.47元/天 解锁文章
479

被折叠的 条评论
为什么被折叠?



