Skip to main content

IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models

GitHub


Introduction

we present IP-Adapter, an effective and lightweight adapter to achieve image prompt capability for the pre-trained text-to-image diffusion models. An IP-Adapter with only 22M parameters can achieve comparable or even better performance to a fine-tuned image prompt model. IP-Adapter can be generalized not only to other custom models fine-tuned from the same base model, but also to controllable generation using existing controllable tools. Moreover, the image prompt can also work well with the text prompt to accomplish multimodal image generation.

arch

Release

  • [2024/01/19] 🔥 Add IP-Adapter-FaceID-Portrait, more information can be found here.
  • [2024/01/17] 🔥 Add an experimental version of IP-Adapter-FaceID-PlusV2 for SDXL, more information can be found here.
  • [2024/01/04] 🔥 Add an experimental version of IP-Adapter-FaceID for SDXL, more information can be found here.
  • [2023/12/29] 🔥 Add an experimental version of IP-Adapter-FaceID-PlusV2, more information can be found here.
  • [2023/12/27] 🔥 Add an experimental version of IP-Adapter-FaceID-Plus, more information can be found here.
  • [2023/12/20] 🔥 Add an experimental version of IP-Adapter-FaceID, more information can be found here.
  • [2023/11/22] IP-Adapter is available in Diffusers thanks to Diffusers Team.
  • [2023/11/10] 🔥 Add an updated version of IP-Adapter-Face. The demo is here.
  • [2023/11/05] 🔥 Add text-to-image demo with IP-Adapter and Kandinsky 2.2 Prior
  • [2023/11/02] Support safetensors
  • [2023/9/08] 🔥 Update a new version of IP-Adapter with SDXL_1.0. More information can be found here.
  • [2023/9/05] 🔥🔥🔥 IP-Adapter is supported in WebUI and ComfyUI (or ComfyUI_IPAdapter_plus).
  • [2023/8/30] 🔥 Add an IP-Adapter with face image as prompt. The demo is here.
  • [2023/8/29] 🔥 Release the training code.
  • [2023/8/23] 🔥 Add code and models of IP-Adapter with fine-grained features. The demo is here.
  • [2023/8/18] 🔥 Add code and models for SDXL 1.0. The demo is here.
  • [2023/8/16] 🔥 We release the code and models.

Installation

# install latest diffusers
pip install diffusers==0.22.1

# install ip-adapter
pip install git+https://github.com/tencent-ailab/IP-Adapter.git

# download the models
cd IP-Adapter
git lfs install
git clone https://huggingface.co/h94/IP-Adapter
mv IP-Adapter/models models
mv IP-Adapter/sdxl_models sdxl_models

# then you can use the notebook

Download Models

you can download models from here. To run the demo, you should also download the following models:

How to Use

SD_1.5

  • ip_adapter_demo: image variations, image-to-image, and inpainting with image prompt.
  • ip_adapter_demo

image variations

image-to-image

inpainting

structural_cond structural_cond2

multi_prompts

ip_adpter_plus_image_variations ip_adpter_plus_multi

ip_adpter_plus_face

Best Practice

  • If you only use the image prompt, you can set the scale=1.0 and text_prompt=""(or some generic text prompts, e.g. "best quality", you can also use any negative text prompt). If you lower the scale, more diverse images can be generated, but they may not be as consistent with the image prompt.
  • For multimodal prompts, you can adjust the scale to get the best results. In most cases, setting scale=0.5 can get good results. For the version of SD 1.5, we recommend using community models to generate good images.

IP-Adapter for non-square images

As the image is center cropped in the default image processor of CLIP, IP-Adapter works best for square images. For the non square images, it will miss the information outside the center. But you can just resize to 224x224 for non-square images, the comparison is as follows:

SDXL_1.0

The comparison of IP-Adapter_XL with Reimagine XL is shown as follows:

sdxl_demo

Improvements in new version (2023.9.8):

  • Switch to CLIP-ViT-H: we trained the new IP-Adapter with OpenCLIP-ViT-H-14 instead of OpenCLIP-ViT-bigG-14. Although ViT-bigG is much larger than ViT-H, our experimental results did not find a significant difference, and the smaller model can reduce the memory usage in the inference phase.
  • A Faster and better training recipe: In our previous version, training directly at a resolution of 1024x1024 proved to be highly inefficient. However, in the new version, we have implemented a more effective two-stage training strategy. Firstly, we perform pre-training at a resolution of 512x512. Then, we employ a multi-scale strategy for fine-tuning. (Maybe this training strategy can also be used to speed up the training of controlnet).

How to Train

For training, you should install accelerate and make your own dataset into a json file.

accelerate launch --num_processes 8 --multi_gpu --mixed_precision "fp16" \
  tutorial_train.py \
  --pretrained_model_name_or_path="runwayml/stable-diffusion-v1-5/" \
  --image_encoder_path="{image_encoder_path}" \
  --data_json_file="{data.json}" \
  --data_root_path="{image_path}" \
  --mixed_precision="fp16" \
  --resolution=512 \
  --train_batch_size=8 \
  --dataloader_num_workers=4 \
  --learning_rate=1e-04 \
  --weight_decay=0.01 \
  --output_dir="{output_dir}" \
  --save_steps=10000

Once training is complete, you can convert the weights with the following code:

import torch
ckpt = "checkpoint-50000/pytorch_model.bin"
sd = torch.load(ckpt, map_location="cpu")
image_proj_sd = {}
ip_sd = {}
for k in sd:
    if k.startswith("unet"):
        pass
    elif k.startswith("image_proj_model"):
        image_proj_sd[k.replace("image_proj_model.", "")] = sd[k]
    elif k.startswith("adapter_modules"):
        ip_sd[k.replace("adapter_modules.", "")] = sd[k]

torch.save({"image_proj": image_proj_sd, "ip_adapter": ip_sd}, "ip_adapter.bin")

Third-party Usage

Disclaimer

This project strives to positively impact the domain of AI-driven image generation. Users are granted the freedom to create images using this tool, but they are expected to comply with local laws and utilize it in a responsible manner. The developers do not assume any responsibility for potential misuse by users.

Citation

If you find IP-Adapter useful for your research and applications, please cite using this BibTeX:

@article{ye2023ip-adapter,
  title={IP-Adapter: Text Compatible Image Prompt Adapter for Text-to-Image Diffusion Models},
  author={Ye, Hu and Zhang, Jun and Liu, Sibo and Han, Xiao and Yang, Wei},
  booktitle={arXiv preprint arxiv:2308.06721},
  year={2023}
}

Metadata

Release files for ip-adapterv 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ip-adapterv 0.1.0
File Size Uploaded Provenance Actions
ip_adapterv-0.1.0.tar.gz 26.1 kB Without provenance Details for ip_adapterv-0.1.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for ip-adapterv 0.1.0
File Interpreter ABI Platform Actions
ip_adapterv-0.1.0-py3-none-any.whl Python 3 none any Details for ip_adapterv-0.1.0-py3-none-any.whl

Total release size: 57.3 kB

Release files / ip_adapterv-0.1.0.tar.gz

Download URL ip_adapterv-0.1.0.tar.gz
Size 26.1 kB
Tags Source
SHA-256 checksum
How to use checksums
aa0d408853f5789e09dafa2cddec4537d896a652033577bcd0178396eacef08b
BLAKE2b-256 checksum
How to use checksums
ef047ad8505f28c5e1fd4e5128cb5568a0611d336feb3a5cfc6fffd2ef45fef7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Release files / ip_adapterv-0.1.0-py3-none-any.whl

Download URL ip_adapterv-0.1.0-py3-none-any.whl
Size 31.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1812b0ebac038e2b57fa92e2ee8a555f9c898b85208f789cec472d02f0e9b56b
BLAKE2b-256 checksum
How to use checksums
bf8967eaf8e4899a6fd15d22e39caf4e2b56fe0bd8df961cc81b90738b187f74
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/4.0.2 CPython/3.11.6

Security for ip-adapterv 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page