Ce projet montre comment affiner le modèle de diffusion stable sur votre propre ensemble de données.
Remarque: ce script est expérimental. Le script affiche l'ensemble du modèle et le modèle surfacte et rencontre des problèmes tels que l'oubli catastrophique. Il est recommandé d'essayer différents hyperparamters pour obtenir le meilleur résultat sur votre ensemble de données.
Avant d'exécuter les scripts, assurez-vous d'installer les dépendances de formation de la bibliothèque (comme Pytorch et? Transformers):
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .Puis courez
cd ..
pip install -r requirements.txtEt initialiser un «environnement accélérer avec:
accelerate config Ensuite, vous devez télécharger le modèle de diffusion stable pré-entraîné à l'aide de model_download.py :
python model_download.py --repo_id runwayml/stable-diffusion-v1-5
# If you cannot connect to huggingface, you should use the following command:
python model_download.py --repo_id runwayml/stable-diffusion-v1-5 --mirrorPour affiner le modèle de diffusion stable sur votre propre ensemble de données, vous devez préparer votre ensemble de données dans le format suivant:
Créez d'abord le répertoire dataset dans Root Directory, et vous devez créer trois sous-résectory jpg , hint et train . Dans le répertoire jpg , vous devez mettre toutes les images cibles dans votre ensemble de données. Dans le répertoire hint , vous devez mettre toutes les images source (images de condition) dans votre ensemble de données. Dans train Directory, vous devriez mettre une metadata.jsonl . La metadata.jsonl doit être dans le format suivant:
{ "jpg" : " ./dataset/jpg/<name_of_target_image_1> " , "txt" : " <prompt_1> " , "hint" : " ./dataset/hint/<name_of_source_image_1> " }
{ "jpg" : " ./dataset/jpg/<name_of_target_image_2> " , "txt" : " <prompt_2> " , "hint" : " ./dataset/hint/<name_of_source_image_1> " }
… Voici la structure du répertoire dataset :
dataset
├── hint
│ ├── a.png
│ ├── b.png
│ └── c.png
├── jpg
│ ├── a.png
│ ├── b.png
│ └── c.png
└── train
└── metadata.jsonl Dans le fichier metadata.jsonl :
{ "jpg" : " ./dataset/jpg/a.png " , "txt" : " a " , "hint" : " ./dataset/hint/a.png " }
{ "jpg" : " ./dataset/jpg/b.png " , "txt" : " b " , "hint" : " ./dataset/hint/b.png " }
{ "jpg" : " ./dataset/jpg/c.png " , "txt" : " c " , "hint" : " ./dataset/hint/c.png " }Pour former le modèle Lora, courir:
./train_lora.sh Vous pouvez modifier certains hyperparamètres dans le fichier run_lora.sh . Par exemple, vous pouvez modifier --num_train_epochs pour modifier le nombre d'époches de formation.
Pour former le modèle ControlNet, exécutez:
./train_controlnet.sh Vous pouvez modifier certains hyperparamètres dans le fichier run_controlnet.sh . Par exemple, vous pouvez modifier --num_train_epochs pour modifier le nombre d'époches de formation.
Pour former ControlNet et Lora en même temps, exécutez:
./train_controlnet_and_lora.shNotez que vous devez modifier le répertoire de sortie du modèle ControlNet et LORA pour démarrer votre propre formation.
Il suffit de courir:
./train_lora.sh && ./train_controlnet.sh && ./train_controlnet_and_lora.sh Vous obtiendrez tous les modèles dans le répertoire controlnet-lora-output .
Vous pouvez modifier le chemin du modèle et l'image de condition dans le fichier inference.py . Puis courez:
python inference.py Et vous obtiendrez output.png dans le répertoire racine.
Ce projet est basé sur des diffuseurs et ses exemples.