TL;DR : Частично мотивированные FLAN и частично InstructPix2Pix, мы исследуем способ настройки Stable Diffusion с помощью инструкций. Это позволяет нам подсказывать нашей модели, используя входное изображение и «инструкцию», например — Применить мультипликационный фильтр к естественному изображению .
Вы можете прочитать сообщение в нашем блоге, чтобы узнать более подробную информацию.
? Мотивация
? Подготовка данных
? Обучение
? Модели, наборы данных, демо
️ Вывод
? Результаты
? Благодарности
Настройка инструкций — это контролируемый способ обучения языковых моделей следованию инструкциям для решения задачи. Он был представлен Google в книге «Точно настроенные языковые модели — учащиеся с нулевым выстрелом» (FLAN). Из недавнего времени вы можете вспомнить такие работы, как Alpaca и FLAN V2, которые являются хорошими примерами того, насколько полезной может быть настройка инструкций для различных задач.
С другой стороны, идея обучения Stable Diffusion следовать инструкциям пользователя по редактированию входных изображений была представлена в InstructPix2Pix: Обучение следованию инструкциям по редактированию изображений.
Наша мотивация в этой работе частично исходит от линии работ FLAN, а частично от InstructPix2Pix. Мы хотели выяснить, можно ли предложить Stable Diffusion конкретные инструкции и входные изображения для их обработки в соответствии с нашими потребностями.
Наша основная идея состоит в том, чтобы сначала создать набор данных с инструкциями (как описано в нашем блоге), а затем провести обучение стилю InstructPix2Pix. Конечная цель — сделать Stable Diffusion лучше при выполнении конкретных инструкций, которые влекут за собой операции, связанные с преобразованием изображений.
Наш процесс подготовки данных основан на FLAN. Более подробную информацию можно найти в разделах ниже.
data_preparation
.Кончик
В случае использования пользовательских наборов данных необходимо настроить набор данных по своему выбору, при условии, что вы поддерживаете формат, представленный здесь. Возможно, вам придется настроить загрузчик данных и класс набора данных, если вы не хотите использовать библиотеку datasets
. Если вы это сделаете, вам, возможно, придется соответствующим образом скорректировать сценарии обучения.
Мы рекомендуем использовать для этого виртуальную среду Python. Не стесняйтесь использовать здесь свой любимый.
Мы проводили эксперименты с PyTorch 1.13.1 (CUDA 11.6) и одним графическим процессором A100. Поскольку установка PyTorch может зависеть от оборудования, мы отсылаем вас к официальной документации по установке PyTorch.
После установки PyTorch мы можем установить остальные зависимости:
pip install -r requirements.txt
Кроме того, мы рекомендуем установить xformers для обеспечения эффективного использования памяти.
Примечание . Если вы используете PyTorch 2.0, вам не нужно дополнительно устанавливать xformers. Это связано с тем, что при использовании PyTorch 2.0 мы по умолчанию используем процессор внимания с эффективным использованием памяти в Diffusers.
Наш обучающий код использует? диффузоры, ? ускориться и? трансформаторы. В частности, мы расширяем этот обучающий пример в соответствии с нашими потребностями.
export MODEL_ID= " runwayml/stable-diffusion-v1-5 "
export DATASET_ID= " instruction-tuning-sd/cartoonization "
export OUTPUT_DIR= " cartoonization-scratch "
accelerate launch --mixed_precision= " fp16 " train_instruct_pix2pix.py
--pretrained_model_name_or_path= $MODEL_ID
--dataset_name= $DATASET_ID
--use_ema
--enable_xformers_memory_efficient_attention
--resolution=256 --random_flip
--train_batch_size=2 --gradient_accumulation_steps=4 --gradient_checkpointing
--max_train_steps=15000
--checkpointing_steps=5000 --checkpoints_total_limit=1
--learning_rate=5e-05 --lr_warmup_steps=0
--mixed_precision=fp16
--val_image_url= " https://hf.co/datasets/diffusers/diffusers-images-docs/resolve/main/mountain.png "
--validation_prompt= " Generate a cartoonized version of the natural image "
--seed=42
--output_dir= $OUTPUT_DIR
--report_to=wandb
--push_to_hub
Примечание . Следуя InstructPix2Pix, мы тренируемся с разрешением 256x256, и это, похоже, не слишком сильно влияет на конечное качество, когда мы выполняем вывод с разрешением 512x512.
После успешного запуска обучения журналы будут автоматически отслеживаться с использованием весов и отклонений. В зависимости от того, как вы указали checkpointing_steps
и max_train_steps
, будут также промежуточные контрольные точки. В конце обучения вы можете ожидать каталог (а именно OUTPUT_DIR
), содержащий промежуточные контрольные точки и конечные артефакты конвейера.
Если указан --push_to_hub
, содержимое OUTPUT_DIR
будет отправлено в репозиторий Hugging Face Hub.
Вот пример страницы запуска «Вес и предвзятость». Вот пример того, как будет выглядеть репозиторий конвейера в Hugging Face Hub.
export MODEL_ID= " timbrooks/instruct-pix2pix "
export DATASET_ID= " instruction-tuning-sd/cartoonization "
export OUTPUT_DIR= " cartoonization-finetuned "
accelerate launch --mixed_precision= " fp16 " finetune_instruct_pix2pix.py
--pretrained_model_name_or_path= $MODEL_ID
--dataset_name= $DATASET_ID
--use_ema
--enable_xformers_memory_efficient_attention
--resolution=256 --random_flip
--train_batch_size=2 --gradient_accumulation_steps=4 --gradient_checkpointing
--max_train_steps=15000
--checkpointing_steps=5000 --checkpoints_total_limit=1
--learning_rate=5e-05 --lr_warmup_steps=0
--mixed_precision=fp16
--val_image_url= " https://hf.co/datasets/diffusers/diffusers-images-docs/resolve/main/mountain.png "
--validation_prompt= " Generate a cartoonized version of the natural image "
--seed=42
--output_dir= $OUTPUT_DIR
--report_to=wandb
--push_to_hub
export MODEL_ID= " runwayml/stable-diffusion-v1-5 "
export DATASET_ID= " instruction-tuning-sd/low-level-image-proc "
export OUTPUT_DIR= " low-level-img-proc-scratch "
accelerate launch --mixed_precision= " fp16 " train_instruct_pix2pix.py
--pretrained_model_name_or_path= $MODEL_ID
--dataset_name= $DATASET_ID
--original_image_column= " input_image "
--edit_prompt_column= " instruction "
--edited_image_column= " ground_truth_image "
--use_ema
--enable_xformers_memory_efficient_attention
--resolution=256 --random_flip
--train_batch_size=2 --gradient_accumulation_steps=4 --gradient_checkpointing
--max_train_steps=15000
--checkpointing_steps=5000 --checkpoints_total_limit=1
--learning_rate=5e-05 --lr_warmup_steps=0
--mixed_precision=fp16
--val_image_url= " https://hf.co/datasets/sayakpaul/sample-datasets/resolve/main/derain_the_image_1.png "
--validation_prompt= " Derain the image "
--seed=42
--output_dir= $OUTPUT_DIR
--report_to=wandb
--push_to_hub
export MODEL_ID= " timbrooks/instruct-pix2pix "
export DATASET_ID= " instruction-tuning-sd/low-level-image-proc "
export OUTPUT_DIR= " low-level-img-proc-finetuned "
accelerate launch --mixed_precision= " fp16 " finetune_instruct_pix2pix.py
--pretrained_model_name_or_path= $MODEL_ID
--dataset_name= $DATASET_ID
--original_image_column= " input_image "
--edit_prompt_column= " instruction "
--edited_image_column= " ground_truth_image "
--use_ema
--enable_xformers_memory_efficient_attention
--resolution=256 --random_flip
--train_batch_size=2 --gradient_accumulation_steps=4 --gradient_checkpointing
--max_train_steps=15000
--checkpointing_steps=5000 --checkpoints_total_limit=1
--learning_rate=5e-05 --lr_warmup_steps=0
--mixed_precision=fp16
--val_image_url= " https://hf.co/datasets/sayakpaul/sample-datasets/resolve/main/derain_the_image_1.png "
--validation_prompt= " Derain the image "
--seed=42
--output_dir= $OUTPUT_DIR
--report_to=wandb
--push_to_hub
Опробуйте модели в интерактивном режиме БЕЗ какой-либо настройки: Демо
import torch
from diffusers import StableDiffusionInstructPix2PixPipeline
from diffusers . utils import load_image
model_id = "instruction-tuning-sd/cartoonizer"
pipeline = StableDiffusionInstructPix2PixPipeline . from_pretrained (
model_id , torch_dtype = torch . float16 , use_auth_token = True
). to ( "cuda" )
image_path = "https://hf.co/datasets/diffusers/diffusers-images-docs/resolve/main/mountain.png"
image = load_image ( image_path )
image = pipeline ( "Cartoonize the following image" , image = image ). images [ 0 ]
image . save ( "image.png" )
import torch
from diffusers import StableDiffusionInstructPix2PixPipeline
from diffusers . utils import load_image
model_id = "instruction-tuning-sd/low-level-img-proc"
pipeline = StableDiffusionInstructPix2PixPipeline . from_pretrained (
model_id , torch_dtype = torch . float16 , use_auth_token = True
). to ( "cuda" )
image_path = "https://hf.co/datasets/sayakpaul/sample-datasets/resolve/main/derain%20the%20image_1.png"
image = load_image ( image_path )
image = pipeline ( "derain the image" , image = image ). images [ 0 ]
image . save ( "image.png" )
Примечание . Поскольку приведенные выше конвейеры по существу относятся к типу
StableDiffusionInstructPix2PixPipeline
, вы можете настроить несколько аргументов, предоставляемых конвейером. Для получения более подробной информации обратитесь к официальной документации.
Дополнительную информацию о результатах и открытых вопросах можно найти в нашем блоге.
Спасибо Аларе Дирик и Чжэнчжонг Ту за полезные обсуждения.
@article {
Paul2023instruction-tuning-sd,
author = { Paul, Sayak } ,
title = { Instruction-tuning Stable Diffusion with InstructPix2Pix } ,
journal = { Hugging Face Blog } ,
year = { 2023 } ,
note = { https://huggingface.co/blog/instruction-tuning-sd } ,
}