我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

邮箱:804359553@qq.com

文章目录

〇、说明

对于只想体验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.yamlconda 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# 删除ldmconda 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 ↩︎

来源地址:https://blog.csdn.net/qq_44119557/article/details/130111196

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录