# stable diffusion
## 论文
https://arxiv.org/pdf/2010.02502
## 模型结构
文生图任务是指将一段文本输入到SD模型中,经过一定的迭代次数,SD模型输出一张符合输入文本描述的图片。
## 算法原理
使用CLIP Text Encode模型将输入的人类文本信息进行编码,生成与文本信息对应的Text Embeddings特征矩阵;
输入文本信息,再用random函数生成一个高斯噪声矩阵 作为Latent Feature(隐空间特征)的“替代” 输入到SD模型的 “图像优化模块” 中;
首先图像优化模块是由U-Net网络和Schedule算法 组成,将图像优化模块进行优化迭代后的Latent Feature输入到 图像解码器 (VAE Decoder) 中,将Latent Feature重建成像素级图。
## 环境配置
### Docker(方法一)
拉取镜像:
```shell
docker pull image.sourcefind.cn:5000/dcu/admin/base/custom:stablediffusion-migraphx-centos7.6-dtk24.04.1-py310
```
创建并启动容器:
```shell
docker run --shm-size 16g --network=host --name=sd2.1_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/sd2.1_migraphx:/home/sd2.1_migraphx -v /opt/hyhal:/opt/hyhal:ro -it /bin/bash
# 激活dtk
source /opt/dtk/env.sh
```
### Dockerfile(方法二)
```shell
cd ./docker
docker build --no-cache -t sd2.1_migraphx:2.0 .
docker run --shm-size 16g --network=host --name=sd2.1_migraphx --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v $PWD/sd2.1_migraphx:/home/sd2.1_migraphx -v /opt/hyhal:/opt/hyhal:ro -it /bin/bash
# 激活dtk
source /opt/dtk/env.sh
```
## 数据集
无
## 环境配置
#### 设置环境变量
```shell
export PYTHONPATH=/opt/dtk/lib:$PYTHONPATH
```
#### 安装依赖
```shell
# 进入python示例目录
cd
# 安装依赖
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
```
#### 模型下载
```bash
## 下载 SD v2.1 model
git lfs install
git clone https://huggingface.co/stabilityai/stable-diffusion-2-1-base
## 或者使用国内镜像网站,下载速度更快
git clone https://hf-mirror.com/stabilityai/stable-diffusion-2-1-base
```
#### onnx模型导出
使用下面命令导出onnx模型:
```bash
optimum-cli export onnx --model stable-diffusion-2-1-base sd21-onnx --task stable-diffusion
```
其中,stabilityai/stable-diffusion-2-1-base为模型下载目录,sd21-onnx为onnx导出模型目录,下面运行示例命令中的onnx-model-path参数就设置为该onnx模型目录。
#### 运行示例
stablediffusion_v2.1模型的推理示例程序是Diffusion_test_offload_false.py,使用如下命令运行该推理示例:
```shell
python Diffusion_test_offload_false.py --prompt "a photograph of an astronaut riding a horse" --seed 13 --output astro_horse.jpg --steps 50 --fp16 all --onnx-model-path sd21-onnx
```
## result
推理结果:
python程序运行结束后,会在当前目录保存推理生成的图像。
### 精度
无
## 应用场景
### 算法类别
`以文生图`
### 热点应用行业
`绘画`,`动漫`,`媒体`
## 源码仓库及问题反馈
https://developer.hpccube.com/codes/modelzoo/stablediffusion_v2.1_migraphx
## 参考资料
https://github.com/Stability-AI/stablediffusion