Сейчас в соцсетях активно форсят посты с фотографиями людей, полностью воссозданных с помощью нейронных сетей. Некоторых рядовых пользователей это пугает: как машина может создать такое реалистичное изображение никогда не существовавших людей?
Доступным это стало благодаря генеративно-состязательная сети StyleGAN2, первая версия которой была представлена Nvidia еще в 2018 году. К 2019 году разработчики выложили исходный код в открытый доступ. С тех пор специалисты со всего мира помогла совершенствовать технологию, что и привело ее фотореалистичным показателям.
Сейчас же StyleGAN2 позволяет создавать не только лица несуществующих людей, но и в целом генерировать изображения, используя тематические датасеты. А под конец февраля 2021 года вышла новая версия, для которой уже не нужны TensorFlow и CUDA 10. Порог вхождения снизился. В этой статье LabelMe расскажет, как использовать эту новую версию StyleGAN прямо на Windows.
Необходимое оборудование
Алгоритмы StyleGAN2 требуют больших вычислительных мощностей и, увы, без этого никак. Исследователи Nvidia добавили 8 V100 в систему DGX для генерирования лиц. К тому же алгоритм без зазрения совести линейно масштабируется между всеми доступными графическими процессорами. Например, примеры, которые мы рассмотрим ниже, были созданы на двойной Quadro RTX 8000.
В своей аннотации специалисты Nvidia рекомендуют использовать не менее 12 Gb ОЗУ на графическом процессоре. Но есть небольшой лайфхак: вы можете работать с меньшими вычислительными мощностями, если готовы получать более низкое разрешение изображений. Например, 256х256, в то время как стандартным решением является 1024х1024.
Еще одно ухищрение, на которое можно пойти, - установить StyleGAN2 в обход WSL2 или Docker. Это дает максимальный прирост производительности. А тут как в сражении против Таноса: нужно стянуть все имеющиеся силы.
Теперь несколько важных условий, которым нужно следовать:
- Установите последнюю версию CUDA 11. Также советуем ознакомиться с инструкцией по работе с последними версиями StyleGAN2 ADA PyTorch.
- Установите Visual C ++, чтобы пользовательские ядра CUDA могли быть скомпилированы с помощью StyleGAN. Редакцию Visual Studio Community можно найти здесь. Убедитесь, что вы устанавливаете C ++, который по умолчанию отключен в установщике Microsoft.
- После установки Visual Studio необходимо добавить несколько элементов в системные переменные PATH и окружения. Вы можете сделать это, запустив следующую пакетную программу:
C:\Program Files (x86)\Microsoft Visual Studio\<VERSION>\Community\VC\Auxiliary\Build\vcvars64.bat
Предлагаем сделать это через окно Power Shell, перейти в этот каталог и выполнить команду «vcvars64».
Установка PyTorch
Для установки PyTorch вам понадобится Python. Если его нет, то вас ждет небольшое распутье: установить Miniconda или Anaconda. В случае Miniconda потребуется поискать и установить необходимые пакеты. Anaconda, наоборот, уже включает всё, что может потребоваться на годы вперед.
Скачать Anaconda Скачать Miniconda
Разработчики StyleGAN рекомендует устанавливать версию не ниже PyTorch 1.7.1 для корректной работы. Более поздние версии, вероятно, могут работать, в зависимости от количества «критических изменений», внесенных в PyTorch.
Чтобы получить версию PyTorch, подогнанную под ваших параметры, нужно выбрать нужные параметры на официальном сайте разработчиков.
Если ваши конфигурацию совпадают, с указанными на скриншоте, то сэкономим ваше время:
pip install torch === 1.7.1 + cu110 torchvision === 0.8.2 + cu110 torchaudio === 0.7.2 -f
https://download.pytorch.org/whl/torch_stable.html
Установка NVIDIA StyleGAN2 ADA PyTorch
NVIDIA StyleGAN2 ADA можно найти на GitHub по этой ссылке.
Вы можете либо сказать архив, содержимое которого нужно извлечь в каталог, либо получить StyleGAN с помощью команды git в командной строке.
git clone https://github.com/NVlabs/stylegan2-ada-pytorch.git
На момент написания этой статьи StyleGAN не предоставил файла requirements.txt для указания необходимых пакетов. Поэтому при запуске скриптов Python вы увидите ошибки об отсутствующих пакетах. Исправить это можно просто установив их с помощью pip. Вот они сверху-вниз:
pip install click
pip install tqdm
pip install requests
pip installimageio
pip installpsutil
pip installscipy
Обучение GAN (Generative adversarial network)
Генеративно-состязательная сеть - алгоритм машинного обучения без учителя, построенный на комбинации из двух нейронных сетей. Одна генерирует образцы, другая старается отличить правильные образцы от неправильных. Чтобы обучить обучить GAN, вы должны преобразовать все изображения в формат png, подогнать их под один размер и разделить по необходимым для обучения категориями.
В принципе для этого нужен полноценный датасет. Если у вас не получается найти подходящий в открытом доступе, вы можете заказать его в LabelMe. Мы специализируемся на разметке данных и подготовке датасетов для машинного обучения. Вам достаточно сразу сказать нашему менеджеру, что собираетесь использовать данные для StyleGAN2 и мы поможем составить нужное ТЗ. В конечном счете вы получите качественный датасет, рассортированный по всем нужным классам и с подходящим качество и размером изображений.
Ниже мы рассмотрим процесс обучения GAN на примере работы Джеффа Хитона. Его задачей было создать сеть, которая генерировала бы изображения с рыбами. Для этого он конвертировал изображения из подобранной библиотеки в jpeg.
python dataset_tool.py --source c: \ jth \ fish_img --dest c: \ jth \ fish_train
Далее он запускает процесс обучения командой:
python train.py --source c: \ jth \ fish_train --outdir c: \ jth \ results
Как подмечает Хитон, процесс обучения может занять немало времени. Опять же всё упирается в имеющиеся вычислительные мощности. Зато вы сможете видеть изображения, созданные во время обучения. Это позволяет отследить прогрессию: с каждой итерацией изображения будут выглядеть точнее и фотореалистичнее.
Автор снял подробное видео, в котором разобрал весь процесс от и до. Оставим его здесь на всякий случай. А под видео будет ссылка на "Fish GAN" в GitHub. Вдруг вам будет интересно.
Узнать больше о "Fish GAN" Джеффа Хитона
Создание изображений
Для наглядности возьмем другую нейрость Хитона - Minecraft GAN. Она генерирует пейзажи из одноименной песочницы. На показаны примеры, при 2800 картинок с повторениями. Следовательно, алгоритм обучился более чем на 2800 изображениях.
По мере прохождения обучения будут создаваться моментальные снимки вашего генератора и дискриминатора, соответствующие каждому сгенерированному контрольному пункту набора изображений. Например, network-snapshot-002800.pkl сгенерировал контрольную точку изображения выше. Для создания изображений из этой сети используется следующая команда.
python generate.py --outdir = out --trunc = 1 --seeds = 85,265,297,849 \
--network = network-snapshot-002800.pkl
Такие ядра задают отдельные изображения, которые должны быть сгенерированы, где каждое ядро - отдельное изображение.
Заключение
NVIDIA StyleGAN2 - это отличный инструмент для создания ваших собственных изображений, если у вас есть достаточно вычислительной мощности. Новая версия Python позволяет легко работать в среде Windows, что значительно снижает порог вхождения и позволяет интегрировать нейронные сети даже в малый бизнес или стартапы. Разобраться в настройке и работе сможет практически каждый, благодаря простате настройки и подробным инструкциям.
Самой сложной в работе с NVIDIA StyleGAN2 остается поиск подходящего датасета. Все изображения должны быть в одном формате и одного размера, но, что важнее, правильно рассортированы по классам. Если вы не хотите тратить часы, собирая и подготавливая подходящие картинки, доверьте это LabelMe.
У нас есть собственный штат обученных разметчиков и специальное ПО, которое обучается в процессе сортировки изображений по классам. Это повышает скорость и точность классификации. А самое приятное, что оценить это вживую можно совершенно бесплатно: мы подготовим тестовый датасет спустя три часа после финального обсуждения и отправим его вам. Вы сможете оценить качество, не потратив ни копейки.