Этот репозиторий содержит кодовую базу для моделей согласованности, реализованную с помощью PyTorch для проведения крупномасштабных экспериментов на ImageNet-64, LSUN Bedroom-256 и LSUN Cat-256. В основе нашего репозитория лежит openai/guided-diffusion, который изначально был выпущен под лицензией MIT. Наши модификации обеспечили поддержку дистилляции согласованности, обучения согласованности, а также нескольких алгоритмов выборки и редактирования, обсуждаемых в статье.
Репозиторий экспериментов CIFAR-10 находится в JAX и его можно найти по адресу openai/consistency_models_cifar10.
Мы опубликовали контрольные точки для основных моделей в статье. Перед использованием этих моделей просмотрите карточку соответствующей модели, чтобы понять предполагаемое использование и ограничения этих моделей.
Вот ссылки для скачивания для каждой контрольной точки модели:
EDM на ImageNet-64: edm_imagenet64_ema.pt
Компакт-диск на ImageNet-64 с метрикой l2: cd_imagenet64_l2.pt
Компакт-диск на ImageNet-64 с метрикой LPIPS: cd_imagenet64_lpips.pt
CT на ImageNet-64: ct_imagenet64.pt
EDM на спальне LSUN-256: edm_bedroom256_ema.pt
Компакт-диск на LSUN Bedroom-256 с метрикой l2: cd_bedroom256_l2.pt
Компакт-диск на LSUN Bedroom-256 с метрикой LPIPS: cd_bedroom256_lpips.pt
CT на спальне LSUN-256: ct_bedroom256.pt
ЭДМ на LSUN Cat-256: edm_cat256_ema.pt
CD на LSUN Cat-256 с метрикой l2: cd_cat256_l2.pt
Компакт-диск на LSUN Cat-256 с метрикой LPIPS: cd_cat256_lpips.pt
CT на LSUN Cat-256: ct_cat256.pt
Чтобы установить все пакеты в этой базе кода вместе с их зависимостями, запустите
пип установить -e .
Для установки с помощью Docker выполните следующие команды:
cd docker && make build && make run
Мы предоставляем примеры обучения EDM, дистилляции согласованности, обучения согласованности, одношаговой генерации и многоэтапной генерации в файле scripts/launch.sh.
Для сравнения различных генеративных моделей мы используем FID, Precision, Recall и Inception Score. Все эти показатели можно рассчитать с использованием пакетов образцов, хранящихся в файлах .npz
(numpy). Оценить образцы можно с помощью cm/evaluations/evaluator.py так же, как описано в openai/guided-diffusion, с предоставленными там пакетами эталонных наборов данных.
Модели согласованности поддерживаются в ? диффузоры через класс ConsistencyModelPipeline
. Ниже мы приводим пример:
import torchfrom диффузоры import ConsistencyModelPipelinedevice = "cuda"# Загрузите контрольную точку cd_imagenet64_l2.model_id_or_path = "openai/diffusers-cd_imagenet64_l2"pipe = ConsistencyModelPipeline.from_pretrained(model_id_or_path, torch_dtype=torch.float16)pipe.to(device)# Одношаговая выборкаimage = Pipe(num_inference_steps=1).images[0]image.save("consistency_model_onestep_sample.png")# Одношаговая выборка, генерация изображений с учетом классов# ImageNet-64 метка класса 145 соответствует королевским пингвинамclass_id = 145class_id = torch.tensor(class_id, dtype=torch.long)image = Pipe(num_inference_steps=1, class_labels=class_id).images[0]image.save("consistency_model_onestep_sample_penguin.png")# Многошаговая выборка, генерация изображения с учетом класса# Временные шаги может быть указано явно; конкретные временные шаги, приведенные ниже, взяты из исходного репозитория Github.# https://github.com/openai/consistency_models/blob/main/scripts/launch.sh#L77image = Pipe(timesteps=[22, 0], class_labels=class_id) .images[0]image.save("consistency_model_multistep_sample_penguin.png")
Вы можете еще больше ускорить процесс вывода, используя torch.compile()
в pipe.unet
(поддерживается только в PyTorch 2.0). Для получения более подробной информации, пожалуйста, ознакомьтесь с официальной документацией. Этой поддержке способствовали ? диффузоры от dg845 и аюштуэс.
Если вы найдете этот метод и/или код полезным, рассмотрите возможность цитирования
@article{song2023consistency, title={Модели согласованности}, автор={Сонг, Ян и Дхаривал, Прафулла и Чен, Марк и Суцкевер, Илья}, журнал={препринт arXiv arXiv:2303.01469}, год={2023}, }