首页 > 其他分享 >昇思25天学习打卡营第24天|生成式-Diffusion扩散模型

昇思25天学习打卡营第24天|生成式-Diffusion扩散模型

时间:2024-07-28 22:55:19浏览次数:13  
标签:Diffusion dim None self 生成式 init bias 打卡 NCHW

打卡

目录

打卡

理解扩散模型

环境设置

Diffusion Model 简介

扩散模型实现原理

Diffusion 前向过程

Diffusion 逆向过程

训练算法总结

U-Net神经网络预测噪声

构建Diffusion模型

准备函数和类

位置向量

ResNet/ConvNeXT块

Attention模块

组归一化

条件U-Net

正向扩散 (core)

数据准备与处理

前向扩散定义

时间步下的前向扩散可视化 

模型损失函数定义

案例实操

数据准备与处理

从模型中采样

训练过程

推理过程(从模型中采样)

参考


本次内容是基于Hugging Face:The Annotated Diffusion Model一文翻译迁移到mindspore中的讲解实现,具体的diffusion理论理解和改善需要额外通过其他参考链接进行知识补充。

即使如此,本次内容的代码部分的核心部分也几乎都涉及到了。

理解扩散模型

本文的介绍是基于denoising diffusion probabilistic model (DDPM),DDPM的应用案例,例如有,OpenAI主导的GLIDEDALL-E 2、海德堡大学主导的潜在扩散、Google Brain主导的图像生成

本文是在Phil Wang 基于PyTorch框架的复现 的基础上,迁移到MindSpore AI框架上实现的。

环境设置

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

pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore==2.2.14
pip install download
pip install numpy tqdm matplotlib
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 download

import 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 DynamicLossScaler


### 设置全局种子。全局种子可用于numpy.random, mindspore.common.Initializer以及mindspore.nn.probability.distribution。
## 如果没有设置全局种子,这些包将会各自使用自己的种子    
### 种子是随机数生成器的起点,决定了随机数序列。给定相同的种子,随机数生成器会产生相同的序列,这就使得实验结果可以复现。
### 如果每次运行都使用不同的种子,那么即使是相同的代码也会产生不同的结果,这在调试和模型训练中可能会导致问题。
### 全局种子的作用是确保在多次运行程序或训练模型时,随机数生成的结果是可以复现的。
ms.set_seed(0) 

Diffusion Model 简介

Diffusion 模型从纯噪声开始通过一个神经网络学习逐步去噪,最终得到一个实际图像。

Diffusion 模型通过下面两个过程处理图像:

相关文章

  • 【代码随想录训练营第42期 Day10打卡 LeetCode 232.用栈实现队列 225. 用队列实现栈 2
    目录一、做题心得二、题目与题解题目一:232.用栈实现队列题目链接题解题目二:225.用队列实现栈题目链接题解题目三:20.有效的括号题目链接题解题目四:1047.删除字符串中的所有相邻重复项 题目链接题解三、小结一、做题心得今天是代码随想录训练营打卡的第1......
  • 打卡信奥刷题(455)用Scratch图形化工具信奥P9299[普及组/提高组] [CCC 2023 J1] Deliv-e
    [CCC2023J1]Deliv-e-droid题面翻译机器人Deliv-e-droid在送快递,如果它成功地将一个快递送达,则它获得505050元钱,如果未能成功送达,它被扣除......
  • stable diffusion中的UNet2DConditionModel代码解读
    UNet2DConditionModel总体结构图片来自于https://zhuanlan.zhihu.com/p/635204519stablediffusion运行unet部分的代码。noise_pred=self.unet(sample=latent_model_input,#(2,4,64,64)生成的latenttimestep=t,#时刻tencoder_hidden_states=pro......
  • 《昇思25天学习打卡营第7天|函数式自动微分》
    函数式自动微分神经网络的训练主要使用反向传播算法,模型预测值(logits)与正确标签(label)送入损失函数(lossfunction)获得loss,然后进行反向传播计算,求得梯度(gradients),最终更新至模型参数(parameters)。自动微分能够计算可导函数在某点处的导数值,是反向传播算法的一般化。自动微分......
  • 《昇思25天学习打卡营第5天|数据变换 Transforms》
    数据变换Transforms通常情况下,直接加载的原始数据并不能直接送入神经网络进行训练,此时我们需要对其进行数据预处理。MindSpore提供不同种类的数据变换(Transforms),配合数据处理Pipeline来实现数据预处理。所有的Transforms均可通过map方法传入,实现对指定数据列的处理......
  • 代码随想录day24打卡|| 93复原ip地址 78子集| 90子集||
    93复原ip地址力扣题目链接题目描述有效IP地址 正好由四个整数(每个整数位于 0 到 255 之间组成,且不能含有前导 0),整数之间用 '.' 分隔。例如:"0.1.2.201" 和"192.168.1.1" 是 有效 IP地址,但是 "0.011.255.245"、"192.168.1.312" 和 "[email protected]" 是 无......
  • Stable Diffusion 改变光线的能力简直太强大了!
    在没有StableDiffusion的年代,对照片的光线进行后期处理,基本要依靠Photoshop。比如添加一个曝光图层。这个技术对于形状简单的物体来说很方便,因为光线效果很好模拟。但对于形状复杂的主体,比如人来说,要想实现自然的光线效果,你最好得有美术功底,并配备一个数位板。Stable......
  • 万字长文,带你从0-1入门Stable Diffusion
    一、本地部署StableDiffusion前言目前市面上比较权威,并能用于工作中的AI绘画软件其实就两款。一个叫Midjourney(简称MJ),另一个叫Stable-Diffusion(简称SD)。MJ需要付费使用,而SD开源免费,但是上手难度和学习成本略大,并且非常吃电脑配置(显卡、内存)。和Midjourney相比,StableD......
  • Diffusion|DDPM 理解、数学、代码
    Diffusion论文:DenoisingDiffusionProbabilisticModels参考博客openinnewwindow;参考paddle版本代码:aistudio实践链接openinnewwindow该文章主要对DDPM论文中的公式进行小白推导,并根据ppdiffuser进行DDPM探索。读者能够对论文中的大部分公式如何得来,用在了什么......
  • Diffusion|DDIM 理解、数学、代码
    DIFFUSION系列笔记|DDIM数学、思考与ppdiffuser代码探索论文:DENOISINGDIFFUSIONIMPLICITMODELS参考博客openinnewwindow;参考aistudionotebook链接,其中包含详细的公式与代码探索:linkopeninnewwindow该文章主要对DDIM论文中的公式进行小白推导,同时笔者将使用......