Nous présentons l'adaptation IP, un adaptateur efficace et léger pour atteindre la capacité d'invite d'image pour les modèles de diffusion de texte à image pré-formés. Un adaptateur IP avec seulement 22 m de paramètres peut atteindre des performances comparables ou encore meilleures à un modèle d'invite d'image affiné. L'adaptation IP peut être généralisée non seulement à d'autres modèles personnalisés affinés du même modèle de base, mais également à la génération contrôlable à l'aide d'outils contrôlables existants. De plus, l'invite d'image peut également bien fonctionner avec l'invite de texte pour accomplir la génération d'images multimodales.
# 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
Vous pouvez télécharger des modèles à partir d'ici. Pour exécuter la démo, vous devez également télécharger les modèles suivants:
Meilleure pratique
scale=1.0
et text_prompt=""
(ou certaines invites de texte génériques, par exemple la "meilleure qualité", vous pouvez également utiliser n'importe quelle invite de texte négative). Si vous abaissez l' scale
, des images plus diverses peuvent être générées, mais elles peuvent ne pas être aussi cohérentes avec l'invite d'image.scale
pour obtenir les meilleurs résultats. Dans la plupart des cas, scale=0.5
peut obtenir de bons résultats. Pour la version de SD 1.5, nous vous recommandons d'utiliser des modèles communautaires pour générer de bonnes images.Adaptateur IP pour les images non carrés
Étant donné que l'image est recadrée dans le processeur d'image par défaut de Clip, l'adaptateur IP fonctionne mieux pour les images carrées. Pour les images non carrées, il manquera les informations à l'extérieur du centre. Mais vous pouvez simplement redimensionner à 224x224 pour les images non carrés, la comparaison est la suivante:
La comparaison de IP-ADAPTER_XL avec Reimagine XL est indiquée comme suit:
Améliorations dans la nouvelle version (2023.9.8) :
Pour la formation, vous devez installer Accelerate et transformer votre propre ensemble de données dans un fichier JSON.
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
Une fois la formation terminée, vous pouvez convertir les poids avec le code suivant:
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" )
Ce projet s'efforce d'avoir un impact positif sur le domaine de la génération d'images dirigée par l'IA. Les utilisateurs ont la liberté de créer des images en utilisant cet outil, mais ils devraient se conformer aux lois locales et l'utiliser de manière responsable. Les développeurs n'assument aucune responsabilité pour une mauvaise utilisation potentielle des utilisateurs.
Si vous trouvez l'adaptation IP utile pour vos recherches et vos applications, veuillez citer à l'aide de ce 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 }
}