【人工智能笔记】第四十二节:TF2实现VITGAN对抗生成网络,PatchEmbedding 实现

Transformer——patch embedding代码 简单版ViT(无attention部分) 主要记录一下Patch Embedding怎么处理和了解一下vit的简单基本框架,下一节写完整的ViT框架 图像上的Transformer怎么处理?如图 图片—>分块patch---->映射(可学习)---->特征 整体网络结构: 实践部分: Patch Embedding用于将原始的2维图像转换成一系列的1维patch embeddings Patch Embedding部分代码: class PatchEmbedding(nn.Modu 阅读详情

网络结构图
该章节介绍VITGAN对抗生成网络中,PatchEmbedding 部分的代码实现。

目录(文章发布后会补上链接):

  1. 网络结构简介
  2. Mapping NetWork 实现
  3. PositionalEmbedding 实现
  4. MLP 实现
  5. MSA多头注意力 实现
  6. SLN自调制 实现
  7. CoordinatesPositionalEmbedding 实现
  8. ModulatedLinear 实现
  9. Siren 实现
  10. Generator生成器 实现
  11. PatchEmbedding 实现
  12. ISN 实现
  13. Discriminator鉴别器 实现
  14. VITGAN 实现

PatchEmbedding 简介

论文原文
PatchEmbedding 是鉴别器的输入部分,用于将图片分割,并在边缘补上 o o o宽度的重叠部分,可包含一部分位置信息。

代码实现

import tensorflow as tf

class PatchEmbedding(tf.keras.layers.Layer):
    """
    2D Image to Patch Embedding
    """

    def __init__(
        self,
        image_size=224,
        patch_size=16,
        overlapping=3, # 图像重叠部分
        emb_dim=768,
        discriminator=True,
    ):
        super().__init__()
        assert image_size % patch_size == 0
        self.image_size = image_size
        self.patch_size = patch_size
        self.overlapping = overlapping
        self.emb_dim = emb_dim
        self.discriminator = discriminator
        self.grid_size = image_size // patch_size
        self.num_patches = self.grid_size ** 2

        self.proj = tf.keras.layers.Dense(emb_dim, use_bias=False)

        self.create_indexes()

    def create_indexes(self):
        '''创建切片下标'''
        self.all_indexes = []
        for y in range(self.grid_size):
            for x in range(self.grid_size):
                now_y_start = y * self.patch_size
                now_y_end = (y+1) * self.patch_size
                now_x_start = x * self.patch_size
                now_x_end = (x+1) * self.patch_size
                # 加重叠部分,边缘则加到同一边
                if y == 0:
                    now_y_end += 2 * self.overlapping
                elif y == self.grid_size-1:
                    now_y_start -= 2 * self.overlapping
                else:
                    now_y_start -= self.overlapping
                    now_y_end += self.overlapping
                if x == 0:
                    now_x_end += 2 * self.overlapping
                elif x == self.grid_size-1:
                    now_x_start -= 2 * self.overlapping
                else:
                    now_x_start -= self.overlapping
                    now_x_end += self.overlapping
                self.all_indexes.append(
                    (now_y_start, now_y_end, now_x_start, now_x_end)
                )
        # print('all_indexes:', self.all_indexes)

    def call(self, x):
        batch = tf.shape(x)[0]
        patch_list = []
        for now_y_start, now_y_end, now_x_start, now_x_end in self.all_indexes:
            patch_x = x[:,now_y_start:now_y_end,now_x_start:now_x_end,:]
            patch_list.append(tf.reshape(patch_x,[batch,1,-1]))
        x = tf.concat(patch_list, axis=1)
        x = self.proj(x)
        return x


if __name__ == "__main__":
    layer = PatchEmbedding(
        image_size=224,
        patch_size=16,
        overlapping=3,
        embed_dim=768
    )
    # x = tf.random.uniform([2,224,224,3], dtype=tf.float32)
    x = tf.io.read_file('./test.jpg')
    x = tf.image.decode_jpeg(x, channels=3)
    x = tf.expand_dims(x, axis=0)
    x = tf.image.crop_and_resize(x, [[0,0,1,1]], [0], [224,224])
    o1 = layer(x)
    tf.print('o1:', tf.shape(o1))
    o1 = tf.reshape(o1, [1, 14, 14, 22, 22, 3])
    o1 = tf.transpose(o1, perm=[0,1,3,2,4,5])
    o1 = tf.reshape(o1, [1, 308, 308, 3])
    o1 = tf.image.encode_jpeg(tf.cast(o1[0], dtype=tf.uint8))
    tf.io.write_file('./test2.jpg', o1)

参考资料:

Patch Embedding 咋眼看说去像是用大卷积核操作, 实际上只是借用它的方式, 最后在图像长宽维展平为一位再和第768个patch维对调实现了图像embedding , 秒啊~~3的图像达成196个patch,每个patch的size为768 ,即768维一维张量.对应196sentence, 每个sentence的编码映射为768维的特征向量。 阅读详情

相关推荐

swin transformer 模块理解

前言 【个人学习笔记记录,如有错误,请指正】 配置文件使用 swin_small_patch4_windows7_224.yaml 文件,batch_size = 4 # 一、Patch Embedding 【Patch embedding】其实就是将输入的 224 * 224 大小的图像,经过【卷积】和【LayerNorm】操作,将图像缩放为 56 *56 大小的特征图。然后将特征图reshape 为 (4, 3136, 96)形状,这里的 4 为【batch_size】,3136 = 56*56,.

m0_46498587的博客 4498

ViT Patch Embedding理解

ViT(Vision Transformer)中的Patch Embedding用于将原始的2维图像转换成一系列的1维patch embeddings。 输入图像的维度为

YoJayC的博客 4万+

大模型建模基础:Vision Transformer的Patch Embedding层

大模型建模基础:Vision Transformer的Patch Embedding层

天涯雨的博客 1343

CV中token、Patch Embedding、positional encoding的概念(多模态、ViT、Transformer)

在不同的语境下,术语token等有不同的解释。笔者这里的概念解释基于Google的ViT原文。 NLP中,token指的是一个单词word。而CV中,token的概念包含:token、class token、patch token等。

qq_34348690的博客 4635

常见的电容有哪些

电容在电路板中非常常见,类别纷繁复杂,本文化繁为简,主要介绍下常见电容。

qq_40170041的博客 768

STM32F103电压采集proteus仿真

基于HAL库,仿真单片机型号为stm32f103R6,代码keil5。通过单片机的ADC采集功能,测量四路电压,数据经由DMA传输,并将结果通过串口输出,结果比较确,误差在0.01V左右。目前仿真采集四路比较稳定,多了会乱码。proteus版本8.11安装包链接:https://pan.baidu.com/s/1yhNKLl1lGSU9KU0tTuAxcg?pwd=dxe8提取码:dxe8项目下载地址:.

weixin_42490599的博客 4766

【人工智能笔记】第四十四节:TF2实现VITGAN对抗生成网络,Discriminator鉴别器 实现

【人工智能笔记】第四十四节:TF2实现VITGAN对抗生成网络,Discriminator鉴别器 实现

不定时更新AI技术tensorflow实现方式,欢迎关注,有问题请私信我。 488

四足机器人机械结构设计:从腿型到驱动的全面解析

本文全面解析了四足机器人机械结构设计的核心要点。资深工程师老张深入探讨了并联腿与串联腿的选型策略、不同腿型布局对稳定性的影响,并详细对比了皮带轮与连杆驱动方式的优劣。文章结合实战经验,强调了足端设计、材料选择及整体结构轻量化等关键细节,为机器人开发者提供了从理论到实践的宝贵指导。

assembly8low的博客 632

segmenter

位置编码

qq_44832048的博客 1641

将机器人urdf模型转换为Mujoco环境下的mjcf模型

在使用gym环境进行人形模型站立训练的过程中,我想要将之前ros环境下的机器人urdf模型导入到mujoco环境下,这时候就需要将urdf模型转换为mujoco专用的mjcf模型。-AzureLoong.urdf是机器人模型(我这里使用青龙的模型);--custom_robot.xml是转换完成之后的机器人模型的名字和格式;包要求 Python 版本必须是 3.11 或更高),保证自己的其他训练环境和依赖不被干扰。首先将meshes文件迁移到需要输出的目录下,然后再运行转换命令。最后就可以成功输出了。

weixin_44334573的博客 3754

无法加载文件:C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本编程

当您遇到类似于"无法加载文件:C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本编程"的错误消息时,请按照上述步骤来解决问题。当您尝试加载文件C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1时,可能会遇到类似于"无法加载文件:C:\Users\Lenovo\AppData\Roaming\npm\cnpm.ps1,因为在此系统上禁止运行脚本编程"的错误消息。请注意,更改执行策略可能会带来一些安全风险。

PixelInk的博客 1921

【读点论文】ViTGAN: Training GANs with Vision Transformers 将视觉transformer和gan结合起来

ViTGAN: Training GANs with Vision Transformers Abstract 最近,Vision Transformers(vits)在图像识别方面表现出了具有竞争力的性能,需要较少的视觉特定的归纳偏差。 在本文中,研究这种观察是否可以扩展到图像生成。将ViT整合到生成式对抗网络(GANs)中。本文观察到,现有的GANs正则化方法与自注意力的交互作用很差,导致训练过程中严重的不稳定性。 为了解决这个问题,引入了新的正则化技术来训练具有vit的gan。根据经验,

白水空空 8667

超声相控阵合成孔径成像FPGA设计介绍

1.仿真预览 2.理论分析 系统的基本结构如下所示: 以上是实际中完整的结构,系统中会涉及到两块板子中的时钟,这个就是设计一个时钟采样同步的问题,即所谓的时钟同步。一般这种情况,往往使用内插的方式来解决。这是由于,在实际中,超生波接收到的信号是由本身系统发送出去反射回来得到的,因此从另外一方面将,其是同步的。但是在接收的时候通过内插的方法解决其中的延迟问题。 根据论文中的介绍,整个系统分为如下几个部分: ·模拟发送信号,这个部分由MATLAB产生测试数据并量...

FPGA/MATLAB学习教程/源码/项目合作开发 2069

论文笔记:ViTGAN: Training GANs with Vision Transformers

ViT+GAN

qq_40206371的博客 1172

从传感器到执行-智能家居 Agent 的感知-决策-执行闭环

本文提出了一种面向智能家居的感知型Agent架构,通过"感知-决策-执行"的闭环系统实现智能化控制。感知模块整合多源传感器数据,决策模块基于规则或机器学习模型生成控制策略,执行模块完成设备操作。系统能够实时监测环境参数和用户状态,自动调节温度、照明等设备,提升家居舒适度。该架构可扩展为多模态感知与强化学习相结合的智能系统,为智慧家居发展提供技术基础。

一键难忘的博客 1122

【ComfyUI专栏】安装Triton组件

Triton是一款支持大模型推理的深度学习加速组件,最初仅支持Linux平台,现已通过开源社区适配Windows系统。针对SageAttention的安装,建议使用3.2.0Post10版本(该版本提供封装好的安装包,更高版本仅有源码)。用户可通过GitHub获取安装资源,或直接使用pip命令"pip install triton-windows"进行安装。安装时需注意:1)在虚拟环境中操作;2)使用管理员权限。相关资源链接已在文中提供。

技术与管理的平衡木- 1859

【深度学习】详解 Vision Transformer (ViT)

【深度学习】详解 Vision Transformer (ViT)

闻韶 20万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

ViTGAN:用视觉Transformer训练生成性对抗网络 Training GANs with Vision Transformers

不使用卷积或池化,能否使用视觉 Transformer 来完成图像生成任务?更具体而言:能否使用 ViT 来训练生成对抗网络(GAN)并使之达到与已被广泛研究过的基于 CNN 的 GAN 相媲美的质量?

白洞,白色的明天在等着我们 4781

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

ViTGAN: Training GANs with Vision Transformers阅读笔记

Task 图像的生成 Key idea 利用transformer作为基本的计算单元,替代传统的CNN,同时基于GAN的基础架构,去完成图像的生成任务。 面对的问题: (1) GAN的正则化方法与注意力机制的交互很差,导致训练中稳定性不足 (2)在鉴别器训练的后期,对抗训练经常受到高方差梯度(或尖峰梯度)的阻碍。高方差梯度会在训练的时候导致震荡,非常影响训练的效果。 解决的方法: (1) 在判别器中,研究者重新审视了自注意力的 Lipschitz 性质,在此基础上他们设计了一种加强了..

baidu_40582876的博客 1516

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

VIT学习(一)

VIT学习(一)

weixin_49171641的博客 4335

探索未来图像生成的边界:ViTGAN全面解析与推荐

探索未来图像生成的边界:ViTGAN全面解析与推荐 去发现同类优质开源项目:https://gitcode.com/ 在人工智能领域,尤其是深度学习的浪潮下,生成对抗网络(GANs)以其惊人的创造力成为图像合成的明星技术。今天,我们将深入探索一个结合了最新视觉前沿的创新项目——ViTGAN,这是基于PyTorch实现的一项突破性工作,它巧妙地将视觉Transformer的力量引入到GAN的训练中,...

gitblog_00043的博客 1032

【补丁嵌入】Patch Embedding 完全指南:视觉模型的“第一口”

本文深入解析了视觉模型中Patch Embedding的核心原理与实现。作为ViT等架构的第一步,Patch Embedding通过将图像划分为不重叠的Patch并进行线性映射,将高分辨率像素转换为低维特征序列,解决了直接处理像素带来的计算复杂度、信息冗余和语义鸿沟问题。文章详细拆解了其三个关键步骤(网格划分、展平、线性映射),揭示了其与卷积操作的数学等价性,并提供了PyTorch实现代码。特别分析了Patch Embedding在DCVC-RT等架构中实现下采样和特征提取的双重作用。通过与传统卷积的对比,

m0_74779543的博客 1542

ViT实战一:Patch_embedding

本文是针对ViT这篇博文中patch_embedding的笔记。

L2306665的博客 1054

PatchEmbed代码讲解记录

PatchEmbed讲解

vivi_cin的博客 1463

深度学习之图像分类(二十六)-- ConvMixer 网络详解

深度学习之图像分类(二十六)ConvMixer 网络详解 目录深度学习之图像分类(二十六)ConvMixer 网络详解1. 前言2. A Simple Model: ConvMixer2.1 Patch Embedding2.2 ConvMixer Layer2.3 ConvMixer 网络结构2.4 实现代码:3. Weight Visualizations4. 反思与总结 本次学习继 CNN --> Transformer --> MLP 架构之后,探讨究竟是 Transformer 和 M

木卯_THU的博客 8922

[Transformer]Patches Are All You Need?

Patches are All you NeedAbstractSection I IntroductionSection II A simple Model: ConvMixerSection III ExperimentsSection IV Related WorkSection V Conclusion Abstract ICLR2022 Under Review 
Paper 
 
Code 

 

虽然CNN多年来一直作为视觉任务的主流框架,近期的实验表明基于Transformer的模型,尤其

qq_37151108的博客 3059
上一篇: 【人工智能笔记】第四十一节:TF2实现VITGAN对抗生成网络,Generator生成器 实现
下一篇: 【人工智能笔记】第四十三节:TF2实现VITGAN对抗生成网络,ISN 实现
PPHT-H
博客等级 码龄18年 6254粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

PPHT-H

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值