最近在研究使用
Stable Diffusion
通过提示词生成图片的实现,因为电脑配置问题,反复尝试不同模型版本,效率上都不理想(主要是电脑太烂,只能纯CPU
模式运行,大一点的模型,生成一张图片都要两三分钟,头大),最后找到一个相对满意的大佬基于SD1.5
训练的,再被另一大佬导出为OpenVINO
格式后,时间可控制在二十多秒生成一图。下面就以该模型的使用作一个简单部署,不再花时间在模型研究上了,继续往下进行了,后续会以提示词为主,让SD能按照自己想要的效果生图。
一、环境搭建
1. 啰嗦几句
这个是大头,需要安装的依赖比较多,而且很多组件版本有要求,也是反复踩坑后得出的结论
好多是建议使用Conda
进行环境隔离搭建的,我试了下,有好有坏吧,每次使用都要先cmd
进入命令行模式,再conda activate xxx
激活环境,后续再在该环境操作,可能我没研究明白,但我还是感觉直接使用python
的venv
虚拟环境搭配VS Code
更直观,同样是环境隔离,VS Code又可以直接识别当前目录下的虚拟环境,不用担心全局环境的污染
说了这么多,是为了有个思想准备,就是如果中间出问题了,知道从哪解决,有个思路,实际命令就几句话
2. 开始安装
按照官方建议,Python版本最好是3.10.6
(低了很多组件不支持,高了有些函数被舍弃了,其中踩坑的还有一点是pip
的版本也可能会导致出错,如果有碰到,就降级到24.0
及以下)
# 建立虚拟环境,建议先设置国内加速源,不然速度感人
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
python -m venv .venv
# 安装大模型依赖
pip install optimum-intel openvino diffusers transformers
3. 模型下载
Dreamshaper 8
是一个基于 Stable Diffusion 技术的文本生成图像模型。该项目由 Lykon 开发,是在runwayml/stable-diffusion-v1-5
模型基础上进行微调得到的。
使用下面的openvino
版本加上lcm
优化,可以实现在cpu
上也能跑出理想成绩(相对而言)
至于模型怎么下载下来,我是先使用的 git clone
下载所有配置文件,然后再手动下载指定目录下的LFS
大文件,再放置到相应目录。科学上网这块我也没找到更好的方法!
https://huggingface.co/yujiepan/dreamshaper-8-lcm-openvino
二、代码调试
1. 文生图实现
如果环境顺利搭建起来,那恭喜你,后面就可以开心的测试你想要的提示词了
from optimum.intel.openvino.modeling_diffusion import OVStableDiffusionPipeline
import torch
import os# 多线程加速(根据自己的需要设置相应的核心线程数 4 8 12 16等)
os.environ["OMP_NUM_THREADS"] = "4"
torch.set_num_threads(4)# 模型加载(根据你本地模型存放的路径设置)
model_id = "./modles/dreamshaper-8-lcm-openvino"
pipe = OVStableDiffusionPipeline.from_pretrained(model_id, device='CPU')# 输入你喜欢的提示词吧(只支持英文,英文不好的借助翻译软件实现)
# 正向提示词(你想的结果)
prompt = 'cute girl typing at a laptop, 4k, details'
# 负向提示词(你不想出现的情况)
nprompt = 'worst quality, blurry, duplicate' # 开始图片生成(输入相应参数即可,因为是lcm优化,步数4-8即可,参考值1-3即可)
image = pipe(prompt=prompt,negative_prompt=nprompt,num_inference_steps=5,guidance_scale=1).images[0]
image.save('output.jpg')
# print(image) # <PIL.Image.Image image mode=RGB size=512x512 at 0x214080BE950>
image.show()
2. 提示词公式
描述人物,场景,环境,画幅视角,其他画面要素,定义高品质标准化,画风,其他特殊要求
更多玩法,还在探索中,后续共同探讨……
再放两张上述提示词生成的图片效果,有时相同提示词也可能出现意想不到的惊喜或惊吓,多生成几张,挑选满意的即可,做好心理准备……