【AI 绘画】 文生图图生图(基于diffusers)

news2024/9/20 18:31:31

AI 绘画- 文生图&图生图(基于diffusers)

1. 效果展示

本次测试主要结果展示如下:

SDXL文生图

在这里插入图片描述

可爱Lora
在这里插入图片描述

2. 基本原理

模型基本原理介绍如下

stable diffusion首先训练一个自编码器,学习将图像数据压缩为低维表示。通过使用训练过的编码器E,可以将全尺寸图像编码为低维潜在数据(压缩数据)。然后通过使用经过训练的解码器D,将潜在数据解码回图像。而扩散过程就是在低维的潜在空间完成,这也是为什么它比纯扩散模型更快。

模型基本构成:clip+vae + unet(扩散模型)

U-Net网络负责预测噪声,不断优化生成过程,在预测噪声的同时不断注入文本语义信息。而schedule算法对每次U-Net预测的噪声进行优化处理(动态调整预测的噪声,控制U-Net预测噪声的强度),从而统筹生成过程的进度。在SD中,U-Net的迭代优化步数大概是50或者100次,在这个过程中Latent Feature的质量不断的变好(纯噪声减少,图像语义信息增加,文本语义信息增加)。U-Net网络和Schedule算法的工作完成以后,SD模型会将优化迭代后的Latent Feature输入到图像解码器(VAE Decoder)中,将Latent Feature重建成像素级图像。
主要流程结构:

3. 环境安装

diffusers是Hugging Face推出的一个diffusion库,它提供了简单方便的diffusion推理训练pipe,同时拥有一个模型和数据社区,代码可以像torchhub一样直接从指定的仓库去调用别人上传的数据集和pretrain checkpoint。除此之外,安装方便,代码结构清晰,注释齐全,二次开发会十分有效率。

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

4. 代码实现

主要测试代码:

文生图


from diffusers import DiffusionPipeline
import torch


# load both base & refiner
# stabilityai/stable-diffusion-xl-base-1.0
base = DiffusionPipeline.from_pretrained(
    "../data/data282269/",device_map=None,torch_dtype=torch.float16, variant="fp16", use_safetensors=True
)


base.to("cuda")
refiner = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0",
    text_encoder_2=base.text_encoder_2,
    vae=base.vae,
    torch_dtype=torch.float16,
    use_safetensors=True,
    variant="fp16",
)
refiner.to("cuda")

# Define how many steps and what % of steps to be run on each experts (80/20) here
n_steps = 40
high_noise_frac = 0.8

prompt = "A majestic lion jumping from a big stone at night"#"A majestic lion jumping from a big stone at night"
negative_prompt = "(worst quality:2),(low quality:2),(normal quality:2),(greyscale:2),watermark, lowres, bad anatomy, error, missing fingers, extra digit, fewer digits, cropped"
# run both experts
image = base(
    prompt=prompt,
    negative_prompt = negative_prompt,
    num_inference_steps=n_steps,
  #  denoising_end=high_noise_frac,
    output_type="latent",
).images

image = refiner(
    prompt=prompt,
    negative_prompt = negative_prompt,
    num_inference_steps=n_steps,
    denoising_start=high_noise_frac,
    image=image,
).images[0]

image.save("output.png")

图生图

import torch
from diffusers import AutoPipelineForImage2Image
from diffusers.utils import make_image_grid, load_image

pipeline = AutoPipelineForImage2Image.from_pretrained(
    "stabilityai/stable-diffusion-xl-refiner-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
)
pipeline.enable_model_cpu_offload()
# remove following line if xFormers is not installed or you have PyTorch 2.0 or higher installed
pipeline.enable_xformers_memory_efficient_attention()

# prepare image
url = "./work/in.jpg"
init_image = load_image(url)

prompt = "A gril in a jungle, muted colors, detailed, 8k"

# pass prompt and image to pipeline
image = pipeline(prompt, image=init_image, num_inference_steps=30,strength=0.8).images[0] #,strength表示重绘强度
#make_image_grid([init_image, image], rows=1, cols=2)


image.save("img2img1.png")

附加Loral

加载多个loral,可用set_adapters设置不同权重

from diffusers import DiffusionPipeline
import torch

# load both base & refiner
base = DiffusionPipeline.from_pretrained(
    "stabilityai/stable-diffusion-xl-base-1.0", torch_dtype=torch.float16, variant="fp16", use_safetensors=True
)
base.to("cuda")

base.load_lora_weights("/home/adam.wang/model/sd", weight_name="cute2.safetensors", adapter_name="cute")
base.load_lora_weights("/home/adam.wang/model/sd", weight_name="looking_at_viewer.safetensors", adapter_name="looking")

base.set_adapters(["cute", "looking"], adapter_weights=[1.0, 0.8])
# Define how many steps and what % of steps to be run on each experts (80/20) here
n_steps = 35
high_noise_frac = 0.8

prompt = "blind box,1girl,hanfu,brown eyes,blush,looking at viewer,outdoors,full body,solo,smile,chibi,<lora:blind_box:0.8>,best quality,Bokeh,ultra-fine painting,sharp focus,physically-based rendering,extreme detail description,(EOS R8,50mm,F1.2,8K,RAW photo"#"A majestic lion jumping from a big stone at night"  east dragon,
negative_prompt = "nsfw,logo,text,badhandv4,EasyNegative,ng_deepnegative_v1_75t,rev2-badprompt,verybadimagenegative_v1.3,negative_hand-neg,mutated hands and fingers,poorly drawn face,extra limb,missing limb,disconnected limbs,malformed hands,ugly,"
# run both experts
lora_scale = 0.6 
image = base(
    prompt=prompt,
    cross_attention_kwargs={"scale": lora_scale},
    negative_prompt = negative_prompt,
    num_inference_steps=n_steps,
   # denoising_end=high_noise_frac,
    #output_type="latent",
).images[0]

image.save("t8.png")

扩展:添加不同的lora可以产生不同的效果,比如我们添加一个龙的背景lora,来生成不同风格的写真

5. 资源链接

https://www.liblib.art/modelinfo/8345679083144158adb64b80c58e3afd

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

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

相关文章

VINS-Fusion的点云转换成ego-planner能用的点云

背景 2013年智在飞翔比赛&#xff1a; RoboMaster | 无人飞行器智能感知技术竞赛https://www.robomaster.com/zh-CN/robo/drone?djifromnav_drone 用vins-fusion来定位&#xff0c;他自己会生成点云数据。 进一步用ego-planner来路径规划和避障&#xff0c;需要用到vins-f…

mpls静态lsp实验

实验需求 R1、R2和R3之间已经部署了IGP协议&#xff0c;故192.168.10.0/24与192.168.20.0/24网络之间已经能够互访。现要求通过配置 静态LSP&#xff0c;使得这两个网络之间能基于MPLS进行互访&#xff0c;标签分配如图 组网图 实验思路 1、R1、R2和R3之间已经部署了IGP协议…

非科班出身的你,如何转行AI算法工程师?

想从其他行业转行到算法工程师的人&#xff0c;无外乎以下几个原因&#xff1a; 现在工资太低工作没有前景对现在的工作没有热情对算法工程师很感兴趣 那么&#xff0c;如何成功转行&#xff1f;给大家整理一些学习方式。 1&#xff09;数据结构和算法&#xff1a;推荐大家使…

自动化测试系列:接口自动化测试框架--05通过邮件发送测试结果的封装

框架功能介绍 1.自动整理接口测试用例&#xff1a;只需使用抓包工具&#xff0c;将需要接口请求另存为HAR文件&#xff0c;执行har2excel.bat即可自动生成接口请求测试用例&#xff0c;同时将接口请求的host地址写入到配置文件&#xff08;测试用例仅生成正向用例&#xff0c;…

前端css线性渐变

background: linear-gradient(90deg,red,green); 1.支持多颜色渐变 2.支持多方向渐变 to left to top left 3.支持角度90deg <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA…

CDH 6.3.1 史上最全安装手册

因项目需要CDH&#xff0c;经过十来次的重复安装&#xff0c;反复踩坑、填坑、验证&#xff0c;终于了今日的成功。 基础设施 设置主机 Nodecloudera-scm-servercloudera-scm-agent操作系统cpu内存cdh-guance01✅✅Centos7.44核16Gcdh-guance02❎✅Centos7.44核16Gcdh-guanc…

Cesium.js:webGIS领域的翘楚,开源全球地理空间数据可视化框架.

说起数据可视化/数字孪生开发&#xff0c;少不了webGIS&#xff0c;聊起webGIS不得不提大名鼎鼎的Cesium.js框架。 CesiumJS是一个用于创建地理空间应用程序的开源JavaScript库。它提供了丰富的地图和地理空间数据的可视化功能&#xff0c;可以用于构建基于地理位置的3D地图、…

在天朝A股,抄底和摸顶,哪个更加困难?

在天朝股市&#xff0c;流传着这么一句话&#xff1a;新手死于追高&#xff0c;老手死于抄底。和“抄底”相对应的就是“摸顶”&#xff0c;有时候就琢磨着&#xff0c;抄底和摸顶&#xff0c;哪个更加困难&#xff1f; 盯着红绿相间的K线&#xff0c;看着起起伏伏的走势&#…

机器学习之随机森林

文章目录 1. 随机森林概述1.1 定义与起源1.2 与其他算法的比较 2. 随机森林的工作原理2.1 决策树基础2.2 Bagging机制2.3 随机性的引入 3. 随机森林的构建过程3.1 数据准备3.2 特征选择3.3 多棵树的集成 4. 随机森林的优缺点分析4.1 优势4.2 局限性 5. 随机森林的应用场景5.1 分…

学习008-02-05-03 Highlight Property Editors(突出显示属性编辑器)

Highlight Property Editors&#xff08;突出显示属性编辑器&#xff09; This lesson explains how to format data that satisfies the specified criteria. 本课介绍如何格式化满足指定条件的数据。 The instructions below show how to do the following: 以下说明显示了…

高性能跨平台网络通信框架 HP-Socket v6.0.2

项目主页 : http://www.oschina.net/p/hp-socket开发文档 : https://www.docin.com/p-4592706661.html下载地址 : https://github.com/ldcsaa/HP-SocketQQ Group: 44636872, 663903943 v6.0.2 更新 一、主要更新 优化Linux通信组件多路复用处理架构&#xff0c;避免“惊群”问…

SP:eric 靶场复现【附代码】(权限提升)

靶机下载地址&#xff1a; https://www.vulnhub.com/entry/sp-eric,274/https://www.vulnhub.com/entry/sp-eric,274/ 1. 主机发现端口扫描目录扫描敏感信息获取 1.1. 主机发现 nmap -sn 192.168.7.0/24|grep -B 2 08:00:27:75:19:80 1.2. 端口扫描 nmap 192.168.7.104 -p…

NetSuite Credit Memo总账影响无成本与存货内容应如何调整?

“某仓库是新建仓库&#xff0c;由于用户未正确初始化退货入库成本&#xff0c;导致7月所做的Credit Memo的总账影响缺少Inventory和COGS的内容。”这是用户当前所碰到的问题场景。 分析一下&#xff0c;实际上用户未从RMA出发走正常退货流程&#xff0c;而直接建立Credit Mem…

reactFiberLane

Lane (车道模型) 英文单词lane翻译成中文表示"车道, 航道"的意思, 所以很多文章都将Lanes模型称为车道模型 Lane模型的源码在ReactFiberLane.js, 源码中大量使用了位运算(有关位运算的讲解, 首先引入作者对Lane的解释(相应的 pr), 这里简单概括如下: Lane类型被定义…

T10打卡-学习笔记

&#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&#xff1a;K同学啊 配置环境 import matplotlib.pyplot as plt import numpy as np #隐藏警告 import warnings warnings.filterwarnings(ignore)from tensorflow.keras import …

RCE漏洞及绕过

目录 1、RCE概述 &#xff08;1&#xff09;命令执行函数 &#xff08;2&#xff09;代码执行函数 2、回调后门 3、eval和assert 限制字符长度绕过 &#xff08;1&#xff09;反引号或exec &#xff08;2&#xff09;file_put_contents写入文件 &#xff08;3&#xff…

数据结构——循环队列

目录 循环队列的基本知识 循环队列的实现 定义 各个接口的实现 循环队列的基本知识 循环队列的定义 循环队列&#xff08;Circular Queue&#xff09;是一种使用固定大小的数组实现的队列&#xff0c;它将数组的首尾相连&#xff0c;形成环形&#xff0c;以充分利用空间并实…

react组件优化之React.PureComponent,React.memo

在开发中我们经常会考虑项目的优化问题&#xff0c;react作为现在前端的热门框架用的人肯定是非常的多。项目的优化问题也是非常重要的一部分&#xff0c;能大大提高项目的流畅度&#xff0c;用户体验会非常好。react项目中会用到大量的组件嵌套&#xff0c;减少一些组件的不必…

第二证券:虚拟现实概念强势,博士眼镜三连板,星星科技涨停

虚拟现实概念14日盘中再度走强&#xff0c;到发稿&#xff0c;硕贝德、博士眼镜、星星科技“20cm”涨停&#xff0c;亚世光电、亿道信息、卓翼科技亦涨停&#xff0c;佳禾智能涨超9%。 值得注意的是&#xff0c;博士眼镜已连续3个交易日涨停。公司昨日在出资者互动途径表示&am…

【二叉树进阶】--- 根据二叉树创建字符串

Welcome to 9ilks Code World (๑•́ ₃ •̀๑) 个人主页: 9ilk (๑•́ ₃ •̀๑) 文章专栏&#xff1a; 数据结构 从本篇文章开始&#xff0c;博主将分享一些结合二叉树的进阶算法题。 &#x1f3e0; 根据二叉树创建字符串 &#x1f4cc; 题目内容 根据二叉…