去噪扩散隐式模型

dataset_name = "datasets/oxford-102-flowers/"

dataset_repetitions = 2 # 数据集重复
num_epochs = 25
image_size = 64 # 模型训练和生成图像的大小
# KID = 内核初始距离
kid_image_size = 75
# 从噪声中逐步“去噪”或“扩散”到最终图像所需的步骤数。
kid_diffusion_steps = 5
# 这个参数可能用于在训练或可视化过程中,展示从噪声到最终图像的扩散过程中的中间步骤数。
# 它帮助理解模型是如何逐步生成图像的。
plot_diffusion_steps = 20
# 这两个参数可能用于控制训练过程中信号(即实际图像内容)与噪声的比例。在扩散模型的训练初期,
# 噪声比例可能很高,随着训练的进行,信号比例逐渐增加。这些参数有助于精细控制这一过程。
min_signal_rate = 0.02
max_signal_rate = 0.95

# 体系结构
embedding_dims = 32
# 用于将位置信息或频率信息嵌入到模型中。它定义了嵌入的最大频率,这可能影响模型捕捉细节的能力。
embedding_max_frequency = 1000.0 # 频率
widths = [32, 64, 96, 128]
block_depth = 2
# 优化
batch_size = 64
# 指数移动平均(EMA)的衰减率。EMA是一种平滑技术,用于在训练过程中跟踪模型参数的平均值
ema = 0.999
learning_rate = 1e-3
weight_decay = 1e-4

因为我想弄懂stable Diffusion,但是下载不了权重,把整个源码扒出来后,transformer那块很容易理解,百度人工智能后,知道这个模型需要三个东西,第一个就是从噪音中生成图片的模型,就是这个隐式模型,另一个模型是vae,这个一会再说,大致看了下文本提示那个,首先得分词文本数据,之后它是交由transformer编码为语义向量,之后要把图片数据和文本数据传人模型训练吧,我想先把从噪音中生成图片的模型原理搞懂,之后去粗取精,更改stable diffusion,它太大了

diffusion_times = keras.random.uniform(
            shape=(batch_size, 1, 1, 1), minval=0.0, maxval=1.0
        )
        # 计算噪声率和信号率:根据扩散时间,通过self.diffusion_schedule计算噪声率和信号率。
        # 噪声率决定了噪声在混合图像中的比例,而信号率则是真实图像内容的比例。在训练开始时,噪声率
        # 接近1,表示图像主要由噪声组成。
        noise_rates, signal_rates = self.diffusion_schedule(diffusion_times)
        # 混合图像:将归一化的图像与噪声按计算出的噪声率和信号率进行混合,生成带噪声的图像。
        noisy_images = signal_rates * images + noise_rates * noises 根据随机生成的diffusion_times得到信号率和噪音率,这两个值的平方和是1,之后得到噪音图片

with tf.GradientTape() as tape:
            # train the network to separate noisy images to their components
            # 训练网络分离噪声数据和真实图片数据
            pred_noises, pred_images = self.denoise(
                noisy_images, noise_rates, signal_rates, training=True
            )
            # 计算梯度并更新参数:根据噪声损失(noise_loss)计算网络参数的梯度,并使用优化器(
            # self.optimizer)更新这些参数。
            noise_loss = self.loss(noises, pred_noises)  # used for training
            image_loss = self.loss(images, pred_images)  # only used as metric
        # 计算噪声损失对网络可训练参数的梯度,并更新参数
        gradients = tape.gradient(noise_loss, self.network.trainable_weights)
        self.optimizer.apply_gradients(zip(gradients, self.network.trainable_weights))

 pred_noises = network([noisy_images, noise_rates**2], training=training)
        # 计算去噪后的图像:利用预测到的噪声成分(pred_noises)、噪声率(noise_rates)和信号率(signal_rates),
        # 通过公式(noisy_images - noise_rates * pred_noises) / signal_rates来计算去噪后的图像(pred_images)
        # 。这个公式是扩散模型逆扩散步骤的核心,它试图从带有噪声的图像中恢复出原始图像。
        # 噪声的预测:pred_noises 是模型根据含噪图像 noisy_images 和当前的噪声率 noise_rates(或其某种变换,如平方
        # )预测出的噪声成分。这个预测是模型在训练过程中学习到的,旨在捕捉含噪图像中的噪声部分
        # 噪声的去除:通过将预测的噪声 pred_noises 乘以相应的噪声率 noise_rates 并从含噪图像 noisy_images 中减去,
        # 我们试图去除图像中的噪声部分。这里的 noise_rates 可能用于调整噪声的强度和尺度,
        # 信号的恢复:然而,仅仅去除噪声并不足以得到完全干净的图像,因为去除噪声后可能会留下信号的衰减部分。因此,我们需要通过除以
        # signal_rates 来恢复信号的原始强度。这里的 signal_rates 代表了在不同噪声水平下信号的保留程度,其值通常与噪声率成反比,
        # 因为随着噪声的增加,信号的可见性会降低
        # signal_rates 这个术语在标准的扩散模型文献中可能并不常见。在扩散模型中,更常见的是使用与噪声方差(或噪声率的平方)相对应的
        # “信号方差”或“剩余方差”,它表示在给定噪声水平下信号(即原始图像内容)的剩余部分。在实际应用中,这个“剩余方差”可能直接用于调整
        # 信号的强度,而不是通过一个显式的 signal_rates 参数。
        pred_images = (noisy_images - noise_rates * pred_noises) / signal_rates 网络会先下采样,之后上采样,提取特征,得到噪音数据的预测,之后得到预测的图片,之后计算预测和真实的损失,用噪音损失更新模型参数,之所以只用噪音损失计算梯度,很容易理解,因为这个网络就是根据 噪音图片预测噪音数据的,肯定要根据噪音损失计算梯度,根据我一贯的观点,损失在指引模型训练,你仔细琢磨,就发现训练模型就是科学精神,用真实观察和预测间的损失来比较这个理论是否对,所以随着损失下降,这个模型最终应该能成功预测噪音图片中那些数据是噪音数据,自然其他的数据就是真实图片数据,loss=keras.losses.mean_absolute_error这里 损失是mae,评估指标有self.noise_loss_tracker = keras.metrics.Mean(name="n_loss")
        self.image_loss_tracker = keras.metrics.Mean(name="i_loss")
        self.kid = KID(name="kid") 噪音损失,图片损失,kid,kid是真实图片和生成图片间的核距离吧

经过多个轮次训练后,模型生成图片越来越清晰,说明模型预测越来越准确,它学会了识别噪音数据和真实图片数据

 

 

 

 

 

经过30个轮次后的训练效果

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

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

相关文章

NEMESIS: NORMALIZING THE SOFT-PROMPT VECTORS OF VISION-LANGUAGE MODELS

文章汇总 发现的现象 动机的描述 Norm增加会导致性能下降,Norm降低会导致性能上升。于是作者提出: 我们需要规范化VLMs中的软提示吗? 实验验证 在左图中的紫色块中可以看到,随着模型性能的上升,Norm value会不断下降。 解决…

C语言 | Leetcode C语言题解之第419题棋盘上的战舰

题目&#xff1a; 题解&#xff1a; int countBattleships(char** board, int boardSize, int* boardColSize){int row boardSize;int col boardColSize[0];int ans 0;for (int i 0; i < row; i) {for (int j 0; j < col; j) {if (board[i][j] X) {if (i > 0 &…

ant vue3 datePicker默认显示英文

改前&#xff1a; 改后&#xff1a; 处理方法&#xff1a; 在App.vue页加上以下导入即可 import dayjs from dayjs; import dayjs/locale/zh-cn dayjs.locale(zh-cn); 如图&#xff1a;

电力电塔电线缺陷检测数据集 voc yolo

电力 电塔电线缺陷检测数据集 10000张 带标注 voc yolo 电力电塔电线缺陷检测数据集 数据集描述 该数据集旨在用于电力电塔和电线的缺陷检测任务&#xff0c;涵盖多种常见的缺陷类型。数据集包含了大量的图像及其对应的标注信息&#xff0c;可用于训练计算机视觉模型&#x…

如何搭建虚拟机Ubuntu?

1.创建新虚拟机 2.进入新建虚拟机向导&#xff0c;选择稍后安装 3. 选择Linux中的Ubuntu 4.为虚拟机命名设置路径 5. 设置磁盘容量大小 6.选择自定义硬件 7.设置设备状态 8.完成Ubuntu虚拟机创建

【Verilog学习日常】—牛客网刷题—Verilog快速入门—VL24

边沿检测 有一个缓慢变化的1bit信号a&#xff0c;编写一个程序检测a信号的上升沿给出指示信号rise&#xff0c;当a信号出现下降沿时给出指示信号down。 注&#xff1a;rise,down应为单脉冲信号&#xff0c;在相应边沿出现时的下一个时钟为高&#xff0c;之后恢复到0&#xff0…

Pandas_数据结构详解

1.创建DataFrame对象 概述 DataFrame是一个表格型的结构化数据结构&#xff0c;它含有一组或多组有序的列&#xff08;Series&#xff09;&#xff0c;每列可以是不同的值类型&#xff08;数值、字符串、布尔值等&#xff09;。 DataFrame是Pandas中的最基本的数据结构对象&am…

【kafka-04】kafka线上问题以及高效原理

Kafka系列整体栏目 内容链接地址【一】afka安装和基本核心概念https://zhenghuisheng.blog.csdn.net/article/details/142213307【二】kafka集群搭建https://zhenghuisheng.blog.csdn.net/article/details/142253288【三】springboot整合kafka以及核心参数详解https://zhenghui…

中间件安全(二)

本文仅作为学习参考使用&#xff0c;本文作者对任何使用本文进行渗透攻击破坏不负任何责任。 前言: 前文链接&#xff1a;中间件安全&#xff08;一&#xff09; 本文主要讲解Couchdb数据库未授权越权漏洞&#xff08;CVE-2017-12635&#xff09;。 靶场链接&#xff1a;Vu…

【内网渗透】最保姆级的春秋云镜Privilege打靶笔记

目录 flag1 flag2 flag3 flag4 flag1 fscan扫外网 访问./www.zip拿到源码 tools/content-log.php存在任意文件读取 根据提示读到Jenkins初始管理员密码 ./tools/content-log.php?logfile../../../../../../../../../ProgramData/Jenkins/.jenkins/secrets/initialAdminP…

Docker UI强大之处?

DockerUI是一款由国内开发者打造的优秀Docker可视化管理工具。它拥有简洁直观的用户界面&#xff0c;使得Docker主机管理、集群管理和任务编排变得轻松简单。DockerUI不仅能展示资源利用率、系统信息和更新日志&#xff0c;还提供了镜像管理功能&#xff0c;帮助用户高效清理中…

Spring Boot 整合 MyBatis 的详细步骤(两种方式)

1. Spring Boot 配置 MyBatis 的详细步骤 1、首先&#xff0c;我们创建相关测试的数据库&#xff0c;数据表。如下&#xff1a; CREATE DATABASE springboot_mybatis USE springboot_mybatisCREATE TABLE monster ( id int not null auto_increment, age int not null, birthda…

Vue 实现高级穿梭框 Transfer 封装

文章目录 01 基础信息1.1. 技术栈1.2. 组件设计a. 竖版设计稿b. 横版设计稿 02 技术方案&#xff08;1&#xff09;初定义数据&#xff08;2&#xff09;注意事项&#xff08;3&#xff09;逻辑草图 03 代码示例3.1. 组件使用3.2. 组件源码./TransferPlus/index.vue./TransferP…

动物识别系统Python+卷积神经网络算法+TensorFlow+人工智能+图像识别+计算机毕业设计项目

一、介绍 动物识别系统。本项目以Python作为主要编程语言&#xff0c;并基于TensorFlow搭建ResNet50卷积神经网络算法模型&#xff0c;通过收集4种常见的动物图像数据集&#xff08;猫、狗、鸡、马&#xff09;然后进行模型训练&#xff0c;得到一个识别精度较高的模型文件&am…

开源项目 GAN 漫画风格化 UGATIT

开源项目&#xff1a;DataBall / UGATIT GitCode * 数据集 * [该项目制作的训练集的数据集下载地址(百度网盘 Password: gxl1 )](https://pan.baidu.com/s/1683TRcv3r3o7jSitq3VyYA) * 预训练模型 * [预训练模型下载地址(百度网盘 Password: khbg )](https://pan.ba…

Request 跨线程访问问题

优质博文&#xff1a;IT-BLOG-CN 此篇文章是基于 Tomcat Request Cookie 丢失问题 文章的一个延续 一、Request 跨线程访问问题 问题代码摘要 为了方便选择发起get请求&#xff0c;然后只需要传递一个参数就行&#xff0c;核心步骤是要把request传递到异步线程里面去&#xf…

GAMES104:15 游戏引擎的玩法系统基础-学习笔记

文章目录 0&#xff0c;游戏性课程框架一&#xff0c;事件机制1.1 事件的定义1.2 callback的注册1.3 事件的分发系统 二&#xff0c;游戏逻辑与脚本系统2.1 特点和常见脚本语言2.2 脚本语言的GO管理2.3 脚本语言的架构2.4 可视化脚本 三&#xff0c;Gameplay 开发中的3C &#…

一体化平台数据中心安全建设方案(Word完整原件)

第 一 章 信息安全保障系统 1.1 系统概述 1.2 安全标准 1.3 系统架构 1.4 系统详细设计 1.4.1 计算环境安全 1.4.2 区域边界安全 1.4.3 通信网络安全 1.4.4 管理中心安全 1.5 安全设备及系统 1.5.1 VPN加密系统 1.5.2 入侵防御系统 1.5.3 防火墙系统 1.5.4 安全审计系统 1.5.5 …

2018年国赛高教杯数学建模D题汽车总装线的配置问题解题全过程文档及程序

2018年国赛高教杯数学建模 D题 汽车总装线的配置问题 一&#xff0e;问题背景   某汽车公司生产多种型号的汽车&#xff0c;每种型号由品牌、配置、动力、驱动、颜色5种属性确定。品牌分为A1和A2两种&#xff0c;配置分为B1、B2、B3、B4、B5和B6六种&#xff0c;动力分为汽油…

使用Apache SeaTunnel高效集成和管理SftpFile数据源

本文为Apache SeaTunnel已经支持的SftpFile Source Connector使用文档&#xff0c;旨在帮助读者理解如何高效地使用SFTP文件源连接器&#xff0c;以便轻松地使用Apache SeaTunnel集成和管理您的SftpFil数据源。 SftpFile 是指通过 SFTP&#xff08;Secure File Transfer Proto…