技术博客丨神经网络不再“卷” 全靠“变形金刚”
作者:Ta-Ying Cheng,牛津大学博士研究生,Medium技术博主,多篇文章均被平台官方刊物Towards Data Science收录
图源:Unsplash
目前卷积神经网络(CNN)已经成为了在计算机视觉和图像相关任务中深度网络的主要技术支柱。因其与传统的多层感知器(MLP)相比,在二维邻域感知和平移同变性方面具有显著优势。然而,最近在自然语言处理领域刮起了一阵新趋势,越来越多的人开始用Transformer来取代循环神经网络(RNN),而这也让CV从业者对Transformer的潜力感到非常好奇。
不久前的ICLR 2021*刚好就有一篇论文探讨了Transformer在CV领域的应用前景,并率先提出了“视觉Transformer”的概念,与基于卷积的模型形成鲜明对比。
本文将带大家深入探讨Transformer的概念,特别是视觉Transformer及其与卷积的比较。我们还将简单介绍如何在PyTorch上训练Transformer。
*注:国际学习表征会议(ICLR)是世界顶级的深度学习会议。
卷积网络有什么优势?
为什么卷积网络在计算机视觉领域如此受欢迎?答案就在于卷积的固有性质。卷积核能够将图片内临近像素的特征聚集在一起,使模型能够在学习过程中将这些特征统筹起来。此外,当我们在图像中移动卷积核时,核经过任何地方都能将矩阵内的特征用于分类(称为平移同变性,translation equivariance)。因此,卷积网络无需考虑特征在图像中的位置就能提取特征,在过去几年中让图像分类任务出现了重大进展。
但既然卷积网络已经如此强大,我们为什么还需要Transformer呢?
自然语言处理中的Transformer
图 1. Transformer中的尺度变换点乘注意力机制和多头注意力机制. 源: https://arxiv.org/abs/1706.03762.
Transformer首先在自然语言处理领域提出,论文为“Attention Is All You Need”(《你只是需要有点注意力而已》)。传统的NLP方法(如RNNs和LSTMs)在计算任何预测时都会考虑到短语内附近的词。然而,由于每次出现新的输入时算法都需要考虑到之前已经出现的所有输入,因此模型的预测速度并不算快。
Transformer则利用了“注意力”这一概念。“注意力”某种程度上其实就是矢量词之间的相关性,模型利用这种相关性来计算出最终的预测结果。由于一个词与其他词的相关性独立于其他词之间的相关性,模型得以对所有词进行同时计算。由此,Transformer进一步优化了深度网络的计算逻辑。通过同时考虑所有的词及其相关性,其实际性能明显优于传统的递归方法。
此外,Transformer还加入了“多头注意力”(multi-headed attention)机制,可以多次并行运行注意力机制,并将分离的向量串联成最终的输出结果。
视觉领域的注意力转向
pip install vit-pytorch
一定要确保Pytorch和Torchvision的版本已是最新。
"""
Import the necessary libraries
"""
import torch
from vit_pytorch import ViT
导入了我们需要的库之后,我们可以用如下代码创建一个ViT:
"""
Create a visual transformer, declaring the number of classes, image size, etc.
Make sure that image_size is divisible by patch_size.
"""
v = ViT(image_size = 256,patch_size = 32,num_classes = 1000,dim = 1024,depth = 6,heads = 16,mlp_dim = 2048,dropout = 0.1,emb_dropout = 0.1
)
如果仅仅需要用ViT来进行推理(inference),使用以下代码即可:
"""
Feed in the image as a standard image model of size (batch, 3, image_size, image_size)
The output will be in the dimension of (batch_size, num_classes)
"""
preds = v(img)
如果你真的很想尝试自己去进一步训练ViT,可以参考这篇文章中介绍的方法,通过“蒸馏”(distillation)来进行训练,减少所需的数据量。前述的vit-pytorch仓库里即有提及相关代码。
结果
图 2. ViT在多个大型数据集上的结果. 源: https://arxiv.org/abs/2010.11929.
ViT的原始论文已经可以让我们看到,ViT的性能可以非常突出,但前提是一定要用非常大型的数据集进行预训练,且预训练所需要的算力之多也是极为惊人。
结语
近年来,计算机视觉领域一直在不断改进Transformer,使其能够更加适应图像处理乃至三维点云任务的需要。最近的ICCV 2021亦出现了如云Transformer和Swin Transformer(会议最佳论文奖得主)这样的优秀文章,表明注意力机制已然成为图像处理的新趋势。
更多信息请访问格物钛官网
技术博客丨神经网络不再“卷” 全靠“变形金刚”相关推荐
- 技术博客丨原来模型训练可以不用标注?一文全解四大机器学习方法
作者:Ta-Ying Cheng,牛津大学博士研究生,Medium技术博主,多篇文章均被平台官方刊物Towards Data Science收录 即使在人工智能已经逐渐普遍的今天,有许多人对机器学习相 ...
- 最全的BAT Google等团队技术博客集合
[转载 https://www.jianshu.com/p/7646721c0fc1] [转载请注明原文出处,谢谢!https://www.jianshu.com/p/7646721c0fc1] 前言 ...
- 创建GitHub技术博客全攻略
说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比如姓名全拼,昵称全拼,如果被占用,可以加上有意义的数字. 本文中假设用户名为 tiemaocsdn 1. 注册账号: 地址: ...
- 创建GitHub技术博客全攻略【转】
本文转载自:http://blog.csdn.net/renfufei/article/details/37725057/ 说明: 首先,你需要注册一个 github 账号,最好取一个有意义的名字,比 ...
- 写了十年技术博客,我收获了什么
今年刚好是我写技术博客的第十个年头.恰逢最近也有些所想.所感.所得,所以想把发自内心的对技术博客这件事唠叨几句.算是想到哪写哪,请见谅. 我的技术博客经历 我的第一篇(姑且算是技术分类,但实际是我自己 ...
- 如何写一篇好的技术博客
在工作过程中,发现对很多东西都一知半解,不是很透澈,到头来很容易模糊,如果有一篇好的技术博客予以总结,一来即使忘记了,回国头来再看,仍然能 够从自己的思路中恢复:二来总结一下,还会发现一些潜在问题:三 ...
- 技术人如何搭建自己的技术博客
上次有人留言说,技术博客是程序员的标配,但据我所知绝大部分技术同学到现在仍然没有自己的技术博客.原因有很多,有的是懒的写,有的是怕写不好,还有的是一直想憋个大招,幻想做到完美再发出来,结果一直胎死腹中 ...
- 从闲扯开始我的技术博客吧
开篇就是闲扯 终于狠下心来开自己的技术博客了,之前的博客空间全是自己闲扯的小窝,被我整的不伦不类的.在51混了好久,看了各位同仁的文章,很有感触,于是想开自己博客.说白了,开技术博客真不知道写一些什么 ...
- python脚本监控网站状态 - 赵海华_运维之路 - 51CTO技术博客
python脚本监控网站状态 - 赵海华_运维之路 - 51CTO技术博客 python脚本监控网站状态 2013-01-09 09:21:02 标签:监控 python 原创作品,允许转载,转载时请 ...
最新文章
- linux下nginx部署以及配置详解
- Java的数据类型及其封装器类
- python function terminated un_绕过 RestrictedUnpickler
- Linux Shell文本处理工具集锦
- linux设置蓝牙可连接网络,Linux下蓝牙参数设置程序
- javascript鼠标拖拽的那些事情
- Java基础-Collection集合接口(List及Set)
- 【报告分享】2019年中国95后洞察报告.pdf(附下载链接)
- Win32汇编——动态链接库
- oracle ora00020,ORA-00020: maximum number of processes (1000) 错误处理
- ps之选区抠图,发丝
- 软件设计---概要设计和详细设计
- 花巨款跟巴菲特吃饭的人,是亏是赚?
- 服务器装系统03系统,windows server 2003 服务器安装教程完整版
- HDS USPV-VSP HP XP24000 Raid崩溃阵列损坏多盘损坏数据恢复方法思路分享
- 【电脑全部浏览器显示您与网站连接不是私密连接】
- 括号画家(括号匹配)
- echarts自适应大小或改变窗体大小自适应大小与浏览器最大最小化事件
- 被假阀门坑过吗?如何辨别翻新阀门?
- java web中的中文乱码问题和解决方法