ViT| Vision Transformer |理论 + 代码_哔哩哔哩_bilibili
1 不用卷积神经网络那些东西(CNN)了全部用Transforme 。
2 大规模数据训练,小规模数据应用。
3 效果相当 计算训练资源更少。
转换思想
224*224像素图像 - 单个像素(视为一个词token) -16*16个像素 图像块patches(作为一个token 减少计算量) - 变为1个token词-- 共14*14=196个词(token) --- 送入TSFM网络
1 图中 3*3 是示意图 实际位14*14个块,词
2 分类标签token添加,,可以额外学习的,然后加入位置编码
3 得到10个结果,图像分类任务,只需要取出class token词对应的输出。
4 搞一个全连接层(简单理解),得到分类结果。、
代码
步骤1 图像预处理 压缩操作
A 参数说明
1 图像尺寸 224*224
2 块大小 16*16
3 网格形状 grid_size 224/16=14个 (14,14)
4 网格总数 14*14=196个
B卷积层
只用来数据处理
卷积层 (3 个通道, 输出通道768个特征, 卷积核(16,16),扩展0,步幅(16,16))
(N-卷积核+2*扩展数目+步长)/步长
(16-16++16)/16=1 个
相当于 原来的16*16块变为一个像素,原有像素16*14*16*14=224*224个像素
原图 14*14个块 变为 14*14个像素=196个像素的 特征图
最后展平
输入
8个块 通道3 长宽224 224
结果 x 8个样本块 每个块14*14=196个像素 特征是人为i定义的768
步骤2 分类信息加入+位置编码
2-1获取步骤1中的图像编码结果
原图变为
X[B批次, 14*14个像素, 768个特征(人为定义)]
2 -2 加入分类标签cls_token
cls_token [1,1,768] 扩展为X尺度 [B, 1,768]
2-3 将X和标签拼接在一起
x=[cls_token ,x] =[B,1,768] --[B,14*14=196,768]
x [B,197,768]
2-4 加上位置编码 可学习的
2-5 加入 随机丢失层
最后得到
2-7 送入TSFM层
标签:Transformer,10.5,14,16,768,token,像素,pytorch,224 From: https://www.cnblogs.com/gooutlook/p/17783010.html