无需订阅专栏——AI自主图像生成 之 stable-diffusion-运行效果展示
一.介绍与实验效果
文章末尾包含:
1.我已打包到百度云的部署验证成功并包含模型权重的代码文件,可直接链接完成python环境配置的anaconda环境下使用。
2…我已打包到百度云的anaconda下的一个,完成python环境配置的anaconda环境的包yolov5_CS2(即各种包都安好了),可直接放到Anaconda\envs目录下使用。
1.环境与感受介绍
这几天跑省外出差被隔离在酒店,不过随身带了个主机和显示器(笔记本太差跑不了项目程序,只能随身带主机我真的栓Q…),正巧又刷到stable-diffusion开源的消息,现在就来试试搭建这个试试水。
硬件环境:显卡3060 12G显存,内存32G 主要就这两,cpu没太大要求,除非你想用cpu跑深度学习…
软件环境:基于Anaconda 的 python3.7下 pytorch版本:1.10.0+cu113 ,cuda: V11.3.58, cudnn 8.4.0
总体感觉很惊艳,在现有12G显存的硬件条件下我设置到了 高:512宽832的大小,不过稍微超出点点就要爆显存,程序就崩溃了,当然这个不是它的问题,穷是我的问题,因此大家在用的时候参考我这个图片大小和显存自己调整吧。
(当然也可以使用小图片加超清晰度的模型结合的方法,来避免爆显存这个问题,不过作为鸽子我估计我懒得弄,或许以后来研究这个迁移学习的时候,再说吧)
2.效果展示
略见无需订阅专栏——AI自主图像生成 之 stable-diffusion-运行效果展示
3.使用界面图
使用界面如下,完成后会在你的本地回环地址的 7860 端口提供一个web接口,通过浏览器访问就行,注意输入的描述是英文的哈。
PS:我发现相同图片大小下,描述越多,GPU占用越厉害,而且时间也长,不过我靠: 这个巨大的宇宙战舰从大气层冲入入侵人类家园,岩浆从地层中涌出,大量的机器人奔逃用,我用3060 12G花了 2个多小时。。。我靠, GPU占用%80到%100, 内存占用15g左右,不知道的还以为是挖矿。。。。)
二.环境准备
流程:
搭建使用GPU运算的pytorch‘的环境,也就是想根据你的显卡,选择对应的CUDA版本,再根据你的CUDA版本选择对应的pytorch的GPU版本
1.GPU硬件cuda,pytorch版本安装
查看当前已安装cuda与cudnn版本
查看你自身的GPU型号,如我这里GPU就是3060。
查询你的GPU是否支持 cuda: V11.3.58, cudnn 8.4.0 (一般30系列,与大多数新型号的都是支持的,老型号或专门的计算卡可能就不行)
完成cuda和python环境安装后,根据你的python环境版本,如下我的是python3.7,在pytorch官方下载安装以下两个对应cuda11与对应包,一个是tocrh包另一个是torchvision包,如下。
torch-1.10.0+cu113-cp37-cp37m-win_amd64.whl
torchvision-0.11.1+cu113-cp37-cp37m-win_amd64.whl
官方cuda11.3版本下载链接
cuda11.3版本下载百度云
提取码:qvfk
官方cudnn8.4.0下载链接
cudnn8.4.0下载百度云
提取码:r3gx
1.如果支持,
那么你安装了V11.3版本, cudnn 8.4.0 后可以直接使用我这里提供的,python7的环境包,下载后解压到 你的Anaconda\envs文件夹下即可使用
python包yolov5_CS2环境百度云链接
提取码:ndcm
2.如果不支持,
那么参考下面链接,选择好你的显卡对应的cuda,cudnn 以及pytorch,torchvision,然后再anaconda中创建一个环境把pytorch,torchvision安装进去。
Cuda与对应pytorch安装导流,还没安装好pytorch深度学习环境的看这个链接里面的链接把基础环境搭建了
当此时则需要自己手动安装依赖包了,那么需要哪些依赖包呢?
如下文件environment.yaml所示:
name: ldo
channels:
- pytorch
- defaults
dependencies:
- git
- python=3.8.5
- pip=20.3
- cudatoolkit=11.3
- pytorch=1.11.0
- torchvision=0.12.0
- numpy=1.19.2
- pip:
- albumentations==0.4.3
- opencv-python==4.1.2.30
- opencv-python-headless==4.1.2.30
- pudb==2019.2
- imageio==2.9.0
- imageio-ffmpeg==0.4.2
- pytorch-lightning==1.4.2
- omegaconf==2.1.1
- test-tube>=0.7.5
- streamlit>=0.73.1
- einops==0.3.0
- torch-fidelity==0.3.0
- transformers==4.19.2
- torchmetrics==0.6.0
- kornia==0.6
- gradio==3.1.6
- accelerate==0.12.0
- pynvml==11.4.1
- basicsr>=1.3.4.0
- facexlib>=0.2.3
- -e git+https://github.com/CompVis/taming-transformers#egg=taming-transformers
- -e git+https://github.com/openai/CLIP#egg=clip
- -e git+https://github.com/TencentARC/GFPGAN#egg=GFPGAN
- -e git+https://github.com/xinntao/Real-ESRGAN#egg=realesrgan
- -e git+https://github.com/hlky/k-diffusion-sd#egg=k_diffusion
- -e .
其中pytorch和torchvision已经如上安装了,剩下的如 imageio==2.9.0 在进入你的环境后使用pip 安装如下
pip install imageio==2.9.0
而上面还有5个github上的项目文件
- -e git+https://github.com/CompVis/taming-transformers#egg=taming-transformers
- -e git+https://github.com/openai/CLIP#egg=clip
- -e git+https://github.com/TencentARC/GFPGAN#egg=GFPGAN
- -e git+https://github.com/xinntao/Real-ESRGAN#egg=realesrgan
- -e git+https://github.com/hlky/k-diffusion-sd#egg=k_diffusion
我已经把这5个下载放到了 主程序文件的hand_five 下了
主程序文件百度云,见本章末尾链接(已改动,加入模型后可直接运行)
手动安装命令如下,在进入对应的文件夹后(可能有1个安不起,不管他,我已经直接把要用的taming给移到外出文件去了,就不用管他按不按得起了)
python setup.py install --user
3.c盘放个权重文件
由于在之后运行的时候,程序会自动去一个url链接下载一个权重文件放到 C:\Users\ppx.cache\torch\hub\checkpoints 路径下,但是那个url链接,是真的不友好,连不上,我这边翻墙下好了,所有想直接把它放过去。免得到时候卡起
放到C盘的权重文件百度云下载
提取码:gu5j
4.修改代码中权重文件路径
修改 CS_stable-diffusion-main\scripts\webui.py 的第134 行 model.ckpt 的路径为你的项目的路径,出来你和我一样把代码放在F盘的根目录
三.运行并测试
1.验证pytorch可用
import torch
print(torch.__version__)
打印出来是 1.10.0+cu113
或者别的 版本的pytorch的GPU版本的,就表示你pytorch是安装对了的,如果里面没有看到 +cu你的版本
那么你可能就默认安装成了cpu版本了,这时你要好好检查以一下你的python环境对不对。
2.开始运行
在以上的一堆环境都搭建完成后,现在用于可以开始运行了,使用pycharm打开代码文件如下(记得设置源码),运行里面 CS_stable-diffusion-main\scripts\webui.py 文件
如果是第一次运行,它还会下些东西如下
当完成下载后,它会运行得到一个本地ip端口下的访问接口,如下这里就是
http://localhost:7860/
3.网页访问使用
然后通过浏览器,访问 该http://localhost:7860/
地址,可看到如下web网页
其中想输入框中,输入你的描述(英文)句子,即可生成对应的图像(注意图像高宽设置太大会崩溃,这里我12G显存推荐)
生成的图片被保存在 CS_stable-diffusion-main\scripts\outputs\txt2img-samples
文件夹下
其他.关于文件结构与我修改了哪些地方
1.文件结构
如果你从github上git下来的话,除了以下红色框里面的文件或文件夹外,就是基本的代码状态了(当然还有几个cmd,那个是b站大佬写的window下的启动命令,我觉得以后,可能做自动化还有用,就懒得删,当然删了也没关系就是了)
将configs复制了一份到scripts,不然找不到一些文件
有一个github的安装包没有安装成功,我直接把它要用得上的文件夹给移出来了,这样安装不上也能用了
报错记录
以下启动时的以下报错,是你网不行,程序每次启动的时候要访问些神奇的url,我觉得应该是更新权重文件之类的,所有就没改这部分(当然你可以自己把它删了就不会包下面的错了),总之保存网正常就可以启动
Traceback (most recent call last):
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\urllib3\connection.py", line 175, in _new_conn
(self._dns_host, self.port), self.timeout, **extra_kw
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\urllib3\util\connection.py", line 95, in create_connection
raise err
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\urllib3\util\connection.py", line 85, in create_connection
sock.connect(sa)
ConnectionRefusedError: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\urllib3\connectionpool.py", line 700, in urlopen
self._prepare_proxy(conn)
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\urllib3\connectionpool.py", line 996, in _prepare_proxy
conn.connect()
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\urllib3\connection.py", line 358, in connect
self.sock = conn = self._new_conn()
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\urllib3\connection.py", line 187, in _new_conn
self, "Failed to establish a new connection: %s" % e
urllib3.exceptions.NewConnectionError: <urllib3.connection.HTTPSConnection object at 0x00000257A066DD08>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\requests\adapters.py", line 449, in send
timeout=timeout
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\urllib3\connectionpool.py", line 788, in urlopen
method, url, error=e, _pool=self, _stacktrace=sys.exc_info()[2]
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\urllib3\util\retry.py", line 592, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /openai/clip-vit-large-patch14/resolve/main/vocab.json (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000257A066DD08>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。')))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "F:/CS_stable-diffusion-main/scripts/webui.py", line 366, in <module>
model = load_model_from_config(config, opt.ckpt)
File "F:/CS_stable-diffusion-main/scripts/webui.py", line 139, in load_model_from_config
model = instantiate_from_config(config.model)
File "F:\CS_stable-diffusion-main\ldm\util.py", line 85, in instantiate_from_config
return get_obj_from_str(config["target"])(**config.get("params", dict()))
File "F:\CS_stable-diffusion-main\ldm\models\diffusion\ddpm.py", line 461, in __init__
self.instantiate_cond_stage(cond_stage_config)
File "F:\CS_stable-diffusion-main\ldm\models\diffusion\ddpm.py", line 519, in instantiate_cond_stage
model = instantiate_from_config(config)
File "F:\CS_stable-diffusion-main\ldm\util.py", line 85, in instantiate_from_config
return get_obj_from_str(config["target"])(**config.get("params", dict()))
File "F:\CS_stable-diffusion-main\ldm\modules\encoders\modules.py", line 141, in __init__
self.tokenizer = CLIPTokenizer.from_pretrained(version)
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\transformers\tokenization_utils_base.py", line 1731, in from_pretrained
user_agent=user_agent,
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\transformers\utils\hub.py", line 290, in cached_path
local_files_only=local_files_only,
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\transformers\utils\hub.py", line 485, in get_from_cache
r = requests.head(url, headers=headers, allow_redirects=False, proxies=proxies, timeout=etag_timeout)
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\requests\api.py", line 104, in head
return request('head', url, **kwargs)
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\requests\api.py", line 61, in request
return session.request(method=method, url=url, **kwargs)
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\requests\sessions.py", line 542, in request
resp = self.send(prep, **send_kwargs)
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\requests\sessions.py", line 655, in send
r = adapter.send(request, **kwargs)
File "D:\Anaconda\envs\yolov5_CS2\lib\site-packages\requests\adapters.py", line 510, in send
raise ProxyError(e, request=request)
requests.exceptions.ProxyError: HTTPSConnectionPool(host='huggingface.co', port=443): Max retries exceeded with url: /openai/clip-vit-large-patch14/resolve/main/vocab.json (Caused by ProxyError('Cannot connect to proxy.', NewConnectionError('<urllib3.connection.HTTPSConnection object at 0x00000257A066DD08>: Failed to establish a new connection: [WinError 10061] 由于目标计算机积极拒绝,无法连接。')))
进程已结束,退出代码 1
结尾
之前在说明里面插入得有的,为了方便下载,这里我特地都写到下面
python包yolov5_CS2环境百度云链接
提取码:ndcm
修改过的主文件github链接 2022.10.17修改
百度云链接放这居然会审核不通过,笑死我。
ps:自己在这里路径下把模型加上去才能用哦:CS_stable-diffusion-main\models\ldm\stable-diffusion-v1
官方cuda11.3版本下载链接
cuda11.3版本下载百度云
提取码:qvfk
官方cudnn8.4.0下载链接
cudnn8.4.0下载百度云
提取码:r3gx