В один из весенних вечеров 2020 года я прочитал статью о нейросети face-depixelizer. После изучения, оказалось, что это своего рода фронтэнд для движка PULSE. Который базируется на нейросети StyleGAN (генерирует лица со случайными чертами).
В этом туториале по шагам расскажу и покажу, как я установил Ubuntu на Windows 10 (WSL), настроил окружение для экспериментов с PULSE, закинул очередную исходную фотографию и получил неплохой результат.
Анимация морфинга и видео-туториал — далее.
Face-Depixelizer — фронтэнд для работы с PULSE.
PULSE — движок на нейросети StyleGAN. Смысл его в том, что он восстанавливает изображения лица человека из нечёткой фотографии. И, кстати, это научная работа для CFV.
StyleGAN — генеративная состязательная нейросеть от NVidia, генерирует случайное лицо несуществующего человека (на самом деле будет забавно, если такой чел уже существует).
PULSE, наконец-то, примерно нам скажет, как выглядит тот самый человек, который моргнул на этом фото!
Мне стало интересно, что же под капотом PULSE и, вообще, как его можно завести локально.
Для интереса, диагонально просмотрев научную статью, я стал думать, как с чего начать и как это всё установить (при том что ни разу не ставил себе «нейросети»).
А начал я с того, что как можно скорее, пока не упал гитхаб (если вы понимаете о чём я), перешёл к проекту PULSE. Где автор указал такой вариант установки: анаконда и питон. Т.е. во всяком случае требуются платформо-зависимые пакеты (библиотеки). Я по большей части — пользователь Windows, чем Linux. Но, всё равно, хотелось бы запустить без правок и утомительного подбора библиотек. А без Linux этого никак не сделать.
Некоторое время назад часть айти-специалистов холиварили про линукс в винде. И скажу я вам, что, по мне — зря. Вещь удобная, хотя до сих пор не доделанная.
Т.е. это доступ к командной строке linux из винды. Терминал с линуксом запускается так же просто, как cmd. Удобно.
Скачиваем и устанавливаем анаконду.
Выше — анимация морфинга, созданная из промежуточных изображений.
Как говорится: «лучше один раз увидеть, чем сто раз услышать». На видео все шаги, начиная с обновления WSL2 и установки Ubuntu.
А теперь…
В очередной раз повторю требования (… и после сотого редактирования, в сотый раз вспомню Фаулера):
Цель: Windows 10 version 2004 build 20150 и выше
Предподготовка:
Что делаем:
Проверка: запускаем
Цель: Установка последней версии NVidia Driver CUDA WSL
Что делаем:
Проверка: будет на этапе «проверка работоспособоности CUDA»
Цель: WSL2 версии 4.19.121 и выше
Предподготовка:
Что делаем:
Проверка: команда:
Цель: Ubuntu 18.04 на WSL2
Предподготовка: если на WSL ранее была установлена Ubuntu 18.04 (нижеследующую ветку я не проверял, но было бы неплохо, если вы укажете в комментариях, кто сталкивался, помогло ли):
Что делаем:
Проверка: открываем терминал, выполняем:
видим
Для этого запускаем примеры (информативна программа deviceQuery):
На этом этапе, по идее, можно остановиться. Но я пошёл дальше и для экспериментов установил jupyter notebook.
Возможные проблемы — ниже.
Вариант: вы под другим пользователем, не хватает привилегий.
Решение: см. ссылку. Но у меня решилось без изменений реестра.
Варианты:
При запуске
Ошибка:
Решение: копируем строку подключения в браузер (с другими решениями не разбирался).
Ошибка:
Решение: копируем исходный файл у меня и кидаем в корень — в папку cache (создаём, если её нет).
Либо:
Ошибка:
Решение: если вы проверяли pytorch и он работает, то это означает, что вы не активировали окружение pulse. Для этого выполните следующую команду:
Следующим этапом хотелось бы изучить StyleGAN и, базирующиеся на ней, другие «нейросети».
Был бы рад почитать ваши отзывы по статье, рекомендации (в т.ч. по изложению, т.к. это первая моя публичная статья), поправки.
Всем спасибо за чтение!
В этом туториале по шагам расскажу и покажу, как я установил Ubuntu на Windows 10 (WSL), настроил окружение для экспериментов с PULSE, закинул очередную исходную фотографию и получил неплохой результат.
Анимация морфинга и видео-туториал — далее.
Что нам дано
Face-Depixelizer — фронтэнд для работы с PULSE.
PULSE — движок на нейросети StyleGAN. Смысл его в том, что он восстанавливает изображения лица человека из нечёткой фотографии. И, кстати, это научная работа для CFV.
StyleGAN — генеративная состязательная нейросеть от NVidia, генерирует случайное лицо несуществующего человека (на самом деле будет забавно, если такой чел уже существует).
PULSE, наконец-то, примерно нам скажет, как выглядит тот самый человек, который моргнул на этом фото!
Возьмёмся за PULSE
Мне стало интересно, что же под капотом PULSE и, вообще, как его можно завести локально.
Для интереса, диагонально просмотрев научную статью, я стал думать, как с чего начать и как это всё установить (при том что ни разу не ставил себе «нейросети»).
А начал я с того, что как можно скорее, пока не упал гитхаб (если вы понимаете о чём я), перешёл к проекту PULSE. Где автор указал такой вариант установки: анаконда и питон. Т.е. во всяком случае требуются платформо-зависимые пакеты (библиотеки). Я по большей части — пользователь Windows, чем Linux. Но, всё равно, хотелось бы запустить без правок и утомительного подбора библиотек. А без Linux этого никак не сделать.
Некоторое время назад часть айти-специалистов холиварили про линукс в винде. И скажу я вам, что, по мне — зря. Вещь удобная, хотя до сих пор не доделанная.
WSL — подсистема Windows для Linux позволяет разработчикам запускать среду GNU/Linux, включая большинство программ командной строки, служебных программ и приложений, непосредственно в Windows без каких-либо изменений, избавляя от необходимости использовать отдельную виртуальную машину.
Т.е. это доступ к командной строке linux из винды. Терминал с линуксом запускается так же просто, как cmd. Удобно.
Приступим
Для работы с терминалом здесь и в видео буду использовать Windows Terminal (из Windows Store).
Кратко говоря
Проверяем требования
- NVidia видеокарта с поддержкой CUDA (нейросеть StyleGAN использует CUDA). Список поддерживаемых видеокарт здесь
- Экспериментальные NVidia драйвера с поддержкой CUDA в WSL2 (пока не лагает, играл).
- Windows 10 version 2004 build 20150 и выше (пока она доступна в Windows Insider Program на раннем доступе), с обновлениями компонентов. С чего начать и как установить здесь
- Как установить WSL2 (4.19.121 и выше; опять же пока только в раннем доступе Windows) для установки linux системы.
- Ubuntu 18.04 для WSL2 из Windows Store.
Подготавливаем Ubuntu
- Устанавливаем cmake
- Устанавливаем unzip, понадобится для распаковки проектов из гитхаба
- Устанавливаем NVidia CUDA Toolkit.
Проверяем работоспособность CUDA
- Скачиваем примеры CUDA
- Компилим и запускаем.
Устанавливаем окружение
Скачиваем и устанавливаем анаконду.
Устанавливаем PULSE
- Скачиваем с гитхаба PULSE
- Редактируем pulse.yml:
- Добавляем каналы anaconda, conda-forge
- Удаляем ссылки на конкретные сборки
- Устанавливаем окружение PULSE, используя отредактированный файл
- Проверяем работоспособность Pytorch и CUDA Toolkit в Python.
Экспериментируем
- Используя pip, обновляем jupyter notebook до последней версии
- Подгоняем изображение (в issue пишут, что PULSE работает с квадратным изображением 1024*1024 и тремя каналами RGB, т.е. без прозрачности)
- Увеличиваем\уменьшаем количество шагов и погрешность
- ...
- PROFIT!
Выше — анимация морфинга, созданная из промежуточных изображений.
Как говорится: «лучше один раз увидеть, чем сто раз услышать». На видео все шаги, начиная с обновления WSL2 и установки Ubuntu.
А теперь…
Подробнее
Требования
В очередной раз повторю требования (… и после сотого редактирования, в сотый раз вспомню Фаулера):
- Windows 10 version 2004 build 20150 и выше
- WSL2 (версия 4.19.121 и выше)
- Ubuntu 18.04 для WSL2 — сам дистрибутив из Windows Store. Устанавливается после наката всех обновлений Windows 10 Insider в т.ч. WSL2
- NVidia Driver WSL — экспериментальная версия драйверов с поддержкой новой версии WSL2. Требуется согласие на участие в экспериментальной программе NVidia. Но не всякая карта подойдёт.
Подготовка ОС
Windows 10
Цель: Windows 10 version 2004 build 20150 и выше
Предподготовка:
- Запускаем обновления
- После чего, при помощи приложения
winver
, проверяем текущую версию винды - Если версия вашей винды ниже Windows 10 версии 2004 build 20150, то потребуется выполнить нижеследующие шаги
- А если всё ок, поздравляю, вам не придётся вступать в Windows Insider Program! Смело приступайте к следующему этапу!
Что делаем:
- Вступаем в Windows Insider Program
- Далее, в параметрах системы «Обновление и безопасность»:
- Вкладка «Программа предварительной оценки» (если пустой экран, см. секцию «Решение проблем», ниже):
- Параметры оценки: «Ранний доступ»
- Нажимаем «Начать».
- Вкладка «Центр обновления Windows»:
- В «Дополнительно» обязательно разрешаем «При обновлении получать обновления для других продуктов Майкрософт» (это для установки WSL2 4.19.121 и выше)
- Обновляемся.
- Вкладка «Программа предварительной оценки» (если пустой экран, см. секцию «Решение проблем», ниже):
Проверка: запускаем
winver
. В открывшемся диалоговом окне смотрим версию.NVidia Driver CUDA WSL
Цель: Установка последней версии NVidia Driver CUDA WSL
Что делаем:
- Заходим на страницу
- Если ещё не зарегались, регаемся; соглашаемся на участие в экспериментальной программе
- Скачиваем и устанавливаем.
Проверка: будет на этапе «проверка работоспособоности CUDA»
WSL2
Цель: WSL2 версии 4.19.121 и выше
Предподготовка:
- Обновляем винду до Windows 10 version 2004 build 20150 и выше, если не обновилии по шагам выше
- Если, после выполнения в терминале:
будет выведено содержимое справки (а-ляwsl --update
wsl --help
), то у вас старая версия. Тогда приступаем к выполнению шагов ниже - Если выведется версия от 4.19.121 и выше, то пропускаем этот этап.
Что делаем:
- Запускаем PowerShell с правами админа и последовательно выполняем:
- Включаем дополнительный компонент «Подсистема Windows для Linux»:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
- Затем, включаем компонент «Virtual Machine Platform»:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
- Перезагружаемся.
- Включаем дополнительный компонент «Подсистема Windows для Linux»:
- Обновляем WSL:
wsl --update
- Далее, устанавливаем вторую версию WSL — как дефолтную для всех будущих дистрибутивов:
Для этого запускаем PowerShell с правами админа и выполняем:
wsl --set-default-version 2
Проверка: команда:
wsl --update
[после установки обновления] выведет версию 4.19.121 и выше.Ubuntu 18.04 на WSL2
Цель: Ubuntu 18.04 на WSL2
Предподготовка: если на WSL ранее была установлена Ubuntu 18.04 (нижеследующую ветку я не проверял, но было бы неплохо, если вы укажете в комментариях, кто сталкивался, помогло ли):
- Проверяем её в списке:
wsl --list --all -v
- Для этого дистрибутива переключаем версию WSL на ver.2:
wsl --set-version Distro 2
Например:
wsl --set-version Ubuntu-18.04 2
- Перезагружаемся.
Что делаем:
- Заходим в Windows Store
- Ищем Ubuntu 18.04 и устанавливаем
Проверка: открываем терминал, выполняем:
wsl --list --all -v
видим
Ubuntu 18.04 Version 2
Подготовка Ubuntu
Предподготовка
- Обновляем индексы пакетов:
sudo apt update
- Устанавливаем cmake (для установки dlib):
sudo apt install cmake
- Для распаковки zip архивов устанавливаем, к примеру, утилиту unzip:
sudo apt install unzip
Устанавливаем CUDA Toolkit
- Добавляем CUDA в индекс пакетов:
sudo apt-key adv --fetch-keys http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub sudo sh -c 'echo "deb http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64 /" > /etc/apt/sources.list.d/cuda.list' sudo apt update
- Устанавливаем CUDA Toolkit:
sudo apt install -y cuda-toolkit-11-0
Проверяем работоспособность CUDA Toolkit
Для этого запускаем примеры (информативна программа deviceQuery):
- Скачиваем:
wget https://github.com/NVIDIA/cuda-samples/archive/master.zip
- Разархивируем:
unzip master.zip
- Переходим и билдим (всё):
make
- Запускаем:
./bin/x86_64/linux/release/deviceQuery
Приложение выведет список совместимых устройств.
Устанавливаем Anaconda
- Скачиваем дистрибутив по ссылке
- Запускаем:
bash Anaconda3-2020.02-Linux-x86_64.sh
Во время инсталляции:
- Соглашаемся на лицензию
- Оставляем PREFIX
- Соглашаемся на инициализацию
- Перезапускаем терминал, либо выполняем:
source ~/.bashrc
Настройка окружения в анаконде
Настраиваем PULSE
- Скачиваем:
wget https://github.com/adamian98/pulse/archive/master.zip
- Разархивируем:
unzip master.zip
- Создаём бэкап pulse.yml:
cp pulse.yml pulse.yml.bak
- Фиксим pulse.yml:
- Добавляем каналы (это источники пакетов):
- conda-forge
- anaconda
- Убираем все референсы на конкретную версию пакета.
Пример: из строки "zstd=1.3.7=h5bba6e5_0
" убираем последнюю часть, начиная со знака равенства: "=h5bba6e5_0
". В итоге получим "zstd=1.3.7
".
Делаем это либо руками, либо через утилиту sed:
sed '/==/b; s/=\([^=]*\)$//' pulse.yml > pulse1.yml
Примечание: первая часть означает, мол, если видим "==", то прыгаем в конец regexp скрипта
- Добавляем каналы (это источники пакетов):
- Создаём окружение по файлу
pulse1.yml
:
conda env create -f pulse1.yml
- Может быть и такое, что версия какого-то файла не найдена
NotResolverPackage
. Для примера возьмёмlibfortran 3.0.1
:
- Гуглим conda libfortran
- В Anaconda Cloud в Files видим эту самую версию (3.0.1), но, к сожалению, она для osx-64
- Продолжаем поиск в Anaconda Cloud, видим в канале cloud-forge только предыдущую версию 3.0.0-1 для linux-64. Подходит!
- Заменяем в файле pulse1.yml
libfortran=3.0.1
наlibfortran=3.0.0=1
- Ещё раз выполняем:
conda env create -f pulse1.yml
- Если пошла инсталляция, отлично!
- Если требуются другие пакеты, обязательно обращаем внимание на каналы, по необходимости добавляем.
- Ждём, когда установится
- После чего активируем:
conda activate pulse
Проверяем работоспособность Pytorch и CUDA в python
- Этот скрипт:
from __future__ import print_function import torch x = torch.rand(5, 3) print(x)
Должен вывести что-то подобное:
tensor([[0.3380, 0.3845, 0.3217], [0.8337, 0.9050, 0.2650], [0.2979, 0.7141, 0.9069], [0.1449, 0.1132, 0.1375], [0.4675, 0.3947, 0.1426]])
- А этот:
import torch torch.cuda.is_available()
Выведет:
True
На этом этапе, по идее, можно остановиться. Но я пошёл дальше и для экспериментов установил jupyter notebook.
Jupyter Notebook – невероятно мощный инструмент для интерактивной разработки и представления проектов в области наук о данных.
Работа с PULSE
Приступим
- Активируем окружение pulse:
conda activate pulse
- Устанавливаем юпитер:
pip install jupyter
- Запускаем:
И далее:jupyter notebook
- Создаём новую тетрадь New->Python3 (notebook)
- Вставляем туда код из файла
- Кидаем в корень проекта исходный файл, переименовав его в source.png:
cp /mnt/c/Users/ПОЛЬЗОВАТЕЛЬ/Desktop/face1.png source.png
- Запускаем. Ждём
Заметки
- Очень вероятно, потребуется изменение числа шагов до 500-800, а также изменение eps
- Изображение должно быть:
- Квадратным, говорят, лучше 1024*1024
- В формате PNG
- С тремя каналами (RGB) а не с четырьмя RGBA
- Если выдает ошибку: "
Could not find a face that downscales correctly within epsilon
", учитываем следующее:
Необходимо изменить steps и\или eps, таким образом, чтобы по достижению числа шагов (steps), значение eps было не менее L2. Ниже пояснение.
Результат сопровождается выводом достигнутых параметров:
BEST (400) | L2: 0.0013 GEOGROSS: | TOTAL: | time: ...
Где 400 — это (заданное) достигнутое число шагов (steps), L2 — интересуемая величина, она должна быть меньше, чем заданная eps (как я понял, это — точность оптимизации; товарищи AI-разработчики, подскажите, что это?).
Так вот, к примеру, необходимо увеличить что-то одно или всё вместе: steps (поставить больше 400) и\или eps (поставить eps=0,0013 и больше, т.е. должно быть так, что eps>=L2).
- Если есть желание посмотреть промежуточные фотографии для каждого шага, добавляем параметр
-save_intermediate
Изображения сохраняются в папкуruns/
: в папкеHR
— high resolution, в папкеLR
— low resolution )
Возможные проблемы — ниже.
Решение проблем
Если вы не только столкнулись с ошибками, но и решили их, пишите, добавлю сюда.
Белый экран в Windows Insider Program
Вариант: вы под другим пользователем, не хватает привилегий.
Решение: см. ссылку. Но у меня решилось без изменений реестра.
Не запускаются CUDA samples
Варианты:
- Ваша видеокарта не поддерживается
- Вы не накатили последнюю версию WSL2
- Вы не установили последнюю (экспериментальную) версию драйверов NVidia Driver CUDA WSL
При запуске jupyter notebook
выкидывает ошибку
Ошибка:
Start : This command cannot be run due to the error: The system cannot find the file specified.
Решение: копируем строку подключения в браузер (с другими решениями не разбирался).
При запуске PULSE постоянно вываливается ошибка
Ошибка:
Google Quota Exceeded
Решение: копируем исходный файл у меня и кидаем в корень — в папку cache (создаём, если её нет).
Либо:
- Скачиваем файл по первой google ссылке из PULSE.py
- Переименовываем его по шаблону md5hash_synthesis.pt, где md5hash — md5 хэш скаченного файла (в нынешней версии это
6b943ee69b8491ac40e8e9ced6175659_synthesis.pt
) - Кидаем в папку cache (создаём, если её нет в корне директории, где лежит PULSE)
При запуске PULSE, либо проверке Pytorch выкидывает ошибку
Ошибка:
ModuleNotFoundError: No module named 'torch'
Решение: если вы проверяли pytorch и он работает, то это означает, что вы не активировали окружение pulse. Для этого выполните следующую команду:
conda activate pulse
Заключение
Следующим этапом хотелось бы изучить StyleGAN и, базирующиеся на ней, другие «нейросети».
Был бы рад почитать ваши отзывы по статье, рекомендации (в т.ч. по изложению, т.к. это первая моя публичная статья), поправки.
Всем спасибо за чтение!
Список литературы и ссылки на утилиты, драйвера
- Инструкция по установке NVidia Driver для CUDA на WSL
- Драйвера NVidia для CUDA под WSL
- Список поддерживаемых CUDA видеокарт
- Примеры CUDA
- Инструкция по установке WSL2 на Windows 10
- Справка и знакомство с Windows Insider Program — ранний доступ к версиям Windows
- Инструкция по установке Anaconda на Linux систему
- Список дистрибутивов Anaconda
- Jupyter Notbook — аналитика и эксперименты
- Репозиторий PULSE
- Репозиторий Face-Depixelizer
- Репозиторий StyleGAN
Alexufo
Нужно только понимать, что подходим к стороне легитимности фотографии как документа. Можно легко нарваться на подобное. Мне кажется, что нужно каким то образом зафиксировать разрешение изображение, которое можно улучшать нейронками юридически, например, минимум 30px на ширину глаза реальной информации (каждый пиксель содержит уникальную информацию) можно улучшать, так как не нарвешься на недостоверность, а если у тебя 5 пикселей на глаз — так и рассу можно попутать.
А на фото из примера — мне больше кажется, что это какой нибудь Данила, студент первого курса кулинарного техникума. С расположением глаз машина точно ошиблась.
Установку WSL2 можно было бы опустить, статья то про другое.
Сколько уходит времени на генерацию и на какой машине?
anonymous Автор
PULSE всё ещё не точно подбирает черты лица.
Но, в общем говоря, проблема достаточно волнующая.
Пока изучал нейросеть, наткнулся на пару интересных проблем:
1) FD: issue активистки — она, как раз, задавалась вопросом о этичности технологии.
2) PULSE: Хоп! И PULSE обвиняют в расизме!
По поводу генерации: 12 минут на 800 шагов — i9 9900 GeForce 2080 Super.