当前位置: 首页 > news >正文

VIT论文阅读

把图片看成一个个16x16的patch堆起来的

摘要

卷积神经网络不是必备的,一个纯transformer表现也是非常好的
transformer?2500天tpu v3

介绍

大规模上预训练,小规模任务数据集上微调。扩大模型时候还没观察到瓶颈(还没出现过拟合)?

轴注意力机制:把2d的图片注意力分成从H和从W出发两个1d的注意力机制

将224x224的图片根据16x16的patch划分成为14x14,使用特征图展开成1d来进行attention操作

在不加强约束的情况下,transformer效果是比Resnet差的,因为少了归纳偏置
1是本地偏置,相近的特征会相邻;2是平移同变性f(g(x))=g(f(x)),无论先做平移还是卷积,输出永远是一样的。卷积有很多先验信息。

只要预训练的数据集够大,特征迟早会学到,效果会变好

前人工作

要么就是用transformer将CNN取代,要么两者结合
降低时间复杂度:

  1. 使用窗口代替所有像素
  2. 使用sparse transformer:只对一些稀疏的点使用自注意力
  3. 横轴和纵轴
    但是需要硬件加速

方法

尽可能使用原始的transformer

(无法上传原结构图)

每个patch会通过线性投影层转换成序列,最开始有一个cls标签(分类,从BERT中引进),然后只看该标签来预测类别

流程:224x224图片划分成为14x14=196的16x16x3=768的RGB图片,乘以一个线性投影矩阵得到196x768输出
加上一个cls标签1x768,得到197x768的最终输出,再与位置向量相加,得到patch embeddings
cls相信它可以学到图像的特征。cls经过很多层transformer encoder后融合了其他token的信息。将其最后通过一个MLP处理成分类信息。
位置编码选择一维还是二维?发现两者结果差不多

公式化:
在这里插入图片描述

z0是输入,
第二条是多头自注意力机制出来的结果,先LaynerNorm,然后注意力,加上过去输入
第三条就是LN 然后MLP+个残差
第四条是最后一层输出的第一个位置当成整体图像的特征作为分类任务

归纳偏置:
transformer没有先验知识

混合结构:
detr,CNM+tran的结合。使用CNN产生14x14的特征,拉直之后使用原始transformer

微调和更高清晰度

用预训练好的模型尝试高分辨率图片微调
从短序列到长序列,需要进行插值操作,但是效果不太好。微调有局限性。

实验

对比和resnet的表征学习能力
样本小, 小于ImageNet21k时候,bit占优,否则Vit后来居上,效果好一丢丢

可视化

贾柏滤波器(Gabor filter)

可视化注意力距离后,发现在训练初期,同一层自注意力机制是有距离的,并且随着网络越深距离越大且方差越小
这相对与CNN的好处是,CNN在浅层网络的感受野是很小的,只能看到邻近像素点的信息,
作图:将学习到的权重投射到原图的像素点中

消融实验

补充:全局平均池化是每一个channel得到一个元素,最后得到一个长度为channel的一维向量。
在ViT中,全局平均池化和cls token的方法效果一致

2维的位置编码:将一维的长度为D的位置编码换成D/2为高,D/2为宽的2维位置矩阵,根据具体位置选择两个向量拼接到一起就又成了长度D的向量

自监督学习

选择部分patch抹除,然后自监督重建这一部分patch。但是效果差一筹。

结论

不一样的是,我们不使用图像的归纳偏执,而是一个序列块
有可能规模增加还能带来更好的结果 VIT-G

额外

mataformer:用池化操作取代qkv,他觉得是结构好,并不是mlp的原因

http://www.lryc.cn/news/436195.html

相关文章:

  • Python编程入门必备:def关键字与函数参数
  • LiveKit的agent介绍
  • 青龙面板 升级 及其 依赖更新修复 检测and日志删除等
  • 坐牢第三十七天(Qt)
  • Vidu 全球首发「主体参照」新功能,一键同步角色特征;GPT-4o 实时音频项目负责人离职创业丨 RTE 开发者日报
  • 电子地图的主要功能与应用
  • 基于Java+SpringBoot+Vue+MySQL的西安旅游管理系统网站
  • 简单介绍 NVIDIA推出的图形处理单元(GPU)架构“安培架构“
  • Qiskit:量子计算的Python工具包
  • Python——贪吃蛇
  • WPF 依赖属性与附加属性(面试长问)
  • Python 中的各括号用法
  • 业务流程建模(BPM)的重要性及其应用
  • isxdigit函数讲解 <ctype.h>头文件函数
  • Linux中安装NextCloud
  • 【编程基础知识】什么是数据库事务
  • 移植案例与原理 - XTS子系统之应用兼容性测试用例开发
  • 关于linux里的df命令以及inode、数据块-stat链接数以及关于awk文本处理命令中内置函数sub、gsub、sprintf
  • 如何本地搭建Whisper语音识别模型
  • 微信小程序仿微信聊天界面
  • 文件用电脑生成的在线技巧,能够轻松将多种类型文件转二维码
  • QT实现TCP/UDP通信
  • 流程自动化变革:看低代码开发如何赋能企业创新转型
  • 可提示 3D 分割研究里程碑!SAM2Point:SAM2加持泛化任意3D场景、任意提示!
  • Rabbitmq中得RPC调用代码详解
  • ISAC: Toward Dual-Functional Wireless Networks for 6G and Beyond【论文阅读笔记】
  • split 分割字符串方法解析,substring 截取字符串方法解析;二者的作用和区别?使用时需要注意什么?附代码和运行图
  • HTTP 协议的基本格式
  • STM32-HAL库开发快速入门
  • vue3-print打印eletable某一行的数据