我们知道,transformer要求将图片分为patch,然后输入网络进行计算,那么我们就需要将二维的图片处理成一维的embeding形式,今天我来给大家介绍一下图片处理的思路。

我们演示一下处理下面这张图片

我们将图片按照16*16的大小进行分片,得到的结果如下图所示

接下来我们需要将patch变成tensor。在此之前先介绍一下传统CNN图片处理和transformer图片处理之间的区别

我们可以看到,传统CNN图片处理得到的向量是三维的,而transformer图片处理得到的向量是二维的,其中num表示一张图片分片数量(也就是分成多少个patch),第二个维度中patch*patch表示每个patch的面积,channel表示通道数。

当我们训练网络的时候,通常需要将数据加载成batch的形式,一个batch里面通常包含多张图片,所以数据格式如下所示

也就是说,transformer送入网路进行计算的数据是三维的,而传统CNN送入网络进行计算的数据是四维的,这也是CNN和transformer数据加载的主要区别。

下面就贴一段数据处理的演示代码,你可以按照这个代码的思路去写数据加载器。

import torch
from PIL import Image
import torchvision.transforms as tfs
import matplotlib.pyplot as pltclass ImgFactory(object):def __init__(self, patch=16):super(ImgFactory, self).__init__()self.patch = patchself.im_tfs = tfs.Compose([tfs.ToTensor(),tfs.Normalize([0.485, 0.456, 0.406], [0.229, 0.224, 0.225])])def getImagePatch(self, filename):img = Image.open(filename)width, height = img.sizenum_patch_w = width // self.patchnum_patch_h = height // self.patchpatch_list = []num = 1for i in range(num_patch_h):for j in range(num_patch_w):s_y = i*self.patchs_x = j*self.patchbox = (s_x, s_y, self.patch+s_x, self.patch+s_y)region = img.crop(box)patch_list.append(region)plt.subplot(num_patch_h, num_patch_w, num), plt.imshow(region), plt.axis("off")num = num + 1plt.savefig("patch.png")for i in range(len(patch_list)):patch_list[i] = self.im_tfs(patch_list[i])patch_list[i] = patch_list[i].view(1,-1)seq = torch.cat(patch_list, dim=0)return seqif __name__ == "__main__":factory = ImgFactory()seq = factory.getImagePatch("a.png")print(seq.shape)

输出结果是一张图片加载成tensor的格式

视觉transformer图片处理思路相关推荐

  1. 【CV】Swin Transformer:使用 Shifted Windows 的分层视觉 Transformer

    论文名称:Swin Transformer: Hierarchical Vision Transformer using Shifted Windows 论文下载:https://arxiv.org/ ...

  2. ICCV 2021 Oral | 金字塔视觉Transformer(PVT):用于密集预测的多功能backbone

    点击下方卡片,关注"CVer"公众号 AI/CV重磅干货,第一时间送达 本文作者:whai362 |  来源:知乎(已授权) https://zhuanlan.zhihu.com/ ...

  3. 华为诺亚最新视觉Transformer综述

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨机器之心 编辑丨极市平台 导读 华为诺亚方舟实验室联合北大和悉 ...

  4. 最新视觉Transformer综述(2017-2020年)

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 作者丨坐化@知乎(已授权) 来源丨https://zhuanlan. ...

  5. 3W字长文带你轻松入门视觉Transformer

    作者丨深度眸@知乎 来源丨https://zhuanlan.zhihu.com/p/308301901 编辑丨极市平台 0 摘要 transformer结构是google在17年的Attention ...

  6. 华为、北大、悉尼大学:最新视觉Transformer综述(2017-2020年)

    点击上方,选择星标或置顶,不定期资源大放送! 阅读大概需要25分钟 Follow小博主,每天更新前沿干货 来源丨https://zhuanlan.zhihu.com/p/342114940 转自丨极市 ...

  7. 【深度学习】SETR:基于视觉 Transformer 的语义分割模型

    Visual Transformer Author:louwill Machine Learning Lab 自从Transformer在视觉领域大火之后,一系列下游视觉任务应用研究也随之多了起来.基 ...

  8. TPAMI 2022综述 | 视觉Transformer系统性测评及未来方向探讨

    关注公众号,发现CV技术之美 本文转载自诺亚实验室 2021年对计算机视觉来说是非常重要的一年,各个任务的SOTA不断被刷新.这么多种Vision Transformer模型,到底该选哪一个?新手入坑 ...

  9. ICCV2021-PiT-池化操作不是CNN的专属,ViT说:“我也可以”;南大提出池化视觉Transformer(PiT)...

    关注公众号,发现CV技术之美 本文分享一篇 ICCV2021 论文:『Rethinking Spatial Dimensions of Vision Transformers』. 详细信息如下: 论文 ...

  10. 全文翻译 | 华为、北大、悉尼大学:最新视觉Transformer综述(2017-2020年)

    点击上方"3D视觉工坊",选择"星标" 干货第一时间送达 作者丨坐化@知乎(已授权) 来源丨https://zhuanlan.zhihu.com/p/34211 ...

最新文章

  1. 又一名逃犯在张学友演唱会被 AI 捕获,人送绰号“热心歌神张先生”
  2. Bert时代的创新:Bert应用模式比较及其它
  3. [Cocoa, 医疗]Dicom Image Viewer for iPad
  4. opencore0.6.3_大杨随笔2020.11.3
  5. 数据库集群的级联复制完整实现
  6. 无线对讲调度服务器,无线对讲系统解决方案
  7. TypeScript class 表达式 - Class expression
  8. jmeter如何定位网络延时_JMeter用户定义变量和properties变量高级使用
  9. dac0832控制电机驱动流程图_某驱动电机控制器拆解实拍照片
  10. 信息学奥赛一本通(2030:【例4.16】找素数)
  11. vue radio双向绑定_Vue 双向绑定
  12. 随机森林回归 python_用随机森林回归预测“美版拼多多”商品销量
  13. 95后大厂程序员删库被判刑,只因项目被接手对领导心生不满
  14. 梦游计算机,传承与奉献!《梦幻西游》电脑版《梦游敦煌》完结
  15. 背单词App开发日记2
  16. LTE-V2X车联网技术、标准、应用
  17. 对小样本数据进行数据增强
  18. python怎么念1001python怎么念-python 星号的使用
  19. linux无线鼠标右键自动选择,2020年高性价比无线鼠标推荐
  20. docker-compose一键部署mysql-nacos-seata-redis

热门文章

  1. 第十五章 文件读写
  2. matlab求两向量夹角_10373 高中立体几何向量法全攻略
  3. 如何查看系统中的木马
  4. 日志追踪-类加载器-线程上下文类加载器
  5. 【Java】Maven使用笔记
  6. 工作环境配置及putty工具常见设置
  7. bluetooth 驱动 Makefile
  8. 2020-12-3background-color对div元素不起作用
  9. python中shift_Python Pandas dataframe.shift()用法及代码示例
  10. Excel如何快速删除指定区域公式保留数值