![](https://habrastorage.org/getpro/habr/upload_files/dbb/978/8db/dbb9788dbd2d6c32c7f01329cefbf7a5.png)
Hugging NFT — cоздайте NFT или обучите новую модель всего за несколько кликов. Тренируйте сколько сможете, а сообщество продолжит с вашего чекпоинта!
В этой статье мы научимся генерировать изображения NFT с помощью генеративно-состязательной сети (англ. generative adversarial network, сокращённо GAN), а также адаптируем проект к удобному Hugging Face хабу.
Введение
Проект создавался во время четырнадцатидневного хакатона "HugGAN Sprint". И чтобы вас сразу заинтересовать, посмотрите на пример генерации:
![](https://habrastorage.org/getpro/habr/upload_files/f81/cef/6cd/f81cef6cdcb463d941656ac6eb3f32d6.gif)
А теперь начнем с самого начала...
Generative Adversarial Network
GAN содержит генератор, который генерирует изображение на основе заданного набора данных, и дискриминатор (классификатор), чтобы различать, является ли изображение реальным или сгенерированным.
Пример пайплайна можно увидеь на фото:
![Источник: https://naokishibuya.medium.com/understanding-generative-adversarial-networks-4dafc963f2ef Источник: https://naokishibuya.medium.com/understanding-generative-adversarial-networks-4dafc963f2ef](https://habrastorage.org/getpro/habr/upload_files/611/800/3aa/6118003aa13f21066309423471fe926a.png)
Собираем датасет
Парсить данные мы будем из OpenSea через их "прекрасный" API.
Так как CloudFlare почти всегда блокирует любые запросы через API, то мы будем парсить данные через Selenium.
Итак, сначала загружаем chromedriver
отсюда и впишите путь:
python huggingnft/datasets/collect_dataset.py \
--collection_name cyberkongz \
--use_selenium \
--driver_path huggingnft/datasets/chromedriver
![](https://habrastorage.org/getpro/habr/upload_files/f49/365/944/f49365944adeb641977df30a396e9d02.png)
И вот через пару минут датасет появляется тут: ссылка.
Тренируем модель
Вы можете легко добавить новую модель в любую коллекцию Open Sea. Обратите внимание, что важно собрать набор данных перед обучением — проверьте соответствующий раздел.
Google Colab
Перейдите по этой ссылке: link
Терминал
Теперь вы можете запустить скрипт следующим образом:
accelerate config
=> Accelerate спросит, в какой среде вы хотели бы запустить свой скрипт, просто ответьте на задаваемые вопросы.
Теперь вписываем данные и запускам:
accelerate launch huggingnft/lightweight_gan/train.py \
--wandb \
--image_size 256 \
--num_train_steps 10000 \
--save_every 1000 \
--dataset_name huggingnft/cyberkongz \
--push_to_hub \
--name cyberkongz \
--organization_name huggingnft
Вуаля! Тренировка началась, а за результатами можно следить на Weights & Biases (программа попросит авторизоваться).
Генерируем разультаты
Есть несколько удобных способов потыкать наши модельки.
Space
https://huggingface.co/spaces/huggan/huggingnft
![](https://habrastorage.org/getpro/habr/upload_files/dd2/3ca/bef/dd23cabef8e98637a224d425a2c06e06.png)
Изображения и интерполяция (gif)
Google Colab
Просто перейдите по этой ссылке.
Терминал
Для изображений:
python huggingnft/lightweight_gan/generate_image.py \
--collection_name cryptopunks \
--nrows 8 \
--generation_type default
Для интерполяции:
python huggingnft/lightweight_gan/generate_interpolation.py \
--collection_name cryptopunks \
--nrows 8 \
--num_steps 100
Python
Для изображений:
from huggingnft.lightweight_gan.train import timestamped_filename
from huggingnft.lightweight_gan.lightweight_gan import load_lightweight_model
collection_name = "cyberkongz"
nrows = 8
generation_type = "default" # ["default", "ema"]
model = load_lightweight_model(f"huggingnft/{collection_name}")
image_saved_path, generated_image = model.generate_app(
num=timestamped_filename(),
nrow=nrows,
checkpoint=-1,
types=generation_type
)
Для интерполяции:
from huggingnft.lightweight_gan.train import timestamped_filename
from huggingnft.lightweight_gan.lightweight_gan import load_lightweight_model
collection_name = "cyberkongz"
nrows = 1
num_steps = 100
model = load_lightweight_model(f"huggingnft/{collection_name}")
gif_saved_path = model.generate_interpolation(
num=timestamped_filename(),
num_image_tiles=nrows,
num_steps=num_steps,
save_frames=False
)
Результаты
Заключение
Я думаю, что проект удался. И является отличным примером для изучения GAN алгоритмов!
Если вы дочитали до самого конца, то попрошу вас оставить комментарий под статьей и поставить звезду на репозиторий.