Hugging NFT — cоздайте NFT или обучите новую модель всего за несколько кликов. Тренируйте сколько сможете, а сообщество продолжит с вашего чекпоинта!

В этой статье мы научимся генерировать изображения NFT с помощью генеративно-состязательной сети (англ. generative adversarial network, сокращённо GAN), а также адаптируем проект к удобному Hugging Face хабу.

GitHub
Demo Space

Введение

Проект создавался во время четырнадцатидневного хакатона "HugGAN Sprint". И чтобы вас сразу заинтересовать, посмотрите на пример генерации:

А теперь начнем с самого начала...

Generative Adversarial Network

GAN содержит генератор, который генерирует изображение на основе заданного набора данных, и дискриминатор (классификатор), чтобы различать, является ли изображение реальным или сгенерированным.

Пример пайплайна можно увидеь на фото:

Источник: https://naokishibuya.medium.com/understanding-generative-adversarial-networks-4dafc963f2ef
Источник: https://naokishibuya.medium.com/understanding-generative-adversarial-networks-4dafc963f2ef

Собираем датасет

Парсить данные мы будем из OpenSea через их "прекрасный" API.

Так как CloudFlare почти всегда блокирует любые запросы через API, то мы будем парсить данные через Selenium.

Итак, сначала загружаем chromedriver отсюда и впишите путь:

python huggingnft/datasets/collect_dataset.py \
	--collection_name cyberkongz \
  --use_selenium \
  --driver_path huggingnft/datasets/chromedriver



И вот через пару минут датасет появляется тут: ссылка.

Тренируем модель

Вы можете легко добавить новую модель в любую коллекцию 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

Изображения и интерполяция (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 алгоритмов!

Если вы дочитали до самого конца, то попрошу вас оставить комментарий под статьей и поставить звезду на репозиторий.

Комментарии (0)