【王树森】Vision Transformer (ViT) 用于图片分类(个人向笔记)

2024-09-01 00:12

本文主要是介绍【王树森】Vision Transformer (ViT) 用于图片分类(个人向笔记),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图片分类任务

  • 给定一张图片,现在要求神经网络能够输出它对这个图片的分类结果。下图表示神经网络有40%的信心认定这个图片是狗
    在这里插入图片描述
  • ResNet(CNN)曾经是是图像分类的最好模型
  • 在有足够大数据做预训练的情况下,ViT要强于ResNet
  • ViT 就是Transformer Encoder网络

Split Image into Patches

  • 在划分图片的时候,需要指定两个超参数
    • patch size: 一个patch的大小,如 16 × 16 16×16 16×16
    • stride: 如果划分的时候没有重叠,那么stride就等于大小 16 × 16 16×16 16×16
      在这里插入图片描述

Vectorization

  • 把每一个patch(张量),拉伸成一个向量,即直接展平:加入patch是一个 d 1 × d 2 × d 3 d_1×d_2×d_3 d1×d2×d3 的张量,那么向量就是 d 1 d 2 d 3 × 1 d_1d_2d_3×1 d1d2d3×1
    在这里插入图片描述
  • 对每个向量做线性变换,将其降维,变换矩阵的参数都是共享的:
    在这里插入图片描述
  • 由于图片的相对位置是有意义的,所以我们还要加上位置信息,即要对位置进行编码。在下面的两张图中,显然左右两张图是不一样的。但是如果不加位置编码,则它们对于 Transformer 来说就是一样的
  • 我们需要把位置编码加到刚刚变换后的向量里面,现在每个 z z z 即是 patch 内容的表征,又是相对位置关系的表征。论文中表明如果不用位置编码,会掉 3 个百分点的准确率。而用何种位置编码的结果都差不多在这里插入图片描述
  • 我们还会用到一个 CLS,这和上节课的 BERT 是类似的。把 CLS 也做一个 Embedding 和其他向量一起加入多头自注意力的计算。可以堆叠多个多头自注意力层和全连接层
    在这里插入图片描述
  • 我们把这些多头自注意力层和全连接层简化为一个 Encoder 网络,输出从 c 0 c_0 c0 c n c_n cn 一共 n + 1 n+1 n+1 个向量,其中向量 c 1 c_1 c1 c n c_n cn 没有用,可以直接忽略掉。有用的是向量 c 0 c_0 c0,可以把它看作是从图片中提取的特征向量,用作分类任务:
    在这里插入图片描述
  • c 0 c_0 c0 输入 Softmax 分类器,p 的维度取决于有多少个种类:
    在这里插入图片描述
  • 已经搭建好了神经网络,那么我们训练的第一步就是随机初始化神经网络参数,然后在数据集 A 上做一个预训练,其中 A 一定要大
    在这里插入图片描述
  • 在得到预训练的参数后,我们再用一个比较小的数据集 B 进行训练,这个步骤被称为微调,其中数据集 B 是任务的数据集
    在这里插入图片描述
  • 最后在测试集上进行测试,评价模型的表现
    在这里插入图片描述

Image Classification Accuracies

  • 当预训练的数据集不够大的时候,其实 Transformer 的表现并不是很好,弱于 ResNet
  • 当预训练集的大小为中等时,Transformer 的效果与 ResNet 相当
  • 当预训练集的大小为大时,Transformer 准确率会比 ResNet 高 1%
  • 如果预训练数据集更大,那么 Transformer 的准确率还会提升
    在这里插入图片描述

这篇关于【王树森】Vision Transformer (ViT) 用于图片分类(个人向笔记)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125395

相关文章

Python实现精准提取 PDF中的文本,表格与图片

《Python实现精准提取PDF中的文本,表格与图片》在实际的系统开发中,处理PDF文件不仅限于读取整页文本,还有提取文档中的表格数据,图片或特定区域的内容,下面我们来看看如何使用Python实... 目录安装 python 库提取 PDF 文本内容:获取整页文本与指定区域内容获取页面上的所有文本内容获取

Python基于微信OCR引擎实现高效图片文字识别

《Python基于微信OCR引擎实现高效图片文字识别》这篇文章主要为大家详细介绍了一款基于微信OCR引擎的图片文字识别桌面应用开发全过程,可以实现从图片拖拽识别到文字提取,感兴趣的小伙伴可以跟随小编一... 目录一、项目概述1.1 开发背景1.2 技术选型1.3 核心优势二、功能详解2.1 核心功能模块2.

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

使用Python实现base64字符串与图片互转的详细步骤

《使用Python实现base64字符串与图片互转的详细步骤》要将一个Base64编码的字符串转换为图片文件并保存下来,可以使用Python的base64模块来实现,这一过程包括解码Base64字符串... 目录1. 图片编码为 Base64 字符串2. Base64 字符串解码为图片文件3. 示例使用注意

c/c++的opencv实现图片膨胀

《c/c++的opencv实现图片膨胀》图像膨胀是形态学操作,通过结构元素扩张亮区填充孔洞、连接断开部分、加粗物体,OpenCV的cv::dilate函数实现该操作,本文就来介绍一下opencv图片... 目录什么是图像膨胀?结构元素 (KerChina编程nel)OpenCV 中的 cv::dilate() 函

使用Python实现调用API获取图片存储到本地的方法

《使用Python实现调用API获取图片存储到本地的方法》开发一个自动化工具,用于从JSON数据源中提取图像ID,通过调用指定API获取未经压缩的原始图像文件,并确保下载结果与Postman等工具直接... 目录使用python实现调用API获取图片存储到本地1、项目概述2、核心功能3、环境准备4、代码实现

Java实现图片淡入淡出效果

《Java实现图片淡入淡出效果》在现代图形用户界面和游戏开发中,**图片淡入淡出(FadeIn/Out)**是一种常见且实用的视觉过渡效果,它可以用于启动画面、场景切换、轮播图、提示框弹出等场景,通过... 目录1. 项目背景详细介绍2. 项目需求详细介绍2.1 功能需求2.2 非功能需求3. 相关技术详细

Java如何根据文件名前缀自动分组图片文件

《Java如何根据文件名前缀自动分组图片文件》一大堆文件(比如图片)堆在一个目录下,它们的命名规则遵循一定的格式,混在一起很难管理,所以本文小编就和大家介绍一下如何使用Java根据文件名前缀自动分组图... 目录需求背景分析思路实现代码输出结果知识扩展需求一大堆文件(比如图片)堆在一个目录下,它们的命名规

将图片导入Python的turtle库的详细过程

《将图片导入Python的turtle库的详细过程》在Python编程的世界里,turtle库以其简单易用、图形化交互的特点,深受初学者喜爱,随着项目的复杂度增加,仅仅依靠线条和颜色来绘制图形可能已经... 目录开篇引言正文剖析1. 理解基础:Turtle库的工作原理2. 图片格式与支持3. 实现步骤详解第

在React聊天应用中实现图片上传功能

《在React聊天应用中实现图片上传功能》在现代聊天应用中,除了文字和表情,图片分享也是一个重要的功能,本文将详细介绍如何在基于React的聊天应用中实现图片上传和预览功能,感兴趣的小伙伴跟着小编一起... 目录技术栈实现步骤1. 消息组件改造2. 图片预览组件3. 聊天输入组件改造功能特点使用说明注意事项