OMG:扩散模型中的遮挡友好个性化多概念生成(ECCV 2024)
*通讯作者
简介: OMG是一个多概念图像生成框架,支持Civitai.com上的角色和风格LoRA。它还可以与InstantID结合使用,为每个ID仅使用一张图像实现多ID生成。
OMG简介: 一个用于高质量多角色图像生成的工具。
预告片演示: 使用OMG + SVD创作的短片"家庭防卫"。
:label: 更新日志
- [2023/3/22] 🔥 我们发布了OMG + InstantID的Hugging Face空间。支持使用单张图像进行ID个性化。
- [2023/3/19] 🔥 我们发布了技术报告和OMG-LoRAs的Hugging Face空间
- [2023/3/18] 🔥 我们发布了OMG的源代码和gradio演示。
🔆 介绍
1. OMG + LoRA(使用多张图像的ID)
2. OMG + InstantID(使用单张图像的ID)
3. OMG + ControlNet(布局控制)
4. OMG + 风格LoRAs(风格控制)
:wrench: 依赖项和安装
- 代码需要
python==3.10.6
,以及pytorch==2.0.1
和torchvision==0.15.2
。请按照此处的说明安装PyTorch和TorchVision依赖项。强烈建议安装支持CUDA的PyTorch和TorchVision。
conda create -n OMG python=3.10.6
conda activate OMG
pip install torch==2.0.1 torchvision==0.15.2 torchaudio==2.0.2
pip install -r requirements.txt
pip install git+https://github.com/facebookresearch/segment-anything.git
- 对于视觉理解,您可以选择
YoloWorld + EfficientViT SAM
或GroundingDINO + SAM
-
- (推荐)YoloWorld + EfficientViT SAM:
pip install inference[yolo-world]==0.9.13
pip install onnxsim==0.4.35
-
- (可选)如果您无法安装
inference[yolo-world]
,可以安装GroundingDINO
进行视觉理解。
- (可选)如果您无法安装
GroundingDINO
需要手动安装。
运行以下命令,使环境变量在当前shell下设置:
export CUDA_HOME=/path/to/cuda-11.3
在这个例子中,/path/to/cuda-11.3
应替换为您安装CUDA工具包的路径。
git clone https://github.com/IDEA-Research/GroundingDINO.git
cd GroundingDINO/
pip install -e .
更多安装详情可以在GroundingDINO找到
⏬ 预训练模型准备
1) 下载模型
1. 必需下载:
下载stable-diffusion-xl-base-1.0, controlnet-openpose-sdxl-1.0。
对于InstantID + OMG
,下载:
wangqixun/YamerMIX_v8,
InstantID,
antelopev2。
2. 对于视觉理解,您可以选择"YoloWorld + EfficientViT SAM"或"GroundingDINO + SAM"。
对于YoloWorld + EfficientViT SAM
:
EfficientViT-SAM-XL1,yolo-world。
对于GroundingDINO + SAM
:
GroundingDINO,SAM。
3. 对于角色LoRA,至少下载一个男性角色和一个女性角色。
对于男性角色LoRA
:
Chris Evans,
Gleb Savchenko,
Harry Potter,
Jordan Torres。
对于女性角色LoRA
:
Taylor Swift,
Jennifer Lawrence,
Hermione Granger,
Keira Knightley。
4. (可选)如果使用ControlNet,下载:
ControlNet、 controlnet-canny-sdxl-1.0、 controlnet-depth-sdxl-1.0、 dpt-hybrid-midas。
5. (可选)如果使用风格LoRA,请下载:
2) 准备工作
将模型放在checkpoint
下,如下所示:
OMG
├── assets
├── checkpoint
│ ├── antelopev2
│ │ └── models
│ │ └── antelopev2
│ │ ├── 1k3d68.onnx
│ │ ├── 2d106det.onnx
│ │ ├── genderage.onnx
│ │ ├── glintr100.onnx
│ │ └── scrfd_10g_bnkps.onnx
│ ├── ControlNet
│ ├── controlnet-canny-sdxl-1.0
│ ├── controlnet-depth-sdxl-1.0
│ ├── controlnet-openpose-sdxl-1.0
│ ├── dpt-hybrid-midas
│ ├── GroundingDINO
│ ├── InstantID
│ ├── lora
│ │ ├── chris-evans.safetensors
│ │ ├── Gleb-Savchenko_Liam-Hemsworth.safetensors
│ │ ├── Harry_Potter.safetensors
│ │ ├── Hermione_Granger.safetensors
│ │ ├── jordan_torres_v2_xl.safetensors
│ │ ├── keira_lora_sdxl_v1-000008.safetensors
│ │ ├── lawrence_dh128_v1-step00012000.safetensors
│ │ └── TaylorSwiftSDXL.safetensors
│ ├── sam
│ │ ├── sam_vit_h_4b8939.pth
│ │ └── xl1.pt
│ ├── stable-diffusion-xl-base-1.0
│ ├── style
│ │ ├── Anime_Sketch_SDXL.safetensors
│ │ ├── Cinematic Hollywood Film.safetensors
│ │ └── EldritchPaletteKnife.safetensors
│ └── YamerMIX_v8
├── example
├── gradio_demo
├── inference_instantid.py
├── inference_lora.py
├── README.md
├── requirements.txt
└── src
将ViT-B-32.pt
(从openai下载)放在~/.cache/clip/ViT-B-32.pt
。
如果使用YoloWorld
,将yolo-world.pt
放在/tmp/cache/yolo_world/l/yolo-world.pt
。
或者你可以手动设置检查点路径,如下所示:
python inference_lora.py \
--pretrained_sdxl_model <stable-diffusion-xl-base-1.0的路径> \
--controlnet_checkpoint <controlnet-openpose-sdxl-1.0的路径> \
--efficientViT_checkpoint <efficientViT-SAM-XL1的路径> \
--dino_checkpoint <GroundingDINO的路径> \
--sam_checkpoint <sam的路径> \
--lora_path <角色1的Lora路径|角色2的Lora路径> \
--style_lora <风格LoRA的路径>
对于OMG + InstantID:
python inference_instantid.py \
--pretrained_model <stable-diffusion-xl-base-1.0的路径> \
--controlnet_path <InstantID controlnet的路径> \
--face_adapter_path <InstantID face adapter的路径> \
--efficientViT_checkpoint <efficientViT-SAM-XL1的路径> \
--dino_checkpoint <GroundingDINO的路径> \
--sam_checkpoint <sam的路径> \
--antelopev2_path <antelopev2的路径> \
--style_lora <风格LoRA的路径>
:computer: 使用方法
1: OMG + LoRA
Harry_Potter.safetensors
的Harry Potter
,Hermione_Granger.safetensors
的Hermione Granger
。
为了视觉理解,你可以设置--segment_type 'yoloworld'
以使用YoloWorld + EfficientViT SAM
,或设置--segment_type 'GroundingDINO'
以使用GroundingDINO + SAM
。
python inference_lora.py \
--prompt <两个人的提示词> \
--negative_prompt <负面提示词> \
--prompt_rewrite "[<人物1的提示词>]-*-[<负面提示词>]|[<人物2的提示词>]-*-[负面提示词]" \
--lora_path "[<角色1的Lora路径|角色2的Lora路径>]"
例如:
python inference_lora.py \
--prompt "特写照片,展示酷炫男性和美丽女性离开岛屿带着宝藏,乘船回到度假海滩,开始他们的爱情故事时脸上幸福的笑容,35毫米照片,胶片,专业,4K,高度细节。" \
--negative_prompt '噪点,模糊,柔和,变形,丑陋' \
--prompt_rewrite '[特写照片,Chris Evans穿着霍格沃茨校服,表情惊讶,35毫米照片,胶片,专业,4K,高度细节。]-*-[噪点,模糊,柔和,变形,丑陋]|[特写照片,TaylorSwift穿着霍格沃茨校服,表情惊讶,35毫米照片,胶片,专业,4K,高度细节。]-*-[噪点,模糊,柔和,变形,丑陋]' \
--lora_path './checkpoint/lora/chris-evans.safetensors|./checkpoint/lora/TaylorSwiftSDXL.safetensors'
对于OMG + LoRA + ControlNet(人体姿势):
python inference_lora.py \
--prompt "特写照片,展示酷炫男性和美丽女性离开岛屿带着宝藏,乘船回到度假海滩,开始他们的爱情故事时脸上幸福的笑容,35毫米照片,胶片,专业,4K,高度细节。" \
--negative_prompt '噪点,模糊,柔和,变形,丑陋' \
--prompt_rewrite '[特写照片,Chris Evans穿着霍格沃茨校服,表情惊讶,35毫米照片,胶片,专业,4K,高度细节。]-*-[噪点,模糊,柔和,变形,丑陋]|[特写照片,TaylorSwift穿着霍格沃茨校服,表情惊讶,35毫米照片,胶片,专业,4K,高度细节。]-*-[噪点,模糊,柔和,变形,丑陋]' \
--lora_path './checkpoint/lora/chris-evans.safetensors|./checkpoint/lora/TaylorSwiftSDXL.safetensors' \
--spatial_condition './example/pose.png' \
--controlnet_checkpoint './checkpoint/controlnet-openpose-sdxl-1.0'
对于OMG + LoRA + 风格:
python inference_lora.py \
--prompt "特写照片,展示酷炫男性和美丽女性离开岛屿带着宝藏,乘船回到度假海滩,开始他们的爱情故事时脸上幸福的笑容,35毫米照片,胶片,专业,4K,高度细节,铅笔素描:1.2,凌乱线条,灰度,传统媒介,素描。" \
--negative_prompt '噪点,模糊,柔和,变形,丑陋' \
--prompt_rewrite '[特写照片,Chris Evans穿着霍格沃茨校服,表情惊讶,35毫米照片,胶片,专业,4K,高度细节,铅笔素描:1.2,凌乱线条,灰度,传统媒介,素描。]-*-[噪点,模糊,柔和,变形,丑陋]|[特写照片,TaylorSwift穿着霍格沃茨校服,表情惊讶,35毫米照片,胶片,专业,4K,高度细节,铅笔素描:1.2,凌乱线条,灰度,传统媒介,素描。]-*-[噪点,模糊,柔和,变形,丑陋]' \
--lora_path './checkpoint/lora/chris-evans.safetensors|./checkpoint/lora/TaylorSwiftSDXL.safetensors' \
--style_lora './checkpoint/style/Anime_Sketch_SDXL.safetensors'
2: OMG + InstantID
python inference_instantid.py \
--prompt <两个人物的提示词> \
--negative_prompt <负面提示词> \
--prompt_rewrite "[<人物1的提示词>]-*-[<负面提示词>]-*-<参考图片1的路径>|[<人物2的提示词>]-*-[负面提示词]-*-<参考图片2的路径>"
例如:
python inference_instantid.py \
--prompt '特写照片,展现酷炫男子和美丽女子离开岛屿携带宝藏、乘船返回度假海滩并开始爱情故事时脸上幸福的笑容,35毫米照片,胶片,专业,4K,高度细节。' \
--negative_prompt '杂乱,模糊,柔和,变形,丑陋' \
--prompt_rewrite '[男子特写照片,35毫米照片,专业,4K,高度细节。]-*-[杂乱,模糊,柔和,变形,丑陋]-*-./example/chris-evans.jpg|[女子特写照片,35毫米照片,专业,4K,高度细节。]-*-[杂乱,模糊,柔和,变形,丑陋]-*-./example/TaylorSwift.png'
用于 OMG + InstantID + ControlNet (人体姿势):
python inference_instantid.py \
--prompt '特写照片,展现酷炫男子和美丽女子离开岛屿携带宝藏、乘船返回度假海滩并开始爱情故事时脸上幸福的笑容,35毫米照片,胶片,专业,4K,高度细节。' \
--negative_prompt '杂乱,模糊,柔和,变形,丑陋' \
--prompt_rewrite '[男子特写照片,35毫米照片,专业,4K,高度细节。]-*-[杂乱,模糊,柔和,变形,丑陋]-*-./example/chris-evans.jpg|[女子特写照片,35毫米照片,专业,4K,高度细节。]-*-[杂乱,模糊,柔和,变形,丑陋]-*-./example/TaylorSwift.png' \
--spatial_condition './example/pose.png' \
--t2i_controlnet_path './checkpoint/controlnet-openpose-sdxl-1.0'
用于 OMG + InstantID + 风格:
python inference_instantid.py \
--prompt '特写照片,展现酷炫男子和美丽女子离开岛屿携带宝藏、乘船返回度假海滩并开始爱情故事时脸上幸福的笑容,35毫米照片,胶片,专业,4K,高度细节,铅笔素描:1.2,凌乱线条,灰度,传统媒介,速写。' \
--negative_prompt '杂乱,模糊,柔和,变形,丑陋' \
--prompt_rewrite '[男子特写照片,35毫米照片,专业,4K,高度细节,铅笔素描:1.2,凌乱线条,灰度,传统媒介,速写。]-*-[杂乱,模糊,柔和,变形,丑陋]-*-./example/chris-evans.jpg|[女子特写照片,35毫米照片,专业,4K,高度细节,铅笔素描:1.2,凌乱线条,灰度,传统媒介,速写。]-*-[杂乱,模糊,柔和,变形,丑陋]-*-./example/TaylorSwift.png' \
--style_lora './checkpoint/style/Anime_Sketch_SDXL.safetensors'
用于 OMG + InstantID + 风格 + ControlNet (人体姿势):
python inference_instantid.py \
--prompt '特写照片,展现酷炫男子和美丽女子离开岛屿携带宝藏、乘船返回度假海滩并开始爱情故事时脸上幸福的笑容,35毫米照片,胶片,专业,4K,高度细节,铅笔素描:1.2,凌乱线条,灰度,传统媒介,速写。' \
--negative_prompt '杂乱,模糊,柔和,变形,丑陋' \
--prompt_rewrite '[男子特写照片,35毫米照片,专业,4K,高度细节,铅笔素描:1.2,凌乱线条,灰度,传统媒介,速写。]-*-[杂乱,模糊,柔和,变形,丑陋]-*-./example/chris-evans.jpg|[女子特写照片,35毫米照片,专业,4K,高度细节,铅笔素描:1.2,凌乱线条,灰度,传统媒介,速写。]-*-[杂乱,模糊,柔和,变形,丑陋]-*-./example/TaylorSwift.png' \
--style_lora './checkpoint/style/Anime_Sketch_SDXL.safetensors' \
--spatial_condition './example/pose.png' \
--t2i_controlnet_path './checkpoint/controlnet-openpose-sdxl-1.0'
3. 带有 OMG + LoRA 的本地 gradio 演示
如果选择 YoloWorld + EfficientViT SAM
:
python gradio_demo/app.py --segment_type yoloworld
对于 GroundingDINO + SAM
:
python gradio_demo/app.py --segment_type GroundingDINO
4. 带有 OMG + InstantID 的本地 gradio 演示
如果选择 YoloWorld + EfficientViT SAM
:
python gradio_demo/app_instantID.py --segment_type yoloworld
对于 GroundingDINO + SAM
:
python gradio_demo/app_instantID.py --segment_type GroundingDINO
连接到启动过程完成后显示的公共 URL。