扩散模型实战(五):采样过程

推荐阅读列表:

扩散模型实战(一):基本原理介绍

扩散模型实战(二):扩散模型的发展

​扩散模型实战(三):扩散模型的应用

扩散模型实战(四):从零构建扩散模型

       在扩散模型实战(四):从零构建扩散模型文章中已经介绍了在原始数据集MNIST中添加噪声以及基于基本的UNet网络训练扩散模型,模型已经可以进行预测,但是发现输入数据噪声量很大的时候预测的效果并不好,如下图所示:

       那如何改进呢?

       其实思路比较简单,就是按照预测的方向多迭代几次就可以,比如我们从完全的随机数开始按照上述思路进行扩散,下面是实现的代码:

# 采样策略:把采样过程拆解为5步,每次只前进一步n_steps = 5x = torch.rand(8, 1, 28, 28).to(device) # 从完全随机的值开始step_history = [x.detach().cpu()]pred_output_history = [] for i in range(n_steps):    with torch.no_grad():               # 在推理时不需要考虑张量的导数        pred = net(x)                   # 预测“去噪”后的图像    pred_output_history.append(pred.detach().cpu())                                # 将模型的输出保存下来,以便后续绘图时使用    mix_factor = 1/(n_steps - i)            # 设置朝着预测方向移动多少    x = x*(1-mix_factor) + pred*mix_factor  # 移动过程    step_history.append(x.detach().cpu())   # 记录每一次移动,以便后续 # 绘图时使用 fig, axs = plt.subplots(n_steps, 2, figsize=(9, 4), sharex=True)axs[0,0].set_title('x (model input)')axs[0,1].set_title('model prediction')for i in range(n_steps):    axs[i, 0].imshow(torchvision.utils.make_grid(step_history[i])       [0].clip(0, 1), cmap='Greys')    axs[i, 1].imshow(torchvision.utils.make_grid(pred_output_       history[i])[0].clip(0, 1), cmap='Greys')

我们执行5次迭代,观察一下模型预测的变化,输出结果如下图所示:

       从上图可以看出,模型在第一步就已经输出了去噪的图片,只是往最终的目标前进了一小步,效果不佳,但是迭代5次以后,发现效果越来越好。如果迭代更多次数,效果如何呢?

# 将采样过程拆解成40步n_steps = 40x = torch.rand(64, 1, 28, 28).to(device)for i in range(n_steps):    noise_amount = torch.ones((x.shape[0],)).to(device) * (1-(i/n_        steps))# 将噪声量从高到低移动    with torch.no_grad():        pred = net(x)    mix_factor = 1/(n_steps - i)    x = x*(1-mix_factor) + pred*mix_factorfig, ax = plt.subplots(1, 1, figsize=(12, 12))ax.imshow(torchvision.utils.make_grid(x.detach().cpu(), nrow=8)   [0].clip(0, 1), cmap='Greys')

       从上图可以看出,虽然在迭代多次以后,生成的图像越来越清晰,但是最终的效果仍然不是很好,我们可以尝试训练更长时间的扩散模型,并调整模型参数、学习率、优化器等。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2.含电热联合系统的微电网运行优化

含电热联合系统的微电网运行优化 MATLAB代码:含电热联合系统的微电网运行优化 关键词:微网 电热联合系统 优化调度 参考文档:《含电热联合系统的微电网运行优化》完全复现 仿真平台:MATLAB yalmipcplex [火]主要内容&#xf…

微服务引擎 MSE 全新升级,15 分钟快速体验微服务全栈能力

作者:草谷 前言 微服务引擎 MSE 全新发布!新版本带来了一系列令人振奋的特性和改进,让您更轻松、高效地构建和管理微服务应用程序。从快速入门到迁移优化,MSE 为开发人员提供了全方位的支持和解决方案。无论您是刚刚接触微服务还…

Python标准库概览

Python标准库概览 知识点 标准库: turtle库(必选)标准库: random库(必选)、time库(可选) 知识导图 1、turtle库概述 turtle(海龟)是Python重要的标准库之一,它能够进行基本的图形绘制。turtle库绘制图形有一个基本框架&#x…

【JavaEE】Spring全家桶实现AOP-统一处理

【JavaEE】AOP(2) 文章目录 【JavaEE】AOP(2)1. 统一登录校验处理1.1 自定义拦截器1.2 将自定义拦截器加入到系统配置1.3 测试1.4 对于静态资源的处理1.5 小练习:统一登录拦截处理1.6 拦截器原理1.6.1 执行流程1.6.2 源…

第60步 深度学习图像识别:误判病例分析(Pytorch)

基于WIN10的64位系统演示 一、写在前面 上期内容基于Tensorflow环境做了误判病例分析(传送门),考虑到不少模型在Tensorflow环境没有迁移学习的预训练模型,因此有必要在Pytorch环境也搞搞误判病例分析。 本期以SqueezeNet模型为…

Zenity 简介

什么使 Zenity Zenity 是一个开源的命令行工具,它提供了一种简单的方式来创建图形化的用户界面(GUI)对话框,以与用户进行交互。它基于 GTK 库,可以在 Linux 和其他 UNIX-like 系统上使用。 Zenity 可以通过命令行或脚…

Linux之基础IO文件系统讲解

基础IO文件系统讲解 回顾C语言读写文件读文件操作写文件操作输出信息到显示器的方法stdin & stdout & stderr总结 系统文件IOIO接口介绍文件描述符fd文件描述符的分配规则C标准库文件操作函数简易模拟实现重定向dup2 系统调用在minishell中添加重定向功能 FILE文件系统…

https 的ssl证书过期处理解决方案(lighthttpd)

更换证书:lighthttpd 配置文件位置:/opt/vmware/etc/lighttpd/lighttpd.conf (配置文件的最底部 G快速来到底部) 方案一:阿里云申请免费的证书 这里公司内网环境没有配置域名,可以创建一个临时域名&…

Facebook HiPlot “让理解高维数据变得容易”

在这个全球信息化的时代,数据量呈爆炸式增长,数据的复杂性也是如此。如何有效地处理高维数据并找到隐藏在其中的相关性和模式是一个严峻的挑战。近年来,可视化和可视化分析已被应用于该任务,并取得了一些积极成果。Facebook的新Hi…

三个视角解读ChatGPT在教学创新中的应用

第一,我们正处于一个学生使用ChatGPT等AI工具完成作业的时代,传统的教育方法需要适应变化。 教育工作者不应该因为学生利用了先进技术而惩罚他们,相反,应该专注于让学生去挑战超越AI能力范围的任务。这需要我们重新思考教育策略和…

LinkedList的顶级理解

目录 1.LinkedList的介绍 LinkedList的结构 2.LinkedList的模拟实现 2.1创建双链表 2.2头插法 2.3尾插法 2.4任意位置插入 2.5查找关键字 2.6链表长度 2.7遍历链表 2.8删除第一次出现关键字为key的节点 2.9删除所有值为key的节点 2.10清空链表 2.11完整代码 3.…

数据采集:selenium 获取 CDN 厂家各省市节点 IP

写在前面 工作需要遇到,简单整理理解不足小伙伴帮忙指正 对每个人而言,真正的职责只有一个:找到自我。然后在心中坚守其一生,全心全意,永不停息。所有其它的路都是不完整的,是人的逃避方式,是对…