还有这种狠活,隔壁同事玩疯了!
大家好,我是 Jack。
今天咱们继续聊一聊有趣好玩的 AI 算法。
手把手教程,原理、环境部署、效果测试,一条龙服务回来了~
InstructPix2Pix
要说最近最火的 CV 算法,那非扩散模型莫属了。
大家熟知的 LDM,效果惊艳了很多人。
最近,又开源了一个基于扩散模型的新算法:InstructPix2Pix。
效果展示
简单概述它的功能就是:图片编辑
不像 PS,需要一定的基础才能使用,这个 AI 算法,你只需要告诉它,你要干什么。
比如输入文本:
将向日葵改为玫瑰花
InstructPix2Pix算法秒懂,直接帮你修改图片。
这不比 PS 省事多了?
再比如:在天空加些烟花。
甚至是:将大衣改为皮质的。
你的很多奇奇怪怪的修图要求,它都能理解,并切满足:
而这一切,InstructPix2Pix可以在几秒钟内完成。
算法原理
你可能已经发现了,这个算法可以很好的理解人类的修改描述。
比如修改这张图:
想要将图片中的向日葵改为玫瑰花,现有的一些算法都是需要这样描述:一个花盆中插满了玫瑰花。其实这种描述首先带有一定的不确定性。
而对于图像编辑任务本身而言,我们需要让模型关注的是要编辑的主体,以及编辑的最终效果。因此,最合适的编辑指令设置为“将向日葵更换为玫瑰花”,这样也更加符合人类的直觉习惯。
而对于文本的理解,就用到了 GPT3 模型,图像生成采用 Stable Diffusion Model 扩散模型。
所以,InstructPix2Pix 整体其实一个二阶段的模型,先使用 GPT3 编辑现有模型所理解的 prompt 格式,然后送给扩撒模型生成。
构建训练数据也是如此,不过为了保证生成效果,这里用到了 prompt to prompt 方法,该方法可以针对一个输入文本生成多代近似的图像,且这些图像彼此之间含有相同的身份信息,Prompt-to-Prompt通过在去噪过程中使用交互注意力权重来实现。
下图展示了使用Prompt-to-Prompt方法和使用随机方法生成的图像效果对比。
显然,使用 Prompt-to-Prompt 更符合我们的图像编辑需求,直接随机生成,会导致画风突变。
InstructPix2Pix 的图像生成部分,本质上其实还是使用的 Laten Diffusion 就是隐空间扩散模型,在这个开源模型的基础上,进行 finetune。
作者使用预训练的 Stable Diffusion 对模型进行初始化。为了赋予 InstructPix2Pix 图像编辑的能力,作者在模型的第一个卷积层中增加了额外的条件输入通道。
算法部署
算法已经开源。
项目地址:
https://github.com/timothybrooks/instruct-pix2pix
环境部署也很简单:
conda env create -f environment.yaml
conda activate ip2p
bash scripts/download_checkpoints.sh
先根据提供的 environment.yaml 环境文件,建一个 ip2p 虚拟环境。
然后使用 download_checkpoints.sh 脚本,下载所需的权重文件。
使用如下指令即可运行程序:
python edit_cli.py --input imgs/example.jpg --output imgs/output.jpg --edit "turn him into a cyborg"
# Optionally, you can specify parameters to tune your result:
# python edit_cli.py --steps 100 --resolution 512 --seed 1371 --cfg-text 7.5 --cfg-image 1.2 --input imgs/example.jpg --output imgs/output.jpg --edit "turn him into a cyborg"
编辑信息放在 --edit 命令之后即可,生成的图片会保存到 imgs 文件夹中。
或者干脆可以直接使用它的 UI 界面。
python edit_app.py
这样就可以在界面中操作了。
当然,作者也提供了懒人模式。
项目已在 Huggingface 上部署,用的是 T4 机器。
输入图片和编辑信息,即可运行算法
https://huggingface.co/spaces/timbrooks/instruct-pix2pix
絮叨
最后再一起看下,蒙娜丽莎的微笑。多种画风,毫无违和~
对于图像生成、图像编辑感兴趣的小伙伴,可以玩一玩~
我是 Jack,我们下期见~
微信扫码关注该文公众号作者