去噪扩散模型

Denoising Diffusion Probabilistic Models

图像扩散模型是一种生成模型,它基于概率扩散过程来生成新的图像。请添加图片描述
核心步骤包括:(1)前向扩散过程;(2)逆向扩散过程

前向扩散过程(正向过程)

  • 这个过程从原始图像开始,逐步向图像添加噪声,直到图像完全变成噪声。这是一个由数据分布逐渐转变为简单噪声分布(通常是高斯分布)的过程。
  • 每一步添加噪声的操作都是可逆的,意味着理论上可以通过逆过程恢复原始图像。
  • 前向扩散过程可以数学上表示为一个马尔可夫链,其中每个状态是向图像添加一定量噪声的结果。

逆向扩散过程(反向过程)

  • 逆向过程的目标是从噪声图像恢复出原始图像。这个过程通过逐步减少噪声来实现,每一步都尝试预测并去除前一步添加的噪声。
  • 逆向过程也是一个马尔可夫链,但是它的转换是学习得到的,目的是逆转前向过程中的噪声添加。

扩散模型的训练涉及到学习逆向过程中的转换。这通常通过最小化原始图像和通过逆向过程生成的图像之间的差异来实现。训练过程中,模型需要学习如何从部分噪声的图像中预测缺失的部分,这通常通过比较噪声图像和去噪图像来完成。

在这里插入图片描述

代码实现

class DDPM(nn.Module):def __init__(self, nn_model, betas, n_T, device, drop_prob=0.1):super(DDPM, self).__init__()self.nn_model = nn_model.to(device)# 注册ddpm_schedules函数生成的字典中的缓冲区# 例如,后续可以访问self.sqrtabfor k, v in ddpm_schedules(betas[0], betas[1], n_T).items():self.register_buffer(k, v)self.n_T = n_T  # 总的时间步数self.device = device  # 设备(CPU或GPU)self.drop_prob = drop_prob  # Dropout概率self.loss_mse = nn.MSELoss()  # 均方误差损失函数def forward(self, x, c):"""训练时使用此方法,随机采样时间步和噪声"""# 随机采样时间步t,对于批次中的每个样本,t在1到n_T(包括两端)之间均匀分布_ts = torch.randint(1, self.n_T+1, (x.shape[0],)).to(self.device)  # 生成与输入x形状相同的标准正态分布噪声noise = torch.randn_like(x)  # 根据当前时间步和噪声计算x_t# x_t是输入x的噪声版本,噪声按时间t的累积产品(1-beta)的倒数的平方根缩放(sqrtab),# 输入x按累积产品alpha的平方根缩放(sqrtmab)x_t = (self.sqrtab[_ts, None, None, None] * x+ self.sqrtmab[_ts, None, None, None] * noise)  # 模型应从这个x_t预测“误差项”。# 这个误差项是实际添加的噪声和模型预测的噪声之间的差异,# 将用于计算损失。这个前向方法返回的损失就是我们计算的损失。# 为c中的每个元素创建一个以一定概率的dropout上下文掩码。# 这个掩码用于随机将c中的一些元素设置为零,这有助于防止过拟合。context_mask = torch.bernoulli(torch.zeros_like(c)+self.drop_prob).to(self.device)# 返回实际噪声和模型预测噪声之间的均方误差(MSE)。# 预测的噪声是通过将x_t和c传递给神经网络模型nn_model获得的,# 同时传递标准化的时间步_ts / self.n_T和上下文掩码。return self.loss_mse(noise, self.nn_model(x_t, c, _ts / self.n_T, context_mask))

参考代码链接

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

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

相关文章

No.4 笔记 | 探索网络安全:揭开Web世界的隐秘防线

在这个数字时代,网络安全无处不在。了解Web安全的基本知识,不仅能保护我们自己,也能帮助我们在技术上更进一步。让我们一起深入探索Web安全的世界,掌握那些必备的安全知识! 1. 客户端与WEB应用安全 前端漏洞&#xff1…

Spring Boot框架下的大学生就业招聘平台

5系统详细实现 5.1 用户模块的实现 5.1.1 求职信息管理 大学生就业招聘系统的用户可以管理自己的求职信息,可以对自己的求职信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 求职信息管理界面 5.1.2 首页 用户登录可以在首页看到招聘信息展示也一些求职…

STM32中断——外部中断

目录 一、概述 二、外部中断(Extern Interrupt简称EXTI) 三、实例-对射式红外传感器 1、配置中断: 2 、完整代码 一、概述 中断:在主程序运行过程中,出现了特定的中断触发条件(中断源),使得CPU暂停当…

【图论】树剖(上):重链剖分

一、前置知识清单 深度优先搜索DFS 点我复习图的存储 复习链接敬请期待树状数组 点我复习 二、树剖简介 树剖(树链剖分),是一种把树划分成链的算法,该算法分为重链剖分和长链剖分。 本文仅讨论重链剖分,长链剖分目前…

MySQL联合索引、索引下推Demo

1.联合索引 测试SQL语句如下:表test中共有4个字段(id, a, b, c),id为主键 drop table test;#建表 create table test(id bigint primary key auto_increment,a int,b int,c int )#表中插入数据 insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,…

算法修炼之路之滑动窗口

目录 一:滑动窗口的认识及模板 二:LeetcodeOJ练习 1.第一题 2.第二题 3.第三题 4.第四题 5.第五题 6.第六题 7.第七题 一:滑动窗口的认识及模板 这里先通过一道题来引出滑动窗口 LeetCode 209 长度最小的子数组 画图分析&…

aws(学习笔记第一课) AWS CLI,创建ec2 server以及drawio进行aws画图

aws(学习笔记第一课) 使用AWS CLI 学习内容: 使用AWS CLI配置密钥对创建ec2 server使用drawio(vscode插件)进行AWS的画图 1. 使用AWS CLI 注册AWS账号 AWS是通用的云计算平台,可以提供ec2,vpc,SNS以及clo…

使用 Python 遍历文件夹

要解决这个问题,使用 Python 的标准库可以很好地完成。我们要做的是遍历目录树,找到所有的 text 文件,读取内容,处理空行和空格,并将处理后的内容合并到一个新的文件中。 整体思路: 遍历子目录&#xff1…

2.3MyBatis——插件机制

2.3MyBatis——插件机制 1.基本用法2.原理探究2.1加载过程2.2执行过程2.2.1 插件的执行点2.2.2 SQL执行的几个阶段2.2.3 如何梳理出执行流程 插件机制是一款优秀框架不可或缺的组成部分,比如spring、dubbo,还有我们要聊的Mybatis等等。所谓插件&#xff…

vSAN02:容错、存储策略、文件服务、快照与备份、iSCSI

目录 vSAN容错条带化存储策略1. 创建新策略2. 应用存储策略 vSAN文件服务文件服务快照与备份 vSAN iSCSI目标服务 vSAN容错 FTT:Fault to Tolerance 允许故障数 故障域:每一台vSAN主机是一个故障域 - 假设3台超融合(3计算1存储)&…

力扣 简单 110.平衡二叉树

文章目录 题目介绍解法 题目介绍 解法 平衡二叉树:任意节点的左子树和右子树的高度之差的绝对值不超过 1 //利用递归方法自顶向下判断以每个节点为根节点的左右子树的最大深度是否大于1 class Solution {public boolean isBalanced(TreeNode root) {if(root null){return tr…

基于Java的GeoTools对Shapefile文件属性信息深度解析

目录 前言 一、Shapefile的属性列表信息 1、属性表格信息 2、属性表格包含的要素 二、GeoTools对属性表格的解析 1、常规解析方法 2、基于dbf文件的属性信息读取 三、总结 前言 ESRI Shapefile(shp),或简称shapefile,是美…

【Spring Boot React】Spring Boot和React教程 完整版

【Spring Boot & React】Spring Boot和React教程 在B站找到一个不错的SpringBoot和React的学习视频,作者是amigoscode 【Spring Boot & React】Spring Boot和React教程 2023年更新版【Spring Boot React】价值79.9美元,全栈开发,搭…

如何使用CMD命令启动应用程序(二)

说明:去年1024发布了一篇博客,介绍如何使用CMD命令启动应用程序,但实际情况,有些程序可能无法用配置环境变量的方式来启动,本文针对两种情况下的程序,如何使用CMD命令来启动,算是对上一篇博客的…

Qt操作主/从视图及XML——实例:汽车管理系统

目录 1. 主界面布局2.连接数据库3.主/从视图应用 1. 主界面布局 先创建一个QMainwindow&#xff0c;不带设计界面 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #include <QGroupBox> #include <QTableView> #include <QListWidg…

鸿蒙harmonyos next flutter混合开发之开发plugin(获取操作系统版本号)

创建Plugin为my_plugin flutter create --org com.example --templateplugin --platformsandroid,ios,ohos my_plugin 创建Application为my_application flutter create --org com.example my_application flutter_application引用flutter_plugin&#xff0c;在pubspec.yam…

如何解决 MySQL ERROR 1040 (08004): Too many connections ?

MySQL 是最流行的开源关系数据库管理系统之一&#xff0c;它也是开发人员中非常常用的数据库。即便它高度健壮和可伸缩性极强&#xff0c;像任何软件一样&#xff0c;它也可能出现错误。我们会经常遇到一个错误&#xff0c;特别是在高流量系统中&#xff0c;error 1040 (08004)…

51c视觉~CV~合集3

我自己的原文哦~ https://blog.51cto.com/whaosoft/11668984 一、 CV确定对象的方向 介绍如何使用OpenCV确定对象的方向(即旋转角度&#xff0c;以度为单位)。 先决条件 安装Python3.7或者更高版本。可以参考下文链接&#xff1a; https://automaticaddison.com/how-to-s…

阳台山足球营地的停车位探寻

阳台山足球营地的环境是真好哈。停车场名称&#xff1a;阳台山森林公园配套停车场。应该很多爬山的人车子也停在这里。而且我没想到的&#xff0c;阳台山的山泉水还有不少居民每天提着空桶去山上装。看来环境是真的很好哈 停车场有地面和地下停车场&#xff0c;停车位个数查不…

java 数据存储方式

1. 变量存储 这是最基本的数据存储方式&#xff0c;通过声明变量来存储数据。变量可以是基本数据类型&#xff08;如int、float、char等&#xff09;&#xff0c;也可以是引用数据类型&#xff08;如对象、数组等&#xff09;。变量存储的数据通常存储在内存中&#xff0c;随着…