# Instruct-Pix2Pix
## 论文
- https://arxiv.org/abs/2211.09800
## 模型结构
InstructPix2Pix 是在 Stable Diffusion 的基础上扩展和微调的一个基于指令微调的图像编辑模型,其核心任务是实现基于自然语言指令的图像编辑:
这里的conditioning输入为图像编辑指令
## 算法原理
InstrcutPix2Pix只需要编辑指令就可以对图像进行编辑(编辑指令:把自行车变成摩托车),而其他的方法( SDEdit 和 Text2Live)需要对图像进行描述,基于GPT-3、Stable Diffusion、Prompt-to-prompt、Classifier-free guidance;其中Prompt-to-prompt 是图像局部修改的原理性基础,也是数据生成的关键之一
算法步骤包括:
- 1、生成多模态训练数据集
生成过程分为两步:
第一、微调 GPT3 来生成配对的文本编辑的命令:给一张图的图像描述(Input Caption),生成一个命令(Instruction)来说明要改的内容,同时生成一个对应的编辑后的图片描述(Edited Caption)(上面结构图的左半部分)
文章中使用GPT3在一个小的自制数据集上微调,这个数据集包括:1)编辑前的图像描述;2)图像编辑命令;3)编辑后的图像描述,文章从LAION-Aesthetics V2 6.5+ 数据集里采集了700个输入图像描述(captions),手写了命令和输出图像描述
第二,使用文生图模型(SD+P2P),根据两个文本提示(编辑前图像描述和编辑后图像描述)生成一对相应图像
- 2、用生成数据来训一个条件扩散模型
基于 Stable Diffusion 模型框架训练图像生成模型
## 环境配置
### Docker(方法一)
从[光源](https://www.sourcefind.cn/#/service-list)中拉取docker镜像:
```
docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-ubuntu20.04-dtk24.04.2-py3.10
```
创建容器并挂载目录进行开发:
```
docker run -it --name {name} --shm-size=1024G --device=/dev/kfd --device=/dev/dri/ --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --ulimit memlock=-1:-1 --ipc=host --network host --group-add video -v /opt/hyhal:/opt/hyhal:ro -v {}:{} {docker_image} /bin/bash
# 修改1 {name} 需要改为自定义名称
# 修改2 {docker_image} 需要需要创建容器的对应镜像名称
# 修改3 -v 挂载路径到容器指定路径
pip install -r requirements.txt
```
### Dockerfile(方法二)
```
cd docker
docker build --no-cache -t instruct_pytorch:1.0 .
docker run -it --name {name} --shm-size=1024G --device=/dev/kfd --device=/dev/dri/ --privileged --cap-add=SYS_PTRACE --security-opt seccomp=unconfined --ulimit memlock=-1:-1 --ipc=host --network host --group-add video -v /opt/hyhal:/opt/hyhal:ro -v {}:{} {docker_image} /bin/bash
pip install -r requirements.txt
```
### Anaconda(方法三)
线上节点推荐使用conda进行环境配置。
创建python=3.10的conda环境并激活
```
conda create -n instruct python=3.10
conda activate instruct
```
关于本项目DCU显卡所需的特殊深度学习库可从[光合](https://developer.hpccube.com/tool/)开发者社区下载安装。
```
DTK驱动:dtk24.04.2
python:python3.10
pytorch:2.1.0
torchvision:0.16.0
```
安装其他依赖包
```
pip install -r requirements.txt
```
## 数据集
无
## 训练
无
## 推理
下载预训练权重文件并解压:
instruct_pix2pix预训练权重下载:[官网下载](http://instruct-pix2pix.eecs.berkeley.edu/instruct-pix2pix-00-22000.ckpt)
SCNet快速下载连接[SCNet下载](http://113.200.138.88:18080/aimodels/findsource-dependency/instruct_pix2pix),将ckpt文件保存至checkpoints文件夹中
解压命令:
```
cat instruct-pix2pix-00-22000_a* > instruct-pix2pix-00-22000.tar.gz
tar -zxf instruct-pix2pix-00-22000.tar.gz
```
clip-vit-large-patch14权重数据下载:
[huggingface下载](https://huggingface.co/openai/clip-vit-large-patch14)
SCNet快速下载连接[SCNet下载](http://113.200.138.88:18080/aimodels/findsource-dependency/clip-vit-large-patch14),所有文件下载后保存到openai/clip-vit-large-patch14文件夹中
```
# 图片+编辑生成编辑后的图像
python edit_cli.py --input imgs/example.jpg --output imgs/output.jpg --edit "turn him into a cyborg"
```
## result
输入原始图像为:
输入编辑指令为:
```
turn him into a cyborg
```
模型生成图片:
编辑后的图像保存位置:imgs/output.jpg
## 精度
无
## 应用场景
### 算法类别
多模态
### 热点应用行业
AIGC,设计,教育
## 源码仓库及问题反馈
[https://developer.sourcefind.cn/codes/dongchy920/instruct_pix2pix](https://developer.sourcefind.cn/codes/dongchy920/instruct_pix2pix)
## 参考资料
[https://github.com/timothybrooks/instruct-pix2pix](https://github.com/timothybrooks/instruct-pix2pix)