Este proyecto muestra cómo ajustar el modelo de difusión estable en su propio conjunto de datos.
Nota: Este guión es experimental. El script ajusta todo el modelo y, a menudo, el modelo se vuelve a superar y se encuentra con problemas como el olvido catastrófico. Se recomienda probar diferentes hiperparamters para obtener el mejor resultado en su conjunto de datos.
Antes de ejecutar los scripts, asegúrese de instalar las dependencias de capacitación de la biblioteca (como Pytorch y? Transformers):
git clone https://github.com/huggingface/diffusers
cd diffusers
pip install .Luego corre
cd ..
pip install -r requirements.txtE inicializar un entorno acelerado con:
accelerate config Luego debe descargar el modelo de difusión estable previamente previa al modelo utilizando 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 --mirrorPara ajustar el modelo de difusión estable en su propio conjunto de datos, debe preparar su conjunto de datos en el siguiente formato:
En primer lugar, cree el directorio dataset en el directorio raíz, y debe crear tres jpg , hint y train subdirectorio. En el directorio jpg , debe colocar todas las imágenes de destino en su conjunto de datos. En el directorio hint , debe colocar todas las imágenes de origen (imágenes de condición) en su conjunto de datos. En el directorio train , debe poner un metadata.jsonl . El metadata.jsonl debe estar en el siguiente formato:
{ "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> " }
… Aquí está la estructura del directorio dataset :
dataset
├── hint
│ ├── a.png
│ ├── b.png
│ └── c.png
├── jpg
│ ├── a.png
│ ├── b.png
│ └── c.png
└── train
└── metadata.jsonl En el archivo 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 " }Para entrenar al modelo Lora, ejecute:
./train_lora.sh Puede cambiar algunos hiperparámetros en el archivo run_lora.sh . Por ejemplo, puede cambiar --num_train_epochs para cambiar el número de épocas de entrenamiento.
Para entrenar el modelo de control de control, ejecutar:
./train_controlnet.sh Puede cambiar algunos hiperparámetros en el archivo run_controlnet.sh . Por ejemplo, puede cambiar --num_train_epochs para cambiar el número de épocas de entrenamiento.
Para entrenar Controlnet y Lora al mismo tiempo, ejecute:
./train_controlnet_and_lora.shTenga en cuenta que debe cambiar el directorio de salida del modelo ControlNet y Lora para comenzar su propia capacitación.
Solo corre:
./train_lora.sh && ./train_controlnet.sh && ./train_controlnet_and_lora.sh Obtendrá todos los modelos en el directorio controlnet-lora-output .
Puede cambiar la ruta del modelo y la imagen de condición en el archivo inference.py . Luego corre:
python inference.py Y obtendrá output.png en el directorio raíz.
Este proyecto se basa en difusores y sus ejemplos.