stable-diffusion官方版本地复现手册(2023年4月10日)

stable diffusion v1.4官方版(CompVis)本地复现手册

主页:https://github.com/wjxpro

邮箱:804359553@qq.com

文章目录

  • **stable diffusion v1.4官方版(CompVis)本地复现手册**
    • 〇、说明
      • 环境
    • 一、准备
      • 1. [stable-diffusion](https://github.com/CompVis/stable-diffusion)(标题链接可点)
      • 2. [sd-v1-4.ckpt](https://huggingface.co/CompVis/stable-diffusion-v-1-4-original/tree/main)
      • 3. [clip-vit-large-patch14](https://huggingface.co/openai/clip-vit-large-patch14/tree/main)
      • 4. [safety_checker](https://huggingface.co/CompVis/stable-diffusion-v1-4/tree/main/safety_checker)
    • 二、构建
      • 1. ldm虚拟环境
      • 2. 使用
      • 3. 重要超参数解释
    • 三、修改源码
      • 超参数
      • 禁用安全检查器
      • 禁用不可见水印
    • 四、生成结果示例
    • 生成结果示例

〇、说明

对于只想体验stable-diffusion的朋友,可以参考这篇教程1使用网页版。对于想要进行深入研究、要进行本地版部署的朋友,现有教程大多使用基于WebUI版23以及非官方版4复现的,也有一些是基于官方版本56复现的,但是其版本已经过时,因此我重新复现了官方的CompVis v1.4版(2023年4月10日),希望能帮助到大家。

环境

windows环境下部署,需要有显卡,显存大于4G,显存大小影响可以生成图片的最大尺寸。工程最终大小约为7GB,请注意存储位置。

请自行配置Python运行环境(AnacondaVS Code)、CUDA、cudnn,注意修改国内镜像源,并保证可用。

一、准备

1. stable-diffusion(标题链接可点)

下载工程源码并解压,关于国内无法访问github,除了挂代理也可以通过修改DNS加速,工具下载地址。

2. sd-v1-4.ckpt

下载权重模型,只下载sd-v1-4.ckpt(约3.97GB)就可以。下载完成后,将其放在工程根目录下。

3. clip-vit-large-patch14

下载openai的分词器clip-vit-large-patch14,本人猜测这个模型用于将输入的prompt转换为stable-diffusion的输入特征。需要下载的内容包括:

  • pytorch_model.bin(约1.59GB)
  • config.json
  • merges.txt
  • preprocessor_config.json
  • special_tokens_map.json
  • tokenizer.json
  • tokenizer_config.json
  • vocab.json

下载完成后,在工程根目录创建文件夹openai\clip-vit-large-patch14,将下载的内容放入其中。

4. safety_checker

下载安全性检查器。这个模型用于检测生成的内容是否为NSFW内容,如果是,则将其替换为assets\rick.jpeg(你被骗了)。需要下载的内容包括:

  • pytorch_model.bin(约1.13GB)
  • config.json

下载完成后,在工程根目录创建文件夹CompVis\stable-diffusion-safety-checker,将下载的内容放入其中。

二、构建

1. ldm虚拟环境

参照源码README,在Anaconda环境下,可以使用如下命令创建并激活ldm虚拟环境:

conda env create -f environment.yaml
conda activate ldm

此处可能产生两个报错:

  1. ImportError: cannot import name 'SAFE_WEIGHTS_NAME' from 'transformers.utils'
    解决方案参照此issue:修改environments.yaml,将diffusers改为diffusers==0.12.1
  2. Pip subprocess error: ERROR: Command errored out with exit status 128: git fetch -q ...
    参照5的解释,因为环境中包含了两个从github上下载的子工程,所以这个问题需要检查当前网络环境对github的访问是否通畅,然后重新下载:
    # 查看已存在环境
    conda env list
    # 先切换到base环境
    conda activate base
    # 删除ldm
    conda env remove --name ldm
    
    也可以通过以下命令更新环境:
    conda env update -f environment.yaml
    

2. 使用

在工程根目录下,激活ldm虚拟环境,然后直接运行script中的脚本即可。如果使用命令行运行,一个示例命令如下:

python scripts/txt2img.py --ckpt "sd-v1-4.ckpt" --prompt "a photograph of an astronaut riding a horse" --plms --H 256 --W 256

3. 重要超参数解释

以文本生成图片(script\txt2img.py)为例:

超参数解释
ckpt模型权重文件路径(相对于根目录)
prompt生成图像需要的文本提示
H生成图像的高
W生成图像的宽
n_iter一次运行进行n次采样
n_samples一次采样生成n张图像
seed随机数种子,修改其值可生成不同的结果
skip_grid不生成拼接的图像,拼接的图像由n_itern_samples列构成
skip_save不生成独立的图像
outdir结果保存的文件夹路径
plms一个采样器,暂未深入研究

三、修改源码

超参数

可以直接修改超参数的默认值减少命令行输入内容,一个修改示例如下:
修改示例

推荐修改的超参数推荐修改值
ckptsd-v1-4.ckpt
plmsTrue
H256(适用于显存小的显卡)
W256(适用于显存小的显卡)

禁用安全检查器

安全检查器有1GB多,不想下载的朋友可以按如下方法进行修改。(NSFW警告)

  1. 注释掉27-29行的# load safety model内容:
# safety_model_id = "CompVis/stable-diffusion-safety-checker"
# safety_feature_extractor = AutoFeatureExtractor.from_pretrained(safety_model_id)
# safety_checker = StableDiffusionSafetyChecker.from_pretrained(safety_model_id)
  1. 注释掉88-95行check_safety函数:
# def check_safety(x_image):
#     safety_checker_input = safety_feature_extractor(numpy_to_pil(x_image), return_tensors="pt")
#     x_checked_image, has_nsfw_concept = safety_checker(images=x_image, clip_input=safety_checker_input.pixel_values)
#     assert x_checked_image.shape[0] == len(has_nsfw_concept)
#     for i in range(len(has_nsfw_concept)):
#         if has_nsfw_concept[i]:
#             x_checked_image[i] = load_replacement(x_checked_image[i])
#     return x_checked_image, has_nsfw_concept
  1. 318行内容修改:
x_checked_image, has_nsfw_concept = check_safety(x_samples_ddim)

修改为:

x_checked_image = x_samples_ddim

禁用不可见水印

  1. 注释掉262-265行内容:
# print("Creating invisible watermark encoder (see https://github.com/ShieldMnt/invisible-watermark)...")
# wm = "StableDiffusionV1"
# wm_encoder = WatermarkEncoder()
# wm_encoder.set_watermark('bytes', wm.encode('utf-8'))
  1. 注释掉327与343行内容:
# img = put_watermark(img, wm_encoder)

四、生成结果示例

默认prompt: a painting of a virus monster playing guitar

生成结果示例


  1. https://zhuanlan.zhihu.com/p/560226367 ↩︎

  2. https://zhuanlan.zhihu.com/p/617997179 ↩︎

  3. https://zhuanlan.zhihu.com/p/617997179 ↩︎

  4. https://zhuanlan.zhihu.com/p/565851314 ↩︎

  5. https://juejin.cn/post/7143441237037711396 ↩︎ ↩︎

  6. https://zhuanlan.zhihu.com/p/563731965 ↩︎

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

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

相关文章

leetcode:环形链表的入环点

题目描述 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 题目分析 我们假设起点到环的入口点的距离是L,入口点到相遇点的距离是X,环的长度是C 那么画图我们可以得知: 从开始到相遇时slow走的距离是LX从…

HarmonyOS ArkTS HTTP数据请求(九)

1 概述 日常生活中我们使用应用程序看新闻、发送消息等,都需要连接到互联网,从服务端获取数据。例如,新闻应用可以从新闻服务器中获取最新的热点新闻,从而给用户打造更加丰富、更加实用的体验。 那么要实现这样一种能实时从服务…

B033-Servlet交互 JSP

目录 ServletServlet的三大职责跳转:请求转发和重定向请求转发重定向汇总请求转发与重定向的区别用请求转发和重定向完善登录 JSP第一个JSP概述注释设置创建JSP文件默认字符编码集 JSP的java代码书写JSP的原理三大指令九大内置对象改造动态web工程进行示例内置对象名…

猫罐头多久喂一次?好用的猫罐头牌子推荐

猫爱吃猫罐头,包含各种美味,提供营养和口感。但喂猫吃罐头需技巧和耐心,以确保猫健康快乐成长。 作为一个从业宠物营养师7年的人,可以说对于猫咪的食物很有研究和猫罐头品牌选购上,我有自己的见解。 一、猫罐头多久喂…

第四代智能井盖传感器:智能井盖位移监测

当城市道路上的井盖出现异常时,可能会导致突发的交通事故或人员受伤事件。而传统的井盖监测往往依靠人力进行巡查,这种方式可能会因为监测不及时或不准确而带来问题。但是现在有了智能井盖传感器,它们成为了城市地下生命线的守护者。这种智能…

【数据库】数据库中的检查点Checkpoint,数据落盘的重要时刻

检查点(checkpoint) ​专栏内容: 手写数据库toadb 本专栏主要介绍如何从零开发,开发的步骤,以及开发过程中的涉及的原理,遇到的问题等,让大家能跟上并且可以一起开发,让每个需要的人成为参与者。 本专栏会定…

JSP编写自己的第一个WebServlet实现客户端与服务端交互

我们在项目中找到java目录 下面有一个包路径 然后 我们在下面创建一个类 我这里叫 TransmissionTest 当然 名字是顺便取的 参考代码如下 package com.example.dom;import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet…

《微信小程序开发从入门到实战》学习二十五

3.3 开发创建投票页面 3.3.13 使用页面路径参数 写了很多重复代码,现在想办法将多选和单选投票页面合二为一。 将单选页面改造作为单选多选共同页面。 修改index.js中的代码,将路径都跳转到第一个单选页面,带上单选或多选的标志&#xff…

redis---非关系型数据库

关系数据库与非关系型数据库 redis非关系型数据库,又名缓存型数据库。数据库类型:关系型数据库和非关系型数据库关系型数据库是一 个机构化的数据库,行和列。 列:声明对象。 行:记录对象属性。 表与表之间的的关联。 sql语句&…

Nginx配置文件中的关键字是什么?详细解释来了

点击上方蓝字关注我 Nginx 是一款高性能的 Web 服务器软件,同时也是一款反向代理服务器软件。Nginx 的配置文件通常是 /etc/nginx/nginx.conf,以下是一个典型的配置文件,并对其中的关键字进行详细解释。 1. 配置文件 perlCopy codeuser ngin…

Springboot_文件下载功能(前端后端)

遇到的问题: 文件下载后文件一直被破坏,无法正常打开文件名乱码,如图 刚开始一直在纠结,是不是后端没有写对,然后导致下载不能使用 后来搜索了一些资料,发现后端没什么问题 然后就开始找到其他项目对比…

在线接口测试工具fastmock使用

1、fastmock线上数据模拟器 在平时的项目测试中,尤其是前后端分离的时候,前端人员需要测试调用后端的接口,这个时候会出现测试不方便的情况。此时我们可以使用fastmock平台在线上模拟出一个可以调用的接口,方便前端人员进行数据测…