File size: 4,430 Bytes
69c5ed3 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 |
[**中文说明**](https://github.com/LowinLi/stable-diffusion-streamlit/blob/main/README_CN.md) | [**English**](https://github.com/LowinLi/stable-diffusion-streamlit/blob/main/README.md)
# stable-diffusion-streamlit
- [1.简介](#1-简介)
- [2.快速开始](#2-快速开始)
- [3.模型量化提速表现](#3-模型量化提速表现)
- [4.Streamlit进度条](#4-Streamlit进度条)
- [5.下一步](#5-下一步)
- [6.帮助](#6-帮助)
- [7.致谢](#7-致谢)
## 1. 简介
+ **使用[Streamlit](https://github.com/streamlit/streamlit)构建一个Web服务,测试使用[OnnxRuntime](https://github.com/microsoft/onnxruntime)量化压缩后的[CompVis/stable-diffusion-v1-4](https://huggingface.co/CompVis/stable-diffusion-v1-4)模型做图片生成**.
+ **Streamlit**:
+ 一个流行的开源框架,可以快速搭建机器学习和数据科学团队的Web应用。
+ **CompVis/stable-diffusion-v1-4**:
+ 一个流行的扩散模型,可以通过文字提示生成栩栩如生的高质量图片。
+ **OnnxRuntime**:
+ 微软推出的一款推理框架,用户可以非常便利的量化压缩模型。
## 2. 快速开始
### 2.1. 部署
+ docker-compose up -d
```yaml
version: "2.3"
services:
stable-diffusion-streamlit-onnxquantized:
container_name: stable-diffusion-streamlit-onnxquantized
image: lowinli98/stable-diffusion-streamlit-onnxquantized:v0.2
expose:
- 8501
ports:
- "8501:8501"
environment:
- APP_TITLE=Stable Diffusion Streamlit
restart: always
volumes:
- /etc/localtime:/etc/localtime
- ./volume:/app/pages/model/result
```
### 2.2. 使用
+ 2.2.1. 从博客[best-100-stable-diffusion-prompts](https://mpost.io/best-100-stable-diffusion-prompts-the-most-beautiful-ai-text-to-image-prompts/)或[50-text-to-image-prompts-for-ai](https://decentralizedcreator.com/50-text-to-image-prompts-for-ai-art-generator-stable-diffusion-a-visual-treat-inside/)复制一个文本提示。
+ 2.2.2. 打开http://localhost:8501,在侧边栏点击"文本转图片"。
+ 2.2.3. 修改运行参数, 粘贴提示,点击"开始生成"。
![](./doc/gif/use1.gif)
+ 2.2.4. 待进度条走完后,页面直接展示生成的图片
![](./doc/gif/use2.gif)
+ 2.2.5. 点击侧边栏的"画廊"查看所有历史生成的图片
![](./doc/gif/use3.gif)
## 3. 模型量化提速表现
+ 服务中使用的模型已经在打镜像阶段就做了OnnxRuntime量化压缩处理,详见:
+ [dockerfile](https://github.com/LowinLi/stable-diffusion-streamlit/blob/main/docker/dockerfile)
+ [Github Action的镜像构建日志](https://github.com/LowinLi/stable-diffusion-streamlit/actions/runs/3202674839/jobs/5231895605)
+ 量化后的模型尺寸降低很多、推理速度提高一点点(UINT8), 同时保持和原模型几乎一样的生成图片质量.
+ 这一点意味着,[CompVis/stable-diffusion-v1-4](https://huggingface.co/CompVis/stable-diffusion-v1-4)模型可以被部署在大多数家用电脑上,并进行调试。以下是几种模型的比较:
---
| 模型 | 内存 | 49步推断用时 |
| --- | --- | --- |
| pytorch | 5.2GB | 6m56s |
| onnx | 5.0GB | 4m34s |
| onnx-quantized(UINT8) | 1.3GB | 4m29s |
+ CPU:
+ Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz
+ 10 core
+ PyTorch模型生成的图片
![](./doc/pic/torch.png)
+ Onnx模型生成的图片
![](./doc/pic/onnx.png)
+ Onnx-quantized(UINT8)模型生成的图片
![](./doc/pic/onnxquantized.png)
## 4. Streamlit进度条
为了生成高质量图片,扩散模型一般要推断很多步,这会比较耗时。为了提升用户体验,在Streamlit页面做了一个进度条,通过另一个线程,监控推断步数,并更新到进度条中。
## 5. 下一步
- [ ] 增加[Huggingface/Diffusers](https://huggingface.co/docs/diffusers/using-diffusers/img2img)中的图像生成图像流程
- [ ] 增加[Huggingface/Diffusers](https://huggingface.co/docs/diffusers/using-diffusers/inpaint)中的抠图生成图像流程
## 6. 帮助
+ 联系我的邮箱lowinli@outlook.com
+ 有任何问题,欢迎在Github上提Issue
## 7. 致谢
+ [Huggingface/Diffusers](https://github.com/huggingface/diffusers)
+ [CompVis/stable-diffusion](https://github.com/CompVis/stable-diffusion)
+ [Streamlit](https://github.com/streamlit/streamlit)
+ [OnnxRuntime](https://github.com/microsoft/onnxruntime)
|