Vit 实战营 Class2:图像与Transformer基础

news2024/11/25 15:59:45

文章目录

  • 数组图像:图像与像素
  • 图像分类:机器如何学习?
  • NMT:Neuron Machine Translation
  • Transformer
  • Vision Transformer
  • 代码实战

在这里插入图片描述

数组图像:图像与像素

在这里插入图片描述
什么是数字图像?在计算机图像的图像格式。每一个点叫pixel。type是uint8。
在这里插入图片描述
左边比右边清楚。
在这里插入图片描述
105可以用8位的二进制表示。24位的话,可以表示1600万个不同的颜色。HDR和杜比视界,用10位二进制表示一个颜色,所以是30位,1 billion个不同的颜色。
在这里插入图片描述
在这里插入图片描述
注意flatten是维度的展平,而Expand是一个维度的复制。

图像分类:机器如何学习?

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

NMT:Neuron Machine Translation

在这里插入图片描述
sequetial to sequential的。一个句子就是一个sequetial,一个序列,S2S,又是一个Encoder -> Decoder的过程。

Transformer

在这里插入图片描述
在这里插入图片描述
Transformer本质是一个Encoder+Decoder的过程。
在这里插入图片描述
在这里插入图片描述
Encoder和Decoder都不是一层,可能是多层。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

FFN:Feed Forward Network
MSA:Multi head self-Attention

Vision Transformer

在这里插入图片描述
Vit 是没有Decoder的。Encoder就是实现每一层,然后resnet去跳连。
在这里插入图片描述
映射就是linear层,或者说可学习的层。
把图像分成块,就相当于NLP领域把一个句子分成分词。
Patch Embedding过程:一张[h, w, 3] img 按照window的大小,分成不同的patch,他们的维度变成[num_patch, Wh, Ww, 3]. 每一个patch我们讲他flatten成1维,然后过一个linear层,最后输出的就是一个token,所有token就是patch embedding。每一个token拉平就是embed_dim。

关于Linear Prejection是怎么操作的,可以看下图。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
从卷积CNN的角度理解patch embedding。卷积里的参数值,其实就是Linear Project中的可学习参数w。embed_di的长度,其实就是卷积核的个数,比如我们有32个filter,那么embed_dim=32。

代码实战

import paddle
t = paddle.zeros([3, 3])
print(t)

t = paddle.randn([5, 3])
print(t)

from PIL import Image
import numpy as np
img = np.array(Image.open("img.png"))
print(img.shape)
# print(img)
t = paddle.to_tensor(img, dtype='float32')
print(type(t))
print(t.dtype)
t = t.transpose([2, 1, 0])
print(t.shape)

# chunk
t = paddle.randint(0, 10, [5, 15])
print(t)
qkv = t.chunk(3, -1)
print(qkv)
q, k, v = qkv
print(q)
# ViT Online Class
# Author: Dr. Zhu
# Project: PaddleViT (https://github.com/BR-IDL/PaddleViT)
# 2021.11
import paddle
import paddle.nn as nn
import numpy as np
from PIL import Image

# paddle.set_device('cpu')

class Identity(nn.Layer):
    def __init__(self):
        super().__init__()

    def forward(self, x):
        return x


class Mlp(nn.Layer):
    def __init__(self, embed_dim, mlp_ratio=4.0, dropout=0.):
        super().__init__()
        self.fc1 = nn.Linear(embed_dim, int(embed_dim*mlp_ratio))
        self.fc2 = nn.Linear(int(embed_dim*mlp_ratio), embed_dim)
        self.act = nn.GELU()
        self.dropout = nn.Dropout(dropout)

    def forward(self, x):
        x = self.fc1(x)
        x = self.act(x)
        x = self.dropout(x)
        x = self.fc2(x)
        x = self.dropout(x)
        return x



class PatchEmbedding(nn.Layer):
    def __init__(self, image_size, patch_size, in_channels, embed_dim, dropout=0.):
        super().__init__()
        self.patch_embedding = nn.Conv2D(in_channels,
                                        embed_dim,
                                        kernel_size=patch_size,
                                        bias_attr=False)
        self.dropout = nn.Dropout(dropout)

    def forward(self, x):
        # [n, c, h, w] [1, 1, 28, 28]
        x = self.patch_embedding(x) # [n, c', h', w']
        x = x.flatten(2) # [n, c', h'*w']
        x = x.transpose([0, 2, 1]) # [n, h'*w', c']  h'*w'=num_patches
        x = self.dropout(x)
        return x


class Attention(nn.Layer):
    def __init__(self):
        super().__init__()

    def forward(self, x):
        return x


class EncoderLayer(nn.Layer):
    def __init__(self, embed_dim):
        super().__init__()
        self.attn_norm = nn.LayerNorm(embed_dim)
        self.attn = Attention()
        self.mlp_norm = nn.LayerNorm(embed_dim)
        self.mlp = Mlp(embed_dim)

    def forward(self, x):
        h = x 
        x = self.attn_norm(x)
        x = self.attn(x)
        x = x + h

        h = x
        x = self.mlp_norm(x)
        x = self.mlp(x)
        x = x + h
        return x


class ViT(nn.Layer):
    def __init__(self):
        super().__init__()
        self.patch_embed = PatchEmbedding(224, 7, 3, 16)
        layer_list = [EncoderLayer(16) for i in range(5)]
        self.encoders = nn.LayerList(layer_list)
        self.head = nn.Linear(16, 10)
        self.avgpool = nn.AdaptiveAvgPool1D(1)
        self.norm = nn.LayerNorm(16)

    def forward(self, x):
        x = self.patch_embed(x) # [n, h*w, c]: 4, 1024, 16
        for encoder in self.encoders:
            x = encoder(x)
        # avg
        x = self.norm(x)
        x = x.transpose([0, 2, 1])
        x = self.avgpool(x)
        x = x.flatten(1)
        x = self.head(x)
        
        return x


def main():
    t = paddle.randn([4, 3, 224, 224])
    model = ViT()
    out = model(t)
    print(out.shape)


if __name__ == "__main__":
    main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/750560.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

全国节能宣传周丨物通博联智慧能源解决方案助力节能降碳

今年7月10日至16日,为全国第33个节能宣传周。今年全国节能宣传周活动主题是“节能降碳,你我同行”。 全国节能宣传周活动是在1990年国务院第六次节能办公会议上确定的活动周,开展该活动是实施全面节约战略、开展节能降碳宣传教育、推动形成绿…

ros系统生成kinova双臂机器人moveit配置包方法,详细过程,亲测有效!

环境:ubuntu18.04 ros:melodic 此博客前提你已经安装了moveit,如果未安装,可参考链接 一、启动MoveIt Setup Assistant roslaunch moveit_setup_assistant setup_assistant.launch点击:Create New MoveIt Configurat…

听产品大佬谈大语言模型的商业化价值

今年 3 月以来,全球各大厂商陆续发布大语言模型,无数人欢欣鼓舞,庆祝沉寂了几年的 AI 领域重新焕发生机。 然而热闹过后,一个现实的问题摆在面前:大语言模型的商业化价值该如何挖掘? 来自美洽的资深产品经…

CVE-2021-41773

CVE-2021-41773 Apache Httpd Server 路径穿越漏洞 Httpd(即 HTTP Daemon ,超文本传输协议守护程序的简称)是一款运行于网页服务器后台,等待传入服务器请求的软件。HTTP 守护程序能自动回应服务器请求,并使用 HTTP 协…

fastadmin调试前端js

当键盘按键抬起后打印id #username,点击箭头的除缓存 隐藏前端昵称 设置为 style"sidplay:none" 添加管理员组别的时候把此处的 NULL改为 1 就可以默认选择第一组别

springboot生鲜交易系统

生鲜交易管理方面的任务繁琐,以至于交易市场每年都在生鲜交易管理这方面投入较多的精力却效果甚微,生鲜交易系统的目标就是为了能够缓解生鲜交易管理工作方面面临的压力,让生鲜交易管理方面的工作变得更加高效准确。 本项目在开发和设计过程中涉及到原理和技术有: B/S、java技…

css 绘制直角梯形 和 平行四边形

<div:class"{isFirst: index 0,tab_item: index ! 0,}":style"{width: item?.label?.length > 4 ? 206px : 137px,}"><div>{{ item.label }}</div></div> isFirst是直角梯形 tab_item是平行四边形 直角梯形 .isFirstcur…

计算机系统结构与操作系统实验三(5)-中断

&#x1f4cd;实验要求 将中断处理程序放到C里编写 &#x1f4cd;实验过程 鉴于代码相比之前&#xff0c;多出了很多配套的固定代码&#xff0c;因此代码量和代码中来突增&#xff0c;本文就不再一个一个贴代码了&#xff0c;需要的直接去看我上传在csdn的代码吧(文末有链接…

音视频绕不开的话题之WebRTC

什么是WebRTC&#xff1f; 闲来无事&#xff0c;我们今天探讨下音视频绕不开的一个话题&#xff1a;WebRTC。WebRTC之于音视频行业&#xff0c;无异于FFMpeg&#xff0c;可以说WebRTC的开源&#xff0c;让音视频行业大跨步进入发展快车道。 WebRTC是一个支持实时音视频通信的开…

mac系统终端运行python文件

1.在要运行的python文件首行里添加python解释器路径代码 代码&#xff1a; #!/usr/bin/env python3 注意:上面代码中的python3是对应当前的python版本 例子&#xff1a; 2.复制要运行的python文件位置&#xff0c;在终端使用代码进入要运行的文件位置 终端运行代码&…

架构训练营3:架构设计流程和架构师职责

架构师相关职责&#xff1a; 架构师是业务和技术之间的桥梁&#xff0c;架构师不能只顾技术&#xff0c;不懂业务&#xff0c;架构师很容易两头不讨好 三个核心能力&#xff1a; 判断&#xff1a;1业务理解力2.技术能力3.沟通能力 拆解&#xff1a;1技术深度2.技术宽度3.技术…

出差在外,远程访问企业局域网象过河ERP系统【内网穿透】

文章目录 概述1.查看象过河服务端端口2.内网穿透3. 异地公网连接4. 固定公网地址4.1 保留一个固定TCP地址4.2 配置固定TCP地址 5. 使用固定地址连接 概述 ERP系统对于企业来说重要性不言而喻&#xff0c;不管是财务、生产、销售还是采购&#xff0c;都需要用到ERP系统来协助。…

抖音seo软件技术开发源码搭建部署

抖音SEO矩阵系统源码开发流程分为以下几个步骤&#xff1a; 1.需求分析 在开发抖音SEO矩阵系统源码之前&#xff0c;首先需要对用户的需求进行分析&#xff0c;确定开发的功能和特性。 2.架构设计 根据需求分析的结果&#xff0c;进行架构设计&#xff0c;确定系统的整体框…

模型压缩-裁剪、量化、蒸馏

模型压缩是一种缩小神经网络结构和参数的技术。 压缩的模型在使用少量计算资源 的情况下&#xff0c;使其性能与原始模型近似&#xff1b;常见包括剪枝、量化、蒸馏、神经结构搜索(NAS)等 ##模型压缩与工程部署关注的常用参数1&#xff09;模型大小 一般使用参数量parameter来衡…

Acwing算法基础 前缀和 差分 双指针 位运算 离散化

前缀和与差分 AcWing 795. 前缀和 import java.util.*; public class Main{public static void main(String[] args ){Scanner scnew Scanner(System.in);int nsc.nextInt();int msc.nextInt();int[] arrnew int[n1];arr[0]0;for(int i1;i<n;i) {arr[i]sc.nextInt()arr[i-1…

【从零开始学CSS | 第二篇】伪类选择器

目录 前言&#xff1a; 伪类选择器&#xff1a; 常见的伪类选择器&#xff1a; 举例&#xff1a; 小窍门&#xff1a; 总结: 前言&#xff1a; 上一篇文章我们详细的为大家介绍了一些常见的选择器&#xff0c;这几篇我们将再次介绍CSS中的一个常见选择器——伪类选择器&am…

flutter开发实战-css的linear-gradient的值转换成LinearGradient

flutter开发实战-css的linear-gradient的值转换成LinearGradient 在开发中遇到了参照前端的css的属性值&#xff0c;需要将css的linear-gradient值转换成LinearGradient&#xff0c;这样可以直接设置相应的值。这里暂时不涉及到&#xff0c;颜色值名称、color-stop1&#xff0…

第6章 NVMe 介绍 6.1-6.3

6.1 AHCI 到 NVMe AHCI协议。NVMe协议。 HDD 和早期的 SSD 绝大多数都是使用SATA接口&#xff0c;跑的是AHCI&#xff0c;它是一种系统接口标准。 后来&#xff0c;AHCI 和 SATA 不能满足高性能和低时延 SSD 的需求&#xff0c;SSD 需要更快、更高效的协议和接口。因此 NVMe 出…

webug4.0靶场通关笔记

文章目录 注入显错注入布尔注入延时注入post注入过滤注入宽字节注入xxe注入csv注入万能密码登陆 XSS反射型xss存储型xssDOM型xss过滤xss链接注入 任意文件下载任意文件下载mysql配置文件下载 上传漏洞文件上传(前端拦截)文件上传(解析漏洞)文件上传(畸形文件)文件上传(截断上传…

layui中laydate日期组件闪动打不开问题解决

在laydate.render里配置trigger:click’就可以了&#xff08;已解决&#xff09;