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. 疯了吧!这帮人居然用 Go 写“前端”?(二)

    作者 | 郑嘉涛(羣青) 来源|尔达 Erda 公众号 ​ 前言 ​ 上篇我们讲了故事发生的背景,也简单阐述了组件及协议的设想: ​ 一.丰富的通用组件库. 二.组件渲染能力,将业务组件渲染成通用组件 ...

  2. 转 android开发笔记之handler+Runnable的一个巧妙应用

    本文链接:https://blog.csdn.net/hfreeman2008/article/details/12118817 版权 1. 一个有趣Demo: (1)定义一个handler变量 pr ...

  3. MySQL 用户权限相关命令

    ##1.创建用户: create user test identified by '123456';##identified后面跟密码 ##2.查询所有用户: select user from mys ...

  4. springmvc中如何自定义类型转换器

    package com.hope.utils;import org.springframework.core.convert.converter.Converter;import org.spring ...

  5. Spring Cloud Alibaba 整合 Nacos 实现服务配置中心

    在之前的文章 <Nacos 本地单机版部署步骤和使用> 中,大家应该了解了 Nacos 是什么?其中 Nacos 提供了动态配置服务功能 一.Nacos 动态配置服务是什么? 官方是这么说 ...

  6. Typora软件使用教程

    Typora软件的使用教程 Typora软件简介 Typora是一款轻便简洁的Markdown编辑器,支持即时渲染技术,这也是与其他Markdown编辑器最显著的区别.当然重点是免费. Typora编 ...

  7. <转>单机版搭建Hadoop环境

    安装过程: 一.安装Linux操作系统 二.在Ubuntu下创建hadoop用户组和用户 三.在Ubuntu下安装JDK 四.修改机器名 五.安装ssh服务 六.建立ssh无密码登录本机 七.安装ha ...

  8. 果蝇优化算法_Fruit Fly Optimization

    1. 果蝇优化算法背景 在夏天,果蝇是一种随处可见的昆虫.果蝇在嗅觉和视觉特别突出.腐烂的食物发出一种刺鼻的味道,温度越高这种气味的扩散速度较快,果蝇对这种味道非常敏感.腐烂的味道和食物的位置有关.一 ...

  9. hitcontraining_magicheap

    拿到题目例行检查 程序是64位的程序 保护几乎全开,试运行一下程序 十分明显的堆溢出的界面,将程序放入ida中,shift+f12发现了后门程序 进入main主函数进行查看 可以看到当,v3==486 ...

  10. not_the_same_3dsctf_2016

    老样子查看程序开启的保护 可以看到程序是32位的程序开启了nx保护,把程序放入ida编译一下 shift+f12可以看到flag.txt,我们用ctrl+x跟随一下 看到程序,直接想到的就是通过溢出获 ...