昇思25天学习打卡营第19天|Diffusion扩散模型
课程打卡凭证

Diffusion模型
扩散模型(Diffusion Model)是一种生成式模型,近年来在图像生成领域取得了显著进展。扩散模型的基本原理是通过模拟物理中的扩散过程来生成样本,它模拟了数据从有序状态(如清晰的图像或文本)逐步演化为无序状态(如噪声)的过程,以及这个过程的逆过程,即从噪声中逐步恢复出原始数据。这种模型通过前向扩散过程(添加噪声)和逆向扩散过程(去除噪声)来训练,从而学习到数据的内在结构和分布规律。
前向过程
在前向过程中,模型通过对原始数据(如图像)逐步添加噪声(如高斯噪声)来破坏其结构,直到数据完全失去其原有的特征。这个过程可以看作是一种“模糊化”或“混合化”的过程,通常通过在多个时间步长上添加噪声来实现。在数学上可以表示为:

其中xt表示第t个时间步的数据,N表示高斯分布,βt是控制噪声添加量的参数。
逆向过程
在逆向过程中,模型通过学习如何逐步去除噪声来恢复数据的原始结构。这是前向扩散过程的逆过程,也是Diffusion模型生成新数据的关键步骤,它通过训练一个神经网络来估计在每个时间步长上如何去噪。在数学上可以表示为:

即学习一个参数化的逆向变换pθ,其中μθ和Σθ是需要学习的参数。
U-Net神经网络预测噪声
这里可以参考昇思25天学习打卡营第18天|Pix2Pix实现图像转换-CSDN博客中对U-Net的应用。
训练过程
准备工作

导入必要的库和模块。


定义辅助函数和残差类。

定义上采样和下采样操作的类。
位置向量

定义基于正弦和余弦函数的周期性位置编码的类,用于为输入序列添加位置信息,使模型能够利用输入序列中的顺序信息。
ResNet/ConvNeXT块

Block类实现了一个基本的卷积块,其中包含卷积层、归一化层和激活层。它可以接受一个可选的scale_shift 参数,用于缩放和偏移输出。

ConvNextBlock类实现了一个更复杂的卷积块,包含一个多层感知机(MLP)条件模块和一系列卷积层、归一化层和激活层。它可以接受time_emb,用于在特定任务中加入时间依赖性。
Attention模块

Attention类实现了多头自注意力机制,它包括查询(Q)、键(K)和值(V)的计算,以及注意力权重的计算和应用。

LinearAttention类实现了一种简化的自注意力机制,通过线性化计算减少计算复杂度。
组归一化

PreNorm类实现了在应用特定函数(如卷积或注意力机制)之前进行归一化操作的功能,它首先对输入进行归一化,然后将归一化后的结果传递给指定的函数。
条件U-Net




Unet类实现了一个U-Net模型,结合了卷积和自注意力机制,还包括了时间嵌入(time_emb)以支持时间序列数据或其他需要时间上下文的任务。
正向扩散

定义一个线性增长的beta调度器。

计算损失权重和后验方差等参数。

下载用于添加噪音的猫猫图像。

定义转换列表,对图像数据集进行加载和预处理,用于后续的机器学习模型训练或其他图像处理任务。

定义一个反向转换函数compose和一组用于将张量转换为PIL图像的操作reverse_transform。

展示处理效果。

定义一个函数q_sample,用于从给定的初始图像x_start和时间步长t中生成一个样本。

给定时间步长40,在猫猫图像上生成噪声。

在不同的时间步长上生成噪声。

定义一个函数p_losses,用于计算预测噪声和真实噪声之间的损失。
数据准备与处理

下载并加载数据集,为数据集设定基本参数。

定义数据变换操作transforms,先随机对图像进行水平翻转,再将图像转换为张量格式,最后对张量进行归一化操作,将像素值从 [0, 1] 的范围映射到 [-1, 1] 的范围。
采样

根据扩散模型生成样本,从初始化纯噪声开始,逐步迭代生成每个时间步的样本,直到最后一个时间步。
训练过程



推理过程



整个去噪过程的动图如上图所示。
昇腾计算产业是基于昇腾系列(HUAWEI Ascend)处理器和基础软件构建的全栈 AI计算基础设施、行业应用及服务,https://devpress.csdn.net/organization/setting/general/146749包括昇腾系列处理器、系列硬件、CANN、AI计算框架、应用使能、开发工具链、管理运维工具、行业应用及服务等全产业链
更多推荐

所有评论(0)