【Datawhale】扩散模型学习笔记 第一次打卡

文章目录

  • 扩散模型学习笔记
    • 1. 扩散模型库Diffusers
      • 1.1 安装
      • 1.2 使用
    • 2. 从零开始搭建扩散模型
      • 2.1 数据准备
      • 2.2 损坏过程
      • 2.3 模型构建
      • 2.4 模型训练
      • 2.5 采样
    • 3. webui

扩散模型学习笔记

1. 扩散模型库Diffusers

1.1 安装

由于diffusers库更新较快,所以建议时常upgrade

# pip
pip install --upgrade diffusers[torch]
# conda
conda install -c conda-forge diffusers

1.2 使用

from diffusers import DiffusionPipelinegenerator = DiffusionPipeline.from_pretrained("runwayml/stable-diffusion-v1-5", use_safetensors=True)
generator.to("cuda")
image = generator("An image of a squirrel in Picasso style").images[0]
image.save("image_of_squirrel_painting.png")

2. 从零开始搭建扩散模型

2.1 数据准备

在这个示例中,我们将使用经典的MNIST数据集作为示范。MNIST数据集包含28x28像素的手写数字图像,每个像素值的范围从0到1。

2.2 损坏过程

我们希望能够控制输入数据的损坏程度,因此引入了一个参数 amount,该参数控制了噪声的程度。你可以使用以下方法来添加噪声:

noise = torch.rand_like(x)
noisy_x = (1 - amount) * x + amount * noise

如果 amount 为0,则输入数据保持不变。如果 amount 为1,输入数据将变为纯粹的噪声。通过混合输入数据和噪声,我们可以确保输出数据的范围仍在0到1之间。

2.3 模型构建

我们将使用UNet模型来处理噪声图像。UNet是一种用于图像分割的常见架构,由压缩路径和扩展路径组成。在这个示范中,我们将构建一个简化版本的UNet,它接收单通道图像,并通过卷积层在下行路径(down_layers)和上行路径(up_layers)之间具有残差连接。我们将使用最大池化进行下采样和 nn.Upsample 进行上采样。

2.4 模型训练

在模型训练过程中,模型的任务是将损坏的输入 noisy_x 转换为对原始图像 x 的最佳估计。我们使用均方误差(MSE)来比较模型的预测与真实值,然后使用反向传播算法来更新模型的参数。

2.5 采样

如果模型在高噪声水平下的预测不够理想,可以进行采样以生成更好的图像。你可以从完全随机的噪声图像开始,然后逐渐接近模型的预测。这意味着你可以检查模型的预测结果,然后只向预测的方向移动一小步,比如向预测值移动20%。这将生成一个具有较少噪声的图像,其中可能包含一些关于输入数据的结构提示。将这个新图像输入模型,希望得到比第一个预测更好的结果。这个过程可以迭代多次,以逐渐减小噪声并生成更好的图像。

这是一个简化的扩散模型搭建和训练的概述。你可以根据具体的问题和数据进行修改和优化,以获得更好的结果。希望这些步骤能帮助你理解如何搭建扩散模型并训练它。

from diffusers import DDPMScheduler, UNet2DModel
from PIL import Image
import torch
import numpy as npscheduler = DDPMScheduler.from_pretrained("google/ddpm-cat-256")
model = UNet2DModel.from_pretrained("google/ddpm-cat-256").to("cuda")
scheduler.set_timesteps(50)sample_size = model.config.sample_size
noise = torch.randn((1, 3, sample_size, sample_size)).to("cuda")
input = noisefor t in scheduler.timesteps:with torch.no_grad():noisy_residual = model(input, t).sampleprev_noisy_sample = scheduler.step(noisy_residual, t, input).prev_sampleinput = prev_noisy_sampleimage = (input / 2 + 0.5).clamp(0, 1)
image = image.cpu().permute(0, 2, 3, 1).numpy()[0]
image = Image.fromarray((image * 255).round().astype("uint8"))
image

3. webui

参考我的另一篇博客:https://blog.csdn.net/qq_44824148/article/details/130389357

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

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

相关文章

矩阵系统功能/如何操作

矩阵系统是一种广泛应用于企业管理、组织结构设计和战略制定领域的系统。它是由多个因素相互作用而形成的网络,旨在实现特定的组织目标。矩阵系统的主要特点是将不同功能和区域的部分组合在一起,形成一个完整的系统,从而更好地满足组织的需求…

04、MySQL-------MyCat实现分库分表

目录 九、MyCat实现分库分表1、分库分表介绍:横向(水平)拆分**垂直分表**:水平分表:**分库分表** 纵向(垂直)拆分分表字段选择 2、分库分表操作:1、分析图:2、克隆主从3、…

QT中窗口自绘制效果展示

项目中需要使用QT进行窗口自绘,前期先做一下技术探索,参考相关资料代码熟悉流程。本着代码是最好的老师原则,在此记录一下。 目录 1.运行效果 2.代码结构 3.具体代码 1.运行效果 2.代码结构 3.具体代码 myspeed.pro QT core gui…

notes_NLP

RNN > LSTM, GRU model特点RNNLSTMinputforgetputput;GRUresetupdate;参数比LSTM少,计算效率更高; 循环神经网络(RNN/LSTM/GRU) 人人都能看懂的GRU transformer > self-attention 根据Query和Key计…

陪诊小程序|陪诊小程序关爱健康,无忧陪伴

随着社会发展和人们生活水平的提高,健康问题成为人们关注的焦点。然而,在就医过程中,许多患者常常感到孤独和无助,缺乏得到家人陪伴的温暖与安慰。为了解决这一问题,我们公司开发了一款创新的陪诊小程序软件&#xff0…

Pandas数据处理分析系列2-数据如何导入

Pandas Excel 数据导入 Pandas库提供了一组强大的输入/输出(I/O)函数(简称为:I/O API),用于读取和写入各种数据格式,目前已支持常见的多种外数据格式。 Pandas 常见读取方法如下表: 可以看出,在使用Pandas 读取数据格式文件时,只需一个方法则可,不同的方法参数, 可…

【C++学习笔记】内联函数

1. 概念 以inline修饰的函数叫做内联函数,编译时C编译器会在调用内联函数的地方展开,没有函数调 用建立栈帧的开销,内联函数提升程序运行的效率。 如果在上述函数前增加inline关键字将其改成内联函数,在编译期间编译器会用函数…

Mysql 以字符分割一行变多行(substring_index函数)

问题 有时候我们表里会存在某个字符(例如经常用到的,)分割的分割的数据,但是在使用的时候要将存在字符分割数据拆分,我们一般的做法先从数据库中将数据查询出,在内存中通过字符串分割函数split进行处理,不会在sql中通过函数进行拆…

SpringCloud学习笔记(上):服务注册与发现:Eureka、Zookeeper、Consul+负载均衡服务调用:Ribbon

壹、零基础 一、微服务架构零基础理论入门 SpringCloud分布式微服务架构的一站式解决方案,是多种微服务架构落地技术的集合体,俗称微服务全家桶。 二、从2.2.x和H版开始说起 springboot版本选择: git源码地址:https://github.…

【超详细】CentOS 7安装MySQL 5.7【安装及密码配置、字符集配置、远程连接配置】

准备工作:CentOS 7系统,并确保可以联通网络 1、获取MySQL 5.7 Community Repository软件包 注意:这里使用的是root用户身份。 wget https://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm2、安装软件包 rpm -ivh mysql5…

SoftPlc on docker 测试

Swagger 返回的数据 为 Base64编码,要查看 用下面的在线工具转换HEX Base64 to Hex | Base64 Decode | Base64 Converter | Base64 软件主页https://github.com/fbarresi/SoftPlc 安装 docker stop softplc docker rm softplc docker pull fbarresi/softplc:lat…

全网最丑焊锡教程(仅排针焊接心得)

一直以来玩各种开发板,焊接水平太差始终是阻碍我买性价比高的板子的最大原因。淘宝上好多芯片搭载上肥猪流板子是不包排针焊接的。终于下定决心要克服这个困难。不过,只是会焊接排针在高手面前最好不要说自己会焊锡,这应该是两码事。 首先上…

高级软件工程师职业发展路径及适学人群

大数据赋能产业,改变人与场景的交互方式,随着大数据在各行各业融合应用的不断深化,预计2020年中国大数据市场市值将突破10000亿元。 未来发展,大数据应用范围越加宽广,包括:新零售、旅游、广告、电商…

【javascript】内部引入与外部引入javascript

创建a.html 内部引入&#xff1a; 外部引入&#xff1a; 创建a.js 注意&#xff1a; 我这里的a.js和a.html是放在同一个目录下&#xff0c;如果a.js放在js的目录下&#xff0c;a.html 调用a.js的时候 <script src"/js/a.js"></script>

结合领域驱动设计,理解TOGAF之架构方法论

TOGAF&#xff08;The Open Group Architecture Framework&#xff09;是一个开放的架构方法论&#xff0c;旨在支持组织制定和实施企业架构。它提供了一种框架来创建和管理企业架构&#xff0c;并包含了一组最佳实践&#xff0c;帮助组织实现其业务目标。 TOGAF框架包括四个主…

【疯狂Java讲义】Java学习记录(IO流)

IO流 IO&#xff1a;Input / Output 完成输入 / 输出 应用程序运行时——数据在内存中 ←→ 把数据写入硬盘&#xff08;磁带&#xff09; 内存中的数据不可持久保存 输入&#xff1a;从外部存储器&#xff08;硬盘、磁带、U盘&#…

flask整合rabbitMQ插件的方式

文章目录 二、Python-flask-rabbitMQ-插件方式整合引言具体步骤1 安装依赖&#xff1a;2 编写实体类&#xff1a;3 编写消费者和生产者&#xff1a;4 初始化消费者和生产者&#xff1a;5 其他地方使用生产者 二、Python-flask-rabbitMQ-插件方式整合 引言 当今互联网应用的高…

BERT变体(1):ALBERT、RoBERTa、ELECTRA、SpanBERT

Author:龙箬 Computer Application Technology Change the World with Data and Artificial Intelligence ! CSDNweixin_43975035 天下之大&#xff0c;虽离家万里&#xff0c;何处不可往&#xff01;何事不可为&#xff01; 1. ALBERT \qquad ALBERT的英文全称为A Lite versio…

【推荐算法】ctr cvr联合建模问题合集

ctr和cvr分开建模相比ctcvr的优势&#xff1f; 在电商搜索推荐排序中&#xff0c;将ctr和cvr分开建模&#xff0c;相比直接建模ctcvr的优势是什么&#xff1f; - 萧瑟的回答 - 知乎 总结&#xff1a; 1、ctr的数据可以试试获取&#xff0c;能实时训练。但是cvr存在延迟现象&…

最近学习内容(2023-10-21)

最近学习内容 Linux编译链接命令一条有用的删除可执行文件的bash命令gcc 在macos 的编译选项&#xff0c;其中-g会生成一个.dSYM文件夹to long don’t read 工具的使用gnu bintuils 的使用&#xff0c;但是很可惜macos上的是Mach-O&#xff0c;不是ELFaxel多线程下载器和其余的…