Chen M., Radford A., Child R., Wu J., Jun H., Dhariwal P., Luan D., Sutskever I. Generative pretraining from pixels. In International Conference on Machine Learning (ICML), 2020.

Dosovitskiy A., Beyer L., Kolesnikov A., Weissenborn D., Zhai X., Unterthiner T., Dehghani M., Minderer M., Heigold G., Gelly S., Uszkoreit J. and Houlsby N. An image is worth 16x16 words: transformers for image recognition at scale. In International Conference on Learning Representations (ICLR), 2021.

两个将transformer用于图像分类任务的尝试.

主要内容

其实将transformer用于图像分类任务, 关键的问题是如果生成tokens.

iGPT

iGPT生成tokens方式很粗暴, 将图片拉成向量, 每一个element对应一个token, 然后根据‘字典’获得相应的embeddings. 但是普通的图片, 比如224x224x3, 由于transformer的memory需求是四次方的, 显然这个tokens数目无法计算, 所以本文会首先对图片进行压缩, 比如至32x32x3, 但是这样依然不够.

但是32往下的size对于人来说已经不易辨别了, 虽然本文采取的策略是将3通道压缩为1通道. 通过对图片进行k均值分类(k=512), 然后为每个像素点分配中心, 作者发现这么做效果不错.

注: 因此字典的大小也应该是长度也应该是512.

注: 在fine-tuning的时候, 因为最后的输出是(B, S, D), 也没法直接加全连接层分类, 故首先通过average pooling 变成(B, D), 再通过\(W^{K \times D}\)获得logits.

ViT

ViT则不这么粗暴, 其首先将图片分割成一个个patch, 然后通过一个线性投影\(W\)变成embeddings, 注意这里不再是NLP中的通过字典索取了.

需要特别注意的是, 第一个embedding对应的是类别的embedding, 其对应的输出\(Z_0^L\)(最后的第0个token)用于最后的分类任务. 故不像iGPT, ViT其实是有监督的.

  1. 为什么不想iGPT一样通过average pooling来使用所有tokens来分类呢?

    其实是可以的, 作者他们最先尝试的就是这个策略, 但是由于学习率没调好, 所以本文显示加了类别的token, 实际情况如下图:

  1. 能否从有监督变成自监督?

    其实也是可以的, 可以最后预测每一个patch的平均值:

    Finally, we predict the 3-bit, mean color (i.e. 512 colors in total) of every corrupted patch using their respective path representations.

  2. positional embeddings有什么影响?

    作者试了1-D, 2-D, 以及相对编码, 在第一层, 每一层(单独), 每一层(共享)策略下比较, 发现相差无几, 但是有位置编码会比无位置编码好很多.

代码

iGPT

ViT

iGPT and ViT的更多相关文章

  1. VIT Vision Transformer | 先从PyTorch代码了解

    文章原创自:微信公众号「机器学习炼丹术」 作者:炼丹兄 联系方式:微信cyx645016617 代码来自github [前言]:看代码的时候,也许会不理解VIT中各种组件的含义,但是这个文章的目的是了 ...

  2. 带你读Paper丨分析ViT尚存问题和相对应的解决方案

    摘要:针对ViT现状,分析ViT尚存问题和相对应的解决方案,和相关论文idea汇总. 本文分享自华为云社区<[ViT]目前Vision Transformer遇到的问题和克服方法的相关论文汇总& ...

  3. ICCV2021 | Tokens-to-Token ViT:在ImageNet上从零训练Vision Transformer

    ​  前言  本文介绍一种新的tokens-to-token Vision Transformer(T2T-ViT),T2T-ViT将原始ViT的参数数量和MAC减少了一半,同时在ImageNet上从 ...

  4. EfficientFormer:轻量化ViT Backbone

    论文:<EfficientFormer: Vision Transformers at MobileNet Speed > Vision Transformers (ViT) 在计算机视觉 ...

  5. [炼丹术]基于SwinTransformer的目标检测训练模型学习总结

    基于SwinTransformer的目标检测训练模型学习总结 一.简要介绍 Swin Transformer是2021年提出的,是一种基于Transformer的一种深度学习网络结构,在目标检测.实例 ...

  6. java web学习总结(三十) -------------------JSTL表达式

    一.JSTL标签库介绍 JSTL标签库的使用是为弥补html标签的不足,规范自定义标签的使用而诞生的.使用JSLT标签的目的就是不希望在jsp页面中出现java逻辑代码 二.JSTL标签库的分类 核心 ...

  7. java web学习总结(二十九) -------------------JavaBean的两种开发模式

    SUN公司推出JSP技术后,同时也推荐了两种web应用程序的开发模式,一种是JSP+JavaBean模式,一种是Servlet+JSP+JavaBean模式. 一.JSP+JavaBean开发模式 1 ...

  8. [No0000A2]“原始印欧语”(PIE)听起来是什么样子?

    "Faux Amis"节目中经常提到"原始印欧语"(PIE)——"Proto-Indo-European". 我们说过,英语,法语中的&qu ...

  9. git的基本介绍和使用

    前言:从事iOS开发一年多以来,一直使用svn管理源代码.对svn的特点和弊端已经深有体会.前些天双十二前后,项目工期紧张到爆,起早贪黑的加班,可谓披星戴月,这还不止,回到家中还要疯狂的敲代码.那么问 ...

随机推荐

  1. 巩固javaweb第一天

    巩固内容: 实例解析 <!DOCTYPE html> 声明为 HTML5 文档 <html> 元素是 HTML 页面的根元素 <head> 元素包含了文档的元(me ...

  2. Java实现 HTTP/HTTPS请求绕过证书检测

    java实现 HTTP/HTTPS请求绕过证书检测 一.Java实现免证书访问Https请求 创建证书管理器类 import java.security.cert.CertificateExcepti ...

  3. C++之无子数

    题目如下: 1 #include <iostream> 2 3 using namespace std; 4 5 6 bool isThisNumhaveChild(int num); 7 ...

  4. 转 Android Lifecycle、ViewModel和LiveData

    转自:https://www.jianshu.com/p/982545e01d0a 1.概述 在I / O '17的时候,其中一个重要的主题是Architecture Components.这是一个官 ...

  5. Java中的Date和时区转换

    1.Date中保存的是什么 在java中,只要我们执行 Date date = new Date(); 就可以得到当前时间.如: Date date = new Date(); System.out. ...

  6. gitlab之实战部署

    #:准备Java环境,安装jdk root@ubuntu:~# cd /usr/local/src/ root@ubuntu:/usr/local/src# ls jdk-8u191-linux-x6 ...

  7. 简单的Spring Boot项目——实现连接Mysql数据库

    一.创建Spring Boot项目 参考:使用IntelliJ IDEA创建简单的Spring Boot项目 二.数据库.表的创建 三.项目开发 3.1 pom.xml文件配置 <?xml ve ...

  8. 【Python】文本包jieba使用

    看了一个教程:https://www.cnblogs.com/wkfvawl/p/9487165.html 有些不懂的地方自己查阅了一下 键值的添加,获得文件中相同字符出现的次数, counts = ...

  9. 【C/C++】指针,传参,引用的一些个人理解。

    (以下均为个人理解) 函数访问的传参两种方式大致为: 值传递: 地址传递. 但是实际上可以都理解为,传进来的[形参]是主函数里的实参值的[一种复制]. 举个例子,哪怕我们将地址作为子函数的输入变量,形 ...

  10. 深度学习初探——符号式编程、框架、TensorFlow

    一.命令式编程(imperative)和符号式编程(symblic) 命令式: import numpy as np a = np.ones(10) b = np.ones(10) * 2 c = b ...