Skip to content

Commit

Permalink
【Hackathon 5th】fastdeploy版的sd15模型添加gradio界面 (#311)
Browse files Browse the repository at this point in the history
支持文生图、图生图、inpaint_legacy、inpaint、controlnet+canny的推理
#256

aistudio 项目还在施工中。
  • Loading branch information
sanbuphy authored Dec 27, 2023
1 parent 3a3f405 commit 9769ebe
Show file tree
Hide file tree
Showing 2 changed files with 855 additions and 6 deletions.
178 changes: 172 additions & 6 deletions ppdiffusers/deploy/README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,27 @@
# FastDeploy Stable Diffusion 模型高性能部署

**目录**
* [部署模型准备](#部署模型准备)
* [环境依赖](#环境依赖)
* [快速体验](#快速体验)
* [文图生成(Text-to-Image Generation)](#文图生成)
* [文本引导的图像变换(Image-to-Image Text-Guided Generation)](#文本引导的图像变换)
* [文本引导的图像编辑(Text-Guided Image Inpainting)](#文本引导的图像编辑)
- [FastDeploy Stable Diffusion 模型高性能部署](#fastdeploy-stable-diffusion-模型高性能部署)
- [部署模型准备](#部署模型准备)
- [环境依赖](#环境依赖)
- [快速体验](#快速体验)
- [文图生成(Text-to-Image Generation)](#文图生成text-to-image-generation)
- [文本引导的图像变换(Image-to-Image Text-Guided Generation)](#文本引导的图像变换image-to-image-text-guided-generation)
- [文本引导的图像编辑(Text-Guided Image Inpainting)](#文本引导的图像编辑text-guided-image-inpainting)
- [Legacy 版本](#legacy-版本)
- [正式版本](#正式版本)
- [参数说明](#参数说明)
- [Stable Diffusion Gradio demo 部署](#stable-diffusion-gradio-demo-部署)
- [模型准备](#模型准备)
- [环境依赖](#环境依赖-1)
- [快速体验](#快速体验-1)
- [文生图(Text-to-Image Generation)、图生图(Image-to-Image Generation)、文本引导的图像编辑 legacy(Text-Guided Image Inpainting)](#文生图text-to-image-generation图生图image-to-image-generation文本引导的图像编辑-legacytext-guided-image-inpainting)
- [文生图(Text-to-Image Generation)](#文生图text-to-image-generation)
- [图生图(Image-to-Image Generation)](#图生图image-to-image-generation)
- [文本引导的图像编辑 legacy(Text-Guided Image Inpainting)](#文本引导的图像编辑-legacytext-guided-image-inpainting)
- [文本引导的图像编辑(Text-Guided Image Inpainting)](#文本引导的图像编辑text-guided-image-inpainting-1)
- [条件引导的图像生成(Canny ControlNet)](#条件引导的图像生成canny-controlnet)
- [参数说明](#参数说明-1)

⚡️[FastDeploy](https://github.com/PaddlePaddle/FastDeploy)是一款全场景、易用灵活、极致高效的AI推理部署工具,为开发者提供多硬件、多推理引擎后端的部署能力。开发者只需调用一行代码即可随意切换硬件、推理引擎后端。本示例展现如何通过 FastDeploy 将我们 PPDiffusers 训练好的 Stable Diffusion 模型进行多硬件、多推理引擎后端高性能部署。

Expand Down Expand Up @@ -184,3 +199,154 @@ python infer.py --model_dir stable-diffusion-v1-5-inpainting/ --scheduler euler-
| --hr_resize_width | hiresfix 所要生成的宽度,取值范围 512~768。默认值为 768。|
| --hr_resize_height | hiresfix 所要生成的高度,取值范围 512~768。默认值为 768。|
| --is_sd2_0 | 是否为sd2.0的模型?默认为 False 。|

# Stable Diffusion Gradio demo 部署

## 模型准备

本示例需要使用训练模型导出后的部署模型,可参考[模型导出文档](https://github.com/PaddlePaddle/PaddleMIX/blob/develop/ppdiffusers/deploy/export.md)导出部署模型,或者直接下载已导出的部署模型:

```sh
wget https://paddlenlp.bj.bcebos.com/models/community/junnyu/fd_trt_model/runwayml_stable-diffusion-v1-5_fd.tar.gz && tar -zxvf runwayml_stable-diffusion-v1-5_fd.tar.gz

wget https://paddlenlp.bj.bcebos.com/models/community/junnyu/fd_trt_model/stable-diffusion-v1-5-inpainting.tar.gz && tar -zxvf stable-diffusion-v1-5-inpainting.tar.gz

wget https://paddlenlp.bj.bcebos.com/models/community/junnyu/fd_trt_model/control_sd15_canny.tar.gz && tar -zxvf control_sd15_canny.tar.gz
```

其中`runwayml_stable-diffusion-v1-5_fd`模型用于文生图、图生图与文本引导的图像编辑(legacy version)任务,`stable-diffusion-v1-5-inpainting` 模型用于 inpaint 任务,`control_sd15_canny` 模型用于 canny controlnet 任务。

## 环境依赖

在示例中使用了 FastDeploy 以及 ppdiffusers,需要执行以下命令安装推荐的 Paddle 环境依赖。

```sh
python -m pip install paddlepaddle-gpu==2.5.2 -i https://pypi.tuna.tsinghua.edu.cn/simple

pip install fastdeploy-gpu-python -f https://www.paddlepaddle.org.cn/whl/fastdeploy.html

pip install https://paddlenlp.bj.bcebos.com/models/community/junnyu/fd_trt_model/ppdiffusers-0.19.4-py3-none-any.whl
```

## 快速体验

我们经过部署模型准备,可以开始进行 demo 测试(这里需要你有至少15G显存的机器)。本 demo 提供 StableDiffusion 模型支持的三种任务,分别是文本引导与图像引导的图片生成、文字引导的图像编辑(正式版与 legacy 版),条件引导的图像生成(Canny ControlNet)。

下面将演示如何指定模型目录、任务参数,运行 `gradio_demo.py` ,完成各项图像变换任务。

我们可以通过后缀参数指定任务和运行模型地址,也可以环境变量设定,例子如下:

```sh
# 通过环境变量指定模型任务
export model_dir='./runwayml_stable-diffusion-v1-5_fd'
export task_name='text2img_img2img_inpaint_legacy'
python gradio_demo.py
```

```sh
# 通过后缀参数指定模型与任务
python gradio_demo.py --model_dir='./runwayml_stable-diffusion-v1-5_fd' --task_name='text2img_img2img_inpaint_legacy'
```

请注意,没有指定 `--backend paddle_tensorrt` 的时候默认运行的是 paddle 后端,如果你想使用 tensorrt 加速请显式指定对应参数。

### 文生图(Text-to-Image Generation)、图生图(Image-to-Image Generation)、文本引导的图像编辑 legacy(Text-Guided Image Inpainting)

准备好模型后,通过下列命令我们可以启动基本任务:

```sh
python gradio_demo.py --model_dir='./runwayml_stable-diffusion-v1-5_fd' --task_name='text2img_img2img_inpaint_legacy'
```

#### 文生图(Text-to-Image Generation)

`Tab` 切换到 `text2img`
输入正向提示语句为 `a photo of an astronaut riding a horse on mars``seed` 为 2345, 生成的图片示例如下:

![image](https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/81663d76-3693-4c07-991f-25bcc260441c)


#### 图生图(Image-to-Image Generation)

`Tab` 切换到 `img2img`
基于输入图像,输入正向提示语句为`dog``seed` 为 123456, 生成的图片示例如下:

| input image | output image |
|:-------------------:|:-------------------:|
|![][cat]|![][dog1]|

[cat]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/ac7de478-b987-4f99-9192-6e89d5cdcd55

[dog1]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/3e4c6882-9738-4b50-9c3f-dc9655b74d04



#### 文本引导的图像编辑 legacy(Text-Guided Image Inpainting)

`Tab` 切换到 `inpaint_legacy`
基于输入图像,输入正向提示语句为`dog`,生成的图片示例如下:

| input image | output image |
|:-------------------:|:-------------------:|
|![][cat]|![][dog2]|

[cat]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/ac7de478-b987-4f99-9192-6e89d5cdcd55

[dog2]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/3dab5db8-c05d-4f7c-9a0b-46fac7bd5f67

### 文本引导的图像编辑(Text-Guided Image Inpainting)


准备好模型后,通过下列命令我们可以启动文本引导的图像编辑任务:

```sh
python gradio_demo.py --model_dir='./stable-diffusion-v1-5-inpainting' --task_name='inpaint'
```

基于输入图像,输入正向提示语句为`dog`,生成的图片示例如下:


| input image | output image |
|:-------------------:|:-------------------:|
|![][cat]|![][dog3]|

[cat]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/ac7de478-b987-4f99-9192-6e89d5cdcd55

[dog3]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/81459565-ff80-4910-a3ad-6a7278b50526


### 条件引导的图像生成(Canny ControlNet)


准备好模型后,通过下列命令我们可以启动条件引导的图像生成任务:

```sh
python gradio_demo.py --model_dir='./control_sd15_canny' --task_name='controlnet_canny'
```

基于输入图像,输入正向提示语句为`dog`,传入图片后会自动提取 mask,设此时的 `seed` 为 2345, `conditioning_scale` 为0.8,生成的图片示例如下:


| input image | output image |
|:-------------------:|:-------------------:|
|![][cat]|![][dog4]|

[cat]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/ac7de478-b987-4f99-9192-6e89d5cdcd55

[dog4]: https://github.com/PaddlePaddle/PaddleMIX/assets/96160062/da81b589-7e61-4615-b592-8961e335d001


### 参数说明

`gradio_demo.py` 除了以上示例的命令行参数,还支持更多命令行参数的设置。展开可查看各命令行参数的说明。

| 参数 | 参数说明 |
| --- | --- |
| --model_dir | Diffusion 模型的目录,默认为 "stable-diffusion-v1-5"。 |
| --task_name | 任务名称,可选值为 "text2img_img2img_inpaint_legacy", "inpaint", "controlnet_canny"。默认为 "text2img_img2img_inpaint_legacy"。 |
| --backend | 推理运行时的后端,可选值为 "paddle", "paddle_tensorrt"。默认为 "paddle"。 |
| --use_fp16 | 是否使用 FP16 模式,默认为 True。 |
| --use_bf16 | 是否使用 BF16 模式,默认为 False。 |
| --device_id | 选择的 GPU ID,默认为 0。 |
| --parse_prompt_type | 解析提示类型,可选值为 "raw", "lpw"。默认为 "lpw"。 |
| --is_sd2_0 | 是否为 sd2_0 模型,默认为 False。 |
Loading

0 comments on commit 9769ebe

Please sign in to comment.