当前位置: 首页 > news >正文

昇思MindSpore进阶教程--Diffusion扩散模型(上)

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。
技术上主攻前端开发、鸿蒙开发和AI算法研究。
努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧

正文

关于扩散模型(Diffusion Models)有很多种理解,本文的介绍是基于denoising diffusion probabilistic model (DDPM),DDPM已经在(无)条件图像/音频/视频生成领域取得了较多显著的成果,现有的比较受欢迎的的例子包括由OpenAI主导的GLIDE和DALL-E 2、由海德堡大学主导的潜在扩散和由Google Brain主导的图像生成。

实际上生成模型的扩散概念已经在(Sohl-Dickstein et al., 2015)中介绍过。然而,直到(Song et al., 2019)(斯坦福大学)和(Ho et al., 2020)(在Google Brain)才各自独立地改进了这种方法。

本文是在Phil Wang基于PyTorch框架的复现的基础上(而它本身又是基于TensorFlow实现),迁移到MindSpore AI框架上实现的。在这里插入图片描述
实验中我们采用离散时间(潜在变量模型)的观点,另外,读者也可以查看有关于扩散模型的其他几个观点!

实验开始之前请确保安装并导入所需的库(假设您已经安装了MindSpore、download、dataset、matplotlib以及tqdm)。

import math
from functools import partial
%matplotlib inline
import matplotlib.pyplot as plt
from tqdm.auto import tqdm
import numpy as np
from multiprocessing import cpu_count
from download import downloadimport mindspore as ms
import mindspore.nn as nn
import mindspore.ops as ops
from mindspore import Tensor, Parameter
from mindspore import dtype as mstype
from mindspore.dataset.vision import Resize, Inter, CenterCrop, ToTensor, RandomHorizontalFlip, ToPIL
from mindspore.common.initializer import initializer
from mindspore.amp import DynamicLossScalerms.set_seed(0)

模型简介

什么是Diffusion Model?

在这里插入图片描述

索引的正向和反向过程都发生在某些有限时间步长
(DDPM作者使用
)内。从
开始,在数据分布中采样真实图像
(本文使用一张来自ImageNet的猫图像形象的展示了diffusion正向添加噪声的过程),正向过程在每个时间步长
都从高斯分布中采样一些噪声,再添加到上一个时刻的图像中。假定给定一个足够大的
和一个在每个时间步长添加噪声的良好时间表,您最终会在
通过渐进的过程得到所谓的各向同性的高斯分布。

扩散模型实现原理

Diffusion 前向过程

所谓前向过程,即向图片上加噪声的过程。虽然这个步骤无法做到图片生成,但这是理解diffusion model以及构建训练样本至关重要的一步。 首先我们需要一个可控的损失函数,并运用神经网络对其进行优化。

Diffusion 逆向过程

为了解决上述问题,我们将利用神经网络来近似(学习)这个条件概率分布
, 其中
是神经网络的参数。如果说前向过程(forward)是加噪的过程,那么逆向过程(reverse)就是diffusion的去噪推断过程,而通过神经网络学习并表示
的过程就是Diffusion 逆向去噪的核心。

U-Net神经网络预测噪声

神经网络需要在特定时间步长接收带噪声的图像,并返回预测的噪声。请注意,预测噪声是与输入图像具有相同大小/分辨率的张量。因此,从技术上讲,网络接受并输出相同形状的张量。那么我们可以用什么类型的神经网络来实现呢?

这里通常使用的是非常相似的自动编码器,您可能还记得典型的“深度学习入门”教程。自动编码器在编码器和解码器之间有一个所谓的“bottleneck”层。编码器首先将图像编码为一个称为“bottleneck”的较小的隐藏表示,然后解码器将该隐藏表示解码回实际图像。这迫使网络只保留bottleneck层中最重要的信息。

在模型结构方面,DDPM的作者选择了U-Net,出自(Ronneberger et al.,2015)(当时,它在医学图像分割方面取得了最先进的结果)。这个网络就像任何自动编码器一样,在中间由一个bottleneck组成,确保网络只学习最重要的信息。重要的是,它在编码器和解码器之间引入了残差连接,极大地改善了梯度流(灵感来自于(He et al., 2015))。
在这里插入图片描述
可以看出,U-Net模型首先对输入进行下采样(即,在空间分辨率方面使输入更小),之后执行上采样。

相关文章:

昇思MindSpore进阶教程--Diffusion扩散模型(上)

大家好,我是刘明,明志科技创始人,华为昇思MindSpore布道师。 技术上主攻前端开发、鸿蒙开发和AI算法研究。 努力为大家带来持续的技术分享,如果你也喜欢我的文章,就点个关注吧 正文 关于扩散模型(Diffusi…...

Nginx:proxy_pass指令

proxy_pass 指令在 Nginx 中是实现反向代理和负载均衡的重要指令。 一. 反向代理 在反向代理的场景下,proxy_pass 指令用于将接收到的请求转发给另一个后端服务器。后端服务器地址可以是 IP 地址加端口、域名加端口、或者一个完整的 URL。 注意事项 proxy_pass …...

【AI学习】Mamba学习(十):HiPPO总结

前面用五篇文章陆续学了HiPPO框架。 这里再进行一下总结。 总结 HiPPO,高阶多项式投影,high-order polynomial projection operators 为了解决从序列数据中建模和学习的问题,尤其是长序列,十万甚至百万长度的序列,使…...

AI编程新纪元:Cursor与V0引领的技术变革

#1024程序员节 | 征文# AI编程新纪元:Cursor与V0引领的技术变革 作为一名SAP业务顾问,虽然我懂一些ABAP开发,但是我对于前后端开发是完全不懂的,我一直对前后端开发怀有浓厚兴趣,总想着自己能开发出一些好玩的东西&…...

python——类

问:小编为什么突然开始发python?难道C语言你不行了? 废话少说,让我们进入python中的类的学习!! (一)基本知识 (1)掌握类的概念 1、类的定义: 即…...

走廊泼水节——求维持最小生成树的完全图的最小边权和

题目 思考 代码 #include <bits/stdc.h> using namespace std; const int N 6010; const int M N; int p[N], sz[N]; struct edge{int a;int b;int c;bool operator < (const edge& v) const{return c < v.c;} }e[M]; int find(int x) {if(p[x] ! x) p[x] …...

LC:动态规划-买卖股票

文章目录 121. 买卖股票的最佳时机122. 买卖股票的最佳时机 II714. 买卖股票的最佳时机含手续费309. 买卖股票的最佳时机含冷冻期 121. 买卖股票的最佳时机 链接&#xff1a;https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/description/ 使用贪心&#xff0c…...

FLINK SQL 任务参数

在Flink SQL任务中&#xff0c;参数配置对于任务的性能和稳定性至关重要。以下是对运行时参数、优化器参数和表参数的详细解析&#xff1a; 一、运行时参数 运行时参数主要影响Flink作业在执行过程中的行为。以下是一些关键的运行时参数&#xff1a; 并行度&#xff08;Para…...

HCIP——以太网交换安全(四)DHCP Snooping

目录 一、DHCP Snooping的知识点 二、DHCP Snooping实验拓扑 三、总结 一、DHCP Snooping的知识点 1.1、DHCP snooping 概述&#xff1a; ①DHCP Snooping使能DHCP的一种安全特性&#xff0c;用于保证DHCP客户端从合法的DHCP服务端获取IP地址。DHCP服务器记录DHCP客户端IP…...

k8s worker 节点关机 sts 管理的 pod 无法迁移

背景 1.28.2 版本 k8s 中的一台 worker 节点内存异常&#xff0c;需要关机换内存&#xff0c;正好可以测试一下 pod 的迁移。 发现 deployment 管理的 pod 是能够重新创建飘到其他节点上的&#xff0c;但是 statefulset 管理的 pod 一直处于 Terminating 状态无法迁移&#…...

排序04 视频播放建模

视频播放时长 用p拟合y&#xff0c;t是用户的实际观看时长&#xff0c;用y和p熵作为损失函数&#xff0c;使得p接近y。 输出z,对z做sigmoid变换。 exp(z)可以视为对播放时长的预估 视频完播 回归方法 二元分类方法 调整&#xff1a;预估完播率不能直接使用...

【常见大模型API调用】第三篇:清华智谱--智谱AI

1. 公司及模型介绍 智谱AI是一家由清华大学计算机系知识工程实验室的技术成果转化而来的AI知识智能技术开发商。智谱AI致力于打造新一代认知智能大模型&#xff0c;专注于做大模型的中国创新。 2024年1月16日&#xff0c;智谱AI在首届技术开放日上发布了新一代基座大模型GLM-…...

LayerSkip – Meta推出加速大型语言模型推理过程的技术

我们提出的 LayerSkip 是一种端到端的解决方案&#xff0c;可加快大型语言模型&#xff08;LLM&#xff09;的推理速度。 首先&#xff0c;在训练过程中&#xff0c;我们采用了层间丢弃技术(layer dropout)&#xff0c;早期层间丢弃率较低&#xff0c;后期层间丢弃率较高。 其次…...

环境变量与本地变量(Linux)

引言 在当今的计算机技术领域&#xff0c;Linux操作系统以其稳定性和灵活性而广受欢迎。它不仅是服务器和开发者的首选平台&#xff0c;也是探索计算机科学和系统编程的宝库。在这个强大的操作系统中&#xff0c;环境变量与本地变量扮演着至关重要的角色&#xff0c;它们是管理…...

【完-网络安全】Windows防火墙及出入站规则

文章目录 防火墙入站和出站的区别域网络、专用网络、公用网络的区别 防火墙 防火墙默认状态一般是出站允许&#xff0c;入站阻止。 入站和出站的区别 入站就是别人来访问我们的主机&#xff0c;也就是正向shell的操作 出站就是反向shell&#xff0c;主机需要主动连接kali&am…...

Vue学习记录之十七 css中样式穿透及新特征介绍

一、scoped原理 在vue页面的css中,有一个设置为scoped,使用以后dom的节点会出现下面的规则。其实我们打完包就是一个html页面,如果不做处理,将会导致css混乱。 给HTML的DOM节点加一个不重复data属性(形如:data-v-123)来表示他的唯一性在每句css选择器的末尾(编译后的生成的…...

Nature 正刊丨海洋涡旋中常见的地下热浪和寒潮

01摘要 由于全球变暖&#xff0c;极端海洋温度事件变得越来越普遍&#xff0c;造成了灾难性的生态和社会经济影响1,2,3,4,5。尽管基于卫星观测对表层海洋热浪&#xff08;MHW&#xff09;和海洋寒潮&#xff08;MCS&#xff09;进行了广泛的研究6,7&#xff0c;但我们对这些极…...

代码随想录算法训练营第六十二天| prim算法,kruskal算法

训练营六十二天打卡&#xff0c;图论比较难&#xff0c;坚持下来胜利就在眼前&#xff01; 53.卡码网【寻宝】 题目链接 解题过程 没做过类似的题目&#xff0c;跟着答案敲了一遍最小生成树 可以使用 prim算法 也可以使用 kruskal算法计算出来。prim算法 是从节点的角度 采用…...

Newstar_week1_week2_wp

week1 wp crypto 一眼秒了 n费马分解再rsa flag&#xff1a; import libnum import gmpy2 from Crypto.Util.number import * p 9648423029010515676590551740010426534945737639235739800643989352039852507298491399561035009163427050370107570733633350911691280297…...

今天我们研究一段代码(异或位运算)

let a 18 // 甲 let b 20 // 乙a a ^ b b a ^ b a a ^ b console.log("a",a) // a 20 console.log("b",b) // b 18今天我们就研究上面这一段代码&#xff0c;简单解释一下&#xff0c;初始化一个a 18 b 20&#xff0c; 中间经过了三次的异或之后…...

2026年青少年信息素养大赛备赛指南(含历年真题)

&#x1f4e2; 2026年青少年信息素养大赛备赛指南各位家长、老师好&#xff01;随着教育的不断发展&#xff0c;少儿编程已成为孩子综合能力培养的重要一环。今天给大家整理一下近期备受关注的青少年信息素养大赛相关资讯&#xff0c;以及备赛资源。&#x1f3c6; 赛事简介全国…...

如何构建LaTeX-Workshop的自动化测试与持续集成流程:开发者完整指南

如何构建LaTeX-Workshop的自动化测试与持续集成流程&#xff1a;开发者完整指南 【免费下载链接】LaTeX-Workshop Boost LaTeX typesetting efficiency with preview, compile, autocomplete, colorize, and more. 项目地址: https://gitcode.com/gh_mirrors/la/LaTeX-Worksh…...

Android混淆配置终极指南:基于Awesome Android库的完整ProGuard规则

Android混淆配置终极指南&#xff1a;基于Awesome Android库的完整ProGuard规则 【免费下载链接】awesome-android A curated list of awesome Android packages and resources. 项目地址: https://gitcode.com/gh_mirrors/awe/awesome-android 在Android应用开发中&…...

golang.org/x/net WebSocket开发完全手册:实现实时双向通信

golang.org/x/net WebSocket开发完全手册&#xff1a;实现实时双向通信 【免费下载链接】net [mirror] Go supplementary network libraries 项目地址: https://gitcode.com/gh_mirrors/ne/net 在现代Web应用开发中&#xff0c;实时双向通信已成为提升用户体验的关键技术…...

wUU代码混淆实战指南:使用Obfuscar构建坚不可摧的安全防线

在当今数字化时代&#xff0c;保护.NET应用程序的源代码安全变得尤为重要。你是否担心自己的知识产权被轻易窃取&#xff1f;是否希望防止竞争对手通过反编译分析你的核心业务逻辑&#xff1f;今天&#xff0c;我将为你详细介绍一款强大的开源混淆工具——Obfuscar&#xff0c;…...

利用快马平台快速构建node.js express api原型,十分钟搭建可运行后端服务

今天想和大家分享一个快速搭建Node.js后端服务的实践心得。作为一个经常需要验证想法的开发者&#xff0c;我发现用InsCode(快马)平台可以省去很多环境配置的麻烦&#xff0c;特别适合做原型开发。 为什么选择Node.jsExpress组合 Express框架是Node.js生态中最轻量灵活的Web框架…...

如何通过哈氏训练提升孩子的学习能力以应对多动症表现和作业拖延症?

如何运用哈氏训练助力孩子克服多动症表现与作业拖延 哈氏训练是一种有效的应对策略&#xff0c;尤其对有多动症表现和作业拖延症的孩子。首先&#xff0c;这种训练方法可以帮助孩子建立稳定的日常作息&#xff0c;提高他们的注意力和自我控制能力。通过结构化的活动和渐进式的任…...

Spring Boot项目必备:用Arthas实现MyBatis Mapper热加载的完整配置流程

Spring Boot项目必备&#xff1a;用Arthas实现MyBatis Mapper热加载的完整配置流程 在持续交付的微服务架构中&#xff0c;开发团队经常面临一个共同挑战&#xff1a;每次修改MyBatis的Mapper XML文件后&#xff0c;都需要重启服务才能验证变更效果。这种低效的反馈循环严重拖慢…...

毫米波雷达数据处理避坑指南:AWR2243的complex1x与complex2x格式到底怎么选?

毫米波雷达数据格式深度解析&#xff1a;AWR2243的complex1x与complex2x实战选择策略 在毫米波雷达信号处理的实际工程中&#xff0c;ADC数据格式的选择往往被当作一个简单的配置参数&#xff0c;直到工程师们在后期信号处理阶段遇到难以解释的噪声问题或成像质量下降时&#x…...

Spring Boot 3.x面试全攻略:自动配置+事务+AOT,2026最新考点

文章目录一、开场&#xff1a;Spring Boot面试&#xff0c;你真的准备好了吗&#xff1f;二、自动配置&#xff1a;从"黑魔法"到"透明厨房"2.1 面试第一问&#xff1a;自动配置到底咋实现的&#xff1f;2.2 3.5版本新考点&#xff1a;TaskExecutor名称变更…...