MMEditing: различия между версиями

Материал из wolfram
Перейти к навигации Перейти к поиску
мНет описания правки
Строка 3: Строка 3:
<br />
<br />


===Втупление===
===Втупление)===
А если своими словами то нейросеть для масштабирования изображений. Это первая сеть которую я поднял у себя на железе. И это первый опыт работы с подобными вещами.
А если своими словами то нейросеть для масштабирования изображений. Это первая сеть которую я поднял у себя на железе. И это первый опыт работы с подобными вещами.


Как то в интернете развелось куча подобных вещей, люди постоянно выкатывают всяческие "мемы и нарезки старых видео" в высоком разрешении. Меня это очень сильно задевает, всегда мечтал о подобных софтинах, очень часто нужно увеличить изображения.  
Как то в интернете развелось куча подобных вещей, люди постоянно выкатывают всяческие "мемы и нарезки старых видео" в высоком разрешении. Меня - это очень сильно задевает, всегда мечтал о подобных "софтинах", очень часто нужно увеличить изображения.  


Но когда задался вопросом как и с помощью чего, получил ответ: никак, иди учи python, linux, все сложно... И так далее... странно, что не один блогер, выкладывающий такие видео, даже не скажет с помощью каких программ это делается.
Но когда задался вопросом как и с помощью чего, получил ответ: никак, иди учи python, linux, все сложно... И так далее... странно, что не один блогер, выкладывающий такие видео, даже не скажет с помощью каких программ это делается.


В одном из таких роликов, был комментарий, возможно от автора с перечислением названий инструментов: DIAN, Topaz AI, ESRGAN, Waifu2x, DeOldify, Anime 4K.
В одном из таких роликов, был комментарий, возможно от автора, с перечислением названий инструментов: DIAN, Topaz AI, ESRGAN, Waifu2x, DeOldify, Anime 4K.


От этой информации и начнем танцевать.
От этой информации и начнем танцевать.


DIAN - как оказалось AI для повышения частоты кадров, нужная штука, но не в этот раз. Обязательно подниму.
'''DIAN''' - как оказалось AI для повышения частоты кадров, нужная штука, но не в этот раз. Обязательно подниму.


Topaz AI - коммерческий пакет софта, огромный плюс в дружелюбии. Есть под Windows, ставиться как обычная программа, выбираешь изображение получаешь результат. Но есть куча минусов, невозможно применять для массива изображений. То есть видео обработать, практически нереально. Полностью закрыта.
'''Topaz AI''' - коммерческий пакет софта, огромный плюс в дружелюбии. Есть под Windows, ставиться как обычная программа, выбираешь изображение получаешь результат. Но есть куча минусов, невозможно применять для массива изображений. То есть видео обработать, практически нереально. Полностью закрыта.


ESRGAN - на эту штуку сразу положил глаз, очень уж красивые у них результаты.
'''ESRGAN''' - на эту штуку сразу положил глаз, очень уж красивые у них результаты.


Waifu2x - есть под windows, очень кривая и сырая софтина. К сожалению с изображениями она себя показала очень плохо. Практически нет профита от масштабирования. Но вот с графикой работает  на высоком уровне. Отлично подойдет для комиксов.
'''Waifu2x''' - есть под windows, очень кривая и сырая софтина. К сожалению с изображениями она себя показала очень плохо. Практически нет профита от масштабирования. Но вот с графикой работает  на высоком уровне. Отлично подойдет для комиксов.


Anime 4K - это тоже самое что и Waifu2x как раз направлено на аниме. Тоже хорошая AI но пока не совпадает, с поставленной задачей.
'''Anime 4K''' - это тоже самое что и Waifu2x как раз направлено на аниме. Тоже хорошая AI но пока не совпадает, с поставленной задачей.


DeOldify - эта AI для колонизации, считается топовой, но опять же у меня нет задачи восстановления цвета.
'''DeOldify''' - эта AI для колонизации, считается топовой, но опять же у меня нет задачи восстановления цвета.




Хорошо вот и начнем с ESRGAN. Года я зашел на github.com, понял, что я вообще не понимаю, что делать. Совершенно информативно, инструкций просто нет. Точнее они есть... но... считай их нет.
Хорошо вот и начнем с '''ESRGAN'''. Года я зашел на '''github.com''', понял, что я вообще не понимаю, что делать. Совершенно не информативно, инструкций просто нет. Точнее они есть... но... считай их нет.


ОС - Все подобные системы полностью развертываются на linux, ни какой речи о интерфейсах, собирай сам, запускай сам, конфигурируюй текстом. Русский? Не не слышал...
'''ОС''' - все подобные системы полностью развертываются на linux, ни какой речи о интерфейсах, собирай сам, запускай сам, конфигурируюй текстом. Русский? Не не слышал...


Но все же в 2020 мы живем. И знал я что есть в Windows некий linux, именуется WSL. что он якобы работает нативно, как на железе. Дай опробую. И каково было моё удивление, оказывается нас обманули, linux то ограниченный. И не о каких аппаратных фишках и не слышно.  
Но все же в 2020 мы живем. И знал я, что есть в Windows некий linux, именуется '''WSL'''. что он якобы работает нативно, как на железе. Дай опробую. И каково было моё удивление, оказывается нас обманули, linux то ограниченный. И не о каких аппаратных фишках и не слышно.  


Что за аппаратные фишки? Ну это же AI - "искусственный интеллект", нейросеть. И исполняется это все на тензорных вычислительных блоках. Такие как раз есть в видеокартах, а 20 серии так вообще, всем проели мозги. В общем CUDA. Конечно же можно выполнять все и на CPU. Точнее не всегда, не все AI лежащие на github могут на CPU.  
Что за аппаратные фишки? Ну это же '''AI''' - "искусственный интеллект", нейросеть. И исполняется это все на тензорных вычислительных блоках. Такие, как раз есть в видеокартах, а 20 серии так вообще, всем проели мозги. В общем '''CUDA'''. Конечно же можно выполнять все и на '''CPU'''. Точнее '''не всегда''', не все AI лежащие на '''github''' могут на '''CPU'''.  


Начал искать что то готовое. Оказывается есть такая штука как docker, это что то вроде виртуальной машины но, прямо из ресурсов материнской системы. Изолирована среда, которая потребляет ресурсы только для выполнения своей внутренней задачи.
Начал искать что то готовое. Оказывается есть такая штука как '''docker''', это что то вроде виртуальной машины, но прямо из ресурсов материнской системы. Изолирована среда, которая потребляет ресурсы только для выполнения своей внутренней задачи.


'''Docker''' — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации.
'''Docker''' — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации.


Как оказалось с выходом Windows 2004 обновился и WSL до версии 2, это дало поддержку Docker в Windows. С начало наткнулся на программу интегрирующуюся в Windows, находится в магазине windows. Интересно то что все команды с Docker выполняются нативно в командной строке Windows Powershell. Поставил докер.
Как оказалось с выходом Windows 2004 обновился и '''WSL до''' версии '''2''', это дало поддержку '''Docker в Windows'''. С начало наткнулся на программу интегрирующуюся в Windows, находится в магазине windows. Интересно то что все команды с Docker выполняются нативно в командной строке '''Windows Powershell'''. Поставил докер.


Первой AI по масштабированию изображений мне попалась [https://github.com/alexjc/neural-enhance alexjc/neural-enhance] - она есть в образе для Docker, но её уже 4 года. Очень многое изменилось, в обще работать она не захотела. Заработала только в режиме CPU. Один кадр обрабатывался приемно 40 - 50 секунд. В целом работать можно, но не о каком видео с такой производительностью и речи быть не может.  
Первой AI по масштабированию изображений мне попалась [https://github.com/alexjc/neural-enhance '''alexjc/neural-enhance'''] - она есть в образе для '''Docker''', но ей уже 4 года. Очень многое изменилось, в обще работать она не захотела. Заработала только в режиме CPU. Один кадр обрабатывался приемно 40 - 50 секунд. В целом работать можно, но не о каком видео с такой производительностью и речи быть не может.  


О том как установить alexjc/neural-enhance, я расскажу здесь.
О том как установить '''alexjc/neural-enhance''', я расскажу '''здесь'''.


Следующей AI мне попалась [https://github.com/IBM/MAX-Image-Resolution-Enhancer MAX-Image-Resolution-Enhancer], первая AI которая у меня заработала в Docker  и дала результаты. Но она также заработала в режиме CPU. Но скорость обработки даже на CPU была неплохой 3 - 4 секунды кадр 576p.
Следующей AI мне попалась [https://github.com/IBM/MAX-Image-Resolution-Enhancer '''MAX-Image-Resolution-Enhancer'''], первая AI которая у меня заработала в Docker  и дала результаты. Но она также заработала в режиме CPU. Но скорость обработки даже на CPU была неплохой 3 - 4 секунды кадр 576p.


От том как установить и работать с MAX-Image-Resolution-Enhancer я расскажу здесь
От том как установить и работать с '''MAX-Image-Resolution-Enhancer''' я расскажу здесь




В тоге, я задался вопросом а как же все таки быть с CUDA, и вычислениями силой видеокарты. Изучение интернета привело меня на сайт NVIDIA как ни странно. [https://docs.nvidia.com/cuda/wsl-user-guide/index.html#abstract Страницу рассказывающую как заставить работать CUDA и вообще аппаратное ускорение в WSL]. Я начал не особо вчитываясь выполнять все что там описано, но четно. Оказалось в мануале написано, что работать такая тема будет только на версии Windows 20145, на тот момент версия Windows была 19ххх. Обновился на последний билд по инснайдерской программе. Так же нужен был драйвер Nvidia 455.41 и выше. Сделал. И снова облом. Следование инструкциям мануала nvidida не приводило ни к чему, что могло бы показать что аппаратные блоки задействованы. Прошло время и на Windows прилетело обновление. Животворящее обновление! После которого следовании инструкциям NVIDIA наконец дало результаты. Наконец то удалось, сделать все. В конечном счете я понял, что Docker из магазина windows бесполезен, и лучше его нативно устанавливать в ОС WSL. Так и сделал, в таком докере заработали и образы требующие CUDA. Точнее тестовые образы с сайта NVIDIA, но не вышеперечисленные. Они все также работали на CPU, так как были собраны давно, и не о каких последних драйверах NVIDIA, не слышали.  
В итоге, я задался вопросом а как же все таки быть с CUDA, и вычислениями силой видеокарты. Изучение интернета привело меня на сайт '''NVIDIA,''' как ни странно. [https://docs.nvidia.com/cuda/wsl-user-guide/index.html#abstract Страницу рассказывающую как заставить работать CUDA и вообще аппаратное ускорение в WSL]. Я начал не особо вчитываясь выполнять все что там описано, '''но четно'''. Оказалось в мануале написано, что работать такая тема будет только на версии '''Windows 20145''', на тот момент версия Windows была 19ххх. Обновился на последний билд по инснайдерской программе. Так же нужен был '''драйвер Nvidia''' '''455.41''' и выше. Сделал. И снова облом. Следование инструкциям мануала nvidia не приводило ни к чему, что могло бы показать что аппаратные блоки задействованы. Прошло время и на Windows прилетело обновление. '''Животворящее обновление!''' После которого следовании инструкциям '''NVIDIA''' наконец дало результаты. Наконец то удалось сделать все. В конечном счете я понял, что '''Docker из магазина''' windows бесполезен, и лучше его нативно устанавливать в '''ОС WSL'''. Так и сделал, в таком докере заработали и образы требующие CUDA. Точнее тестовые образы с сайта '''NVIDIA''', но не вышеперечисленные. Они все также работали на CPU, так как были собраны давно, и не о каких последних драйверах NVIDIA, не слышали.  


Хорошо. Вступление, пора заканчивать.
Хорошо. Вступление, пора заканчивать.


===Подготовка ОС===
===Подготовка ОС===
Последний билд 20145 или выше, обновления Windows 2004 на момент 20.05.20 (это dev билд, можно получить по инсайдерской программе)
Последний '''билд 20145''' или выше, обновления '''Windows 2004''' на момент 20.05.20 (это dev билд, можно получить по инсайдерской программе)


NVIDIA драйвер 455.41 и выше.
'''NVIDIA драйвер 455.41''' и выше.


Далее следуем инструкции [https://docs.nvidia.com/cuda/wsl-user-guide/index.html#abstract CUDA on WSL User Guide], ну да, конечно же я все продублирую и поясню своими словами, чтобы понять самому и может быть когда нибудь...
Далее следуем инструкции [https://docs.nvidia.com/cuda/wsl-user-guide/index.html#abstract '''CUDA on WSL User Guide'''], ну да, конечно же я все продублирую и поясню своими словами, чтобы понять самому и может быть когда нибудь...


Из мануала:
'''Из мануала:'''


Подсистема Windows для Linux (WSL) - это функция Windows 10, которая позволяет пользователям запускать встроенные средства командной строки Linux непосредственно в Windows. WSL - это контейнерная среда, в которой пользователи могут запускать собственные приложения Linux из командной строки оболочки Windows 10, не требуя сложности среды двойной загрузки. Внутренне WSL тесно интегрирован с операционной системой Microsoft Windows, что позволяет ему запускать приложения Linux наряду с традиционными приложениями Windows для настольных компьютеров и современными магазинами.
''Подсистема Windows для Linux (WSL) - это функция Windows 10, которая позволяет пользователям запускать встроенные средства командной строки Linux непосредственно в Windows. WSL - это контейнерная среда, в которой пользователи могут запускать собственные приложения Linux из командной строки оболочки Windows 10, не требуя сложности среды двойной загрузки. Внутренне WSL тесно интегрирован с операционной системой Microsoft Windows, что позволяет ему запускать приложения Linux наряду с традиционными приложениями Windows для настольных компьютеров и современными магазинами.''


Используя технологии паравиртуализации WSL 2 и GPU, Microsoft позволяет разработчикам запускать приложения с ускорением на GPU в Windows.
''Используя технологии паравиртуализации WSL 2 и GPU, Microsoft позволяет разработчикам запускать приложения с ускорением на GPU в Windows.''


В следующем документе описывается рабочий процесс для начала работы с приложениями или контейнерами CUDA в среде WSL 2.
''В следующем документе описывается рабочий процесс для начала работы с приложениями или контейнерами CUDA в среде WSL 2.''


====Установка WSL 2====
====Установка WSL 2====
Строка 80: Строка 80:
Устанавливаем как обычную программу.
Устанавливаем как обычную программу.


Запустите PowerShell с правами администратора и выполните следующую команду. Включаем компонент "Virtual Machine Platform" (Платформа виртуальных машин).
Запустите '''PowerShell''' с правами администратора и выполните следующую команду. Включаем компонент "Virtual Machine Platform" (Платформа виртуальных машин).
  dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
  dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Перезапустите компьютер, чтобы завершить установку и обновление WSL до WSL 2.
'''Перезапустите компьютер''', чтобы завершить установку и обновление '''WSL до WSL 2'''.


Выполните следующую команду в PowerShell, чтобы задать WSL 2 в качестве версии по умолчанию при установке нового дистрибутива Linux:
Выполните следующую команду в '''PowerShell''', чтобы задать '''WSL 2''' в качестве версии по умолчанию при установке нового дистрибутива Linux:
  wsl --set-default-version 2
  wsl --set-default-version 2
Убедитесь, что у вас установлено последнее ядро:
Убедитесь, что у вас установлено последнее ядро:
  wsl cat /proc/version
  wsl cat /proc/version
Должно показать не ниже 4.19.121, если ниже то ключам обновление "для других продуктов Макрососфт" в настройка обновлений. Проверяем обновления, если есть дожидаемся окончания установки.
Должно показать '''не ниже 4.19.121''', если ниже то включаем обновление "'''для других продуктов Макрососфт'''" в настройках обновлений. Проверяем обновления, если есть дожидаемся окончания установки.


Теперь загружаем контейнерную ОС из магазина Windows. Просто пишем в нём: Ubuntu. Я выбрал 18.04. Загружаем.
Теперь загружаем контейнерную ОС из магазина Windows. Просто пишем в нём: Ubuntu. Я выбрал 18.04. Загружаем.


Ссылка на запуск появляется в меню '''Пуск''', первый запуск запросит имя пользователя и пароль. У меня это vova:01082008.
Ссылка на запуск появляется в меню '''Пуск''', первый запуск запросит '''имя пользователя и пароль'''. У меня это vova:01082008.


Проверим что она работает как нужно и узнаем версию:
Проверим что она работает как нужно и узнаем версию:
Строка 98: Строка 98:
ответ должен быть подобным этому:
ответ должен быть подобным этому:
  4.19.121-microsoft-standard
  4.19.121-microsoft-standard
Готово WSL2 установлен. И теперь все контейнеры будут выполняться по умолчанию в новой версии.
Готово '''WSL2 установлен'''. И теперь все контейнеры будут выполняться по умолчанию в новой версии.<br />
<br />


====Настройка CUDA Toolkit====
====Настройка CUDA Toolkit====
Сначала настройте сетевой репозиторий CUDA.
Сначала настройте сетевой репозиторий '''CUDA'''.
  sudo apt-key adv --fetch-keys <nowiki>http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub</nowiki>
  sudo apt-key adv --fetch-keys <nowiki>http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/7fa2af80.pub</nowiki>
  sudo sh -c 'echo "deb <nowiki>http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64</nowiki> /" > /etc/apt/sources.list.d/cuda.list'
  sudo sh -c 'echo "deb <nowiki>http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64</nowiki> /" > /etc/apt/sources.list.d/cuda.list'
  sudo apt-get update
  sudo apt-get update
  sudo apt-get upgrade
  sudo apt-get upgrade
Теперь установите CUDA. Устанавливаем именно 11.0, только данная версия работает с WSL2
Теперь установите CUDA. Устанавливаем именно '''11.0''', только данная версия работает с WSL2
  sudo apt-get install -y cuda-toolkit-11-0
  sudo apt-get install -y cuda-toolkit-11-0


Строка 113: Строка 112:
Просто запустите ваше приложение CUDA, как если бы вы запускали его под Linux! После установки драйвера больше не нужно ничего делать для запуска существующих приложений CUDA, созданных на Linux.
Просто запустите ваше приложение CUDA, как если бы вы запускали его под Linux! После установки драйвера больше не нужно ничего делать для запуска существующих приложений CUDA, созданных на Linux.


Ниже приведен фрагмент запуска приложения BlackScholes.
Ниже приведен фрагмент запуска приложения '''BlackScholes'''.
  cd /usr/local/cuda/samples/4_Finance/BlackScholes
  cd /usr/local/cuda/samples/4_Finance/BlackScholes
Казалось бы что могло пойти не так, но я не мог выполнить следующую команду. Как оказалось нужно было выполнить '''make!''' Вот тут как бы весь линукс! От куда мне было знать о том что нужно собирать этот BlackScholes? Да неоткуда. Просто видимо приснится должно было...
''Казалось бы что могло пойти не так, но я не мог выполнить следующую команду. Как оказалось нужно было выполнить '''make!''' Вот тут как бы весь линукс! От куда мне было знать о том что нужно собирать этот '''BlackScholes'''? Да неоткуда. Просто видимо приснится должно было...''
  '''sudo make'''
  '''sudo make'''
После чего уже можно запустить тест:
После чего уже можно запустить тест:
Строка 134: Строка 133:
   
   
  ...
  ...
С установкой NVIDIA закончили. Пора приступать к AI.
С установкой NVIDIA закончили. Пора приступать к AI.<br />
<br />


'''Anaconda''' — диспетчер пакетов с открытым исходным кодом, диспетчер среды и средство дистрибуции языков программирования Python и R. Решение Anaconda предназначено для рабочих процессов аналитики данных и машинного обучения.
'''Anaconda''' — диспетчер пакетов с открытым исходным кодом, диспетчер среды и средство дистрибуции языков программирования Python и R. Решение Anaconda предназначено для рабочих процессов аналитики данных и машинного обучения.


Берем ссылку на нужную нам версию на сайте [https://www.anaconda.com/products/individual anaconda.com]. Я использовал версию для '''Python 2.7.''' На всякий случай [https://nc.mywolfram.ru/s/JwgHM5HMgtECtRP ссылка] на облако.
Берем ссылку на нужную нам версию на сайте [https://www.anaconda.com/products/individual anaconda.com]. Я использовал версию для '''Python 3.7.''' На всякий случай [https://nc.mywolfram.ru/s/JwgHM5HMgtECtRP ссылка] на облако.


Если взята ссылка с сайта то:
Если взята ссылка с сайта то:
  cd /tmp
  cd /tmp
  wget <nowiki>https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh</nowiki>
  wget <nowiki>https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh</nowiki>
Загрузился скрипт установки .sh в папку '''/tmp'''. Если файл скачан самостоятельно, то его нужно переместить в '''/tmp'''.
Загрузился скрипт установки '''.sh''' в папку '''/tmp'''. Если файл скачан самостоятельно, то его нужно переместить в '''/tmp'''.


Выполняем скрипт установки:
Выполняем скрипт установки:
Строка 159: Строка 157:


====MMEditing====
====MMEditing====
Это комплекс из множества сетей. Я использую кусочек нужный мне.
Следую установке из скрипта. [https://mmediting.readthedocs.io/en/latest/install.html Источник].
  conda create -n open-mmlab python=3.7 -y
  conda create -n open-mmlab python=3.7 -y
  conda activate open-mmlab
  conda activate open-mmlab
Строка 166: Строка 167:
  git clone <nowiki>https://github.com/open-mmlab/mmediting.git</nowiki>
  git clone <nowiki>https://github.com/open-mmlab/mmediting.git</nowiki>
  cd /tmp/mmediting/
  cd /tmp/mmediting/
Теперь нам нужно скачать обученную нейросеть и конфиг к ней. Скачиваем [https://github.com/open-mmlab/mmediting/tree/master/configs/restorers/esrgan от сюда].  
Теперь нам нужно скачать обученную нейросеть и конфиг к ней. Скачиваем [https://github.com/open-mmlab/mmediting/tree/master/configs/restorers/esrgan от сюда]. Копия на всякий случай [https://nc.mywolfram.ru/s/WSq3PpAegsgtDxQ в облаке].  


создаем патолог '''work_dirs''' внутри папки '''mmediting''' и переходим в неё:
создаем патолог '''work_dirs''' внутри папки '''mmediting''' и переходим в неё:
Строка 185: Строка 186:
  pip install -r requirements.txt
  pip install -r requirements.txt
  pip install -v -e .
  pip install -v -e .
Готово MMEditing установлен.
Готово '''MMEditing''' установлен.


Теперь для запуска нужно :
Теперь для запуска нужно:


Задача состояла в том что требуется выполнять массив изображений
Задача состояла в том что требуется выполнять массив изображений, это работает и для одного изображения.


Команда выглядит так:
Команда выглядит так:
  PHOTO=($(ls папка с картинками))
  PHOTO=($(ls папка с картинками)) - #Команда сканирует указную директорию и создает на основе параметр
   
   
  for tgt in "${PHOTO[@]}"; do python3
  for tgt in "${PHOTO[@]}"; do python3
Строка 199: Строка 200:
  /tmp/mmediting/work_dirs/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth
  /tmp/mmediting/work_dirs/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth
  /папка откуда берем картинки/$tgt
  /папка откуда берем картинки/$tgt
  /папка выхода/E_$tgt;
  /папка выхода/E_$tgt; - # "E_" - это то что будет дописано к выходному файлу
  done
  done
Выглядит это так:
Выглядит это так в командной строке.
  for tgt in "${PHOTO[@]}"; do python3 /tmp/mmediting/demo/restoration_demo.py /tmp/mmediting/configs/restorers/esrgan/esrgan_x4c64b23g32_g1_400k_div2k.py /tmp/mmediting/work_dirs/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth /mnt/e/test/005/$tgt /mnt/e/test/004/E_$tgt; done
  for tgt in "${PHOTO[@]}"; do python3 /tmp/mmediting/demo/restoration_demo.py /tmp/mmediting/configs/restorers/esrgan/esrgan_x4c64b23g32_g1_400k_div2k.py /tmp/mmediting/work_dirs/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth /mnt/e/test/005/$tgt /mnt/e/test/004/E_$tgt; done
В целом это все. Сеть работает и обрабатывает.

Версия от 14:44, 20 июля 2020

MMEditing - это набор инструментов для редактирования изображений и видео с открытым исходным кодом, основанный на PyTorch. Это часть проекта OpenMMLab.


Втупление)

А если своими словами то нейросеть для масштабирования изображений. Это первая сеть которую я поднял у себя на железе. И это первый опыт работы с подобными вещами.

Как то в интернете развелось куча подобных вещей, люди постоянно выкатывают всяческие "мемы и нарезки старых видео" в высоком разрешении. Меня - это очень сильно задевает, всегда мечтал о подобных "софтинах", очень часто нужно увеличить изображения.

Но когда задался вопросом как и с помощью чего, получил ответ: никак, иди учи python, linux, все сложно... И так далее... странно, что не один блогер, выкладывающий такие видео, даже не скажет с помощью каких программ это делается.

В одном из таких роликов, был комментарий, возможно от автора, с перечислением названий инструментов: DIAN, Topaz AI, ESRGAN, Waifu2x, DeOldify, Anime 4K.

От этой информации и начнем танцевать.

DIAN - как оказалось AI для повышения частоты кадров, нужная штука, но не в этот раз. Обязательно подниму.

Topaz AI - коммерческий пакет софта, огромный плюс в дружелюбии. Есть под Windows, ставиться как обычная программа, выбираешь изображение получаешь результат. Но есть куча минусов, невозможно применять для массива изображений. То есть видео обработать, практически нереально. Полностью закрыта.

ESRGAN - на эту штуку сразу положил глаз, очень уж красивые у них результаты.

Waifu2x - есть под windows, очень кривая и сырая софтина. К сожалению с изображениями она себя показала очень плохо. Практически нет профита от масштабирования. Но вот с графикой работает на высоком уровне. Отлично подойдет для комиксов.

Anime 4K - это тоже самое что и Waifu2x как раз направлено на аниме. Тоже хорошая AI но пока не совпадает, с поставленной задачей.

DeOldify - эта AI для колонизации, считается топовой, но опять же у меня нет задачи восстановления цвета.


Хорошо вот и начнем с ESRGAN. Года я зашел на github.com, понял, что я вообще не понимаю, что делать. Совершенно не информативно, инструкций просто нет. Точнее они есть... но... считай их нет.

ОС - все подобные системы полностью развертываются на linux, ни какой речи о интерфейсах, собирай сам, запускай сам, конфигурируюй текстом. Русский? Не не слышал...

Но все же в 2020 мы живем. И знал я, что есть в Windows некий linux, именуется WSL. что он якобы работает нативно, как на железе. Дай опробую. И каково было моё удивление, оказывается нас обманули, linux то ограниченный. И не о каких аппаратных фишках и не слышно.

Что за аппаратные фишки? Ну это же AI - "искусственный интеллект", нейросеть. И исполняется это все на тензорных вычислительных блоках. Такие, как раз есть в видеокартах, а 20 серии так вообще, всем проели мозги. В общем CUDA. Конечно же можно выполнять все и на CPU. Точнее не всегда, не все AI лежащие на github могут на CPU.

Начал искать что то готовое. Оказывается есть такая штука как docker, это что то вроде виртуальной машины, но прямо из ресурсов материнской системы. Изолирована среда, которая потребляет ресурсы только для выполнения своей внутренней задачи.

Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в средах с поддержкой контейнеризации.

Как оказалось с выходом Windows 2004 обновился и WSL до версии 2, это дало поддержку Docker в Windows. С начало наткнулся на программу интегрирующуюся в Windows, находится в магазине windows. Интересно то что все команды с Docker выполняются нативно в командной строке Windows Powershell. Поставил докер.

Первой AI по масштабированию изображений мне попалась alexjc/neural-enhance - она есть в образе для Docker, но ей уже 4 года. Очень многое изменилось, в обще работать она не захотела. Заработала только в режиме CPU. Один кадр обрабатывался приемно 40 - 50 секунд. В целом работать можно, но не о каком видео с такой производительностью и речи быть не может.

О том как установить alexjc/neural-enhance, я расскажу здесь.

Следующей AI мне попалась MAX-Image-Resolution-Enhancer, первая AI которая у меня заработала в Docker и дала результаты. Но она также заработала в режиме CPU. Но скорость обработки даже на CPU была неплохой 3 - 4 секунды кадр 576p.

От том как установить и работать с MAX-Image-Resolution-Enhancer я расскажу здесь


В итоге, я задался вопросом а как же все таки быть с CUDA, и вычислениями силой видеокарты. Изучение интернета привело меня на сайт NVIDIA, как ни странно. Страницу рассказывающую как заставить работать CUDA и вообще аппаратное ускорение в WSL. Я начал не особо вчитываясь выполнять все что там описано, но четно. Оказалось в мануале написано, что работать такая тема будет только на версии Windows 20145, на тот момент версия Windows была 19ххх. Обновился на последний билд по инснайдерской программе. Так же нужен был драйвер Nvidia 455.41 и выше. Сделал. И снова облом. Следование инструкциям мануала nvidia не приводило ни к чему, что могло бы показать что аппаратные блоки задействованы. Прошло время и на Windows прилетело обновление. Животворящее обновление! После которого следовании инструкциям NVIDIA наконец дало результаты. Наконец то удалось сделать все. В конечном счете я понял, что Docker из магазина windows бесполезен, и лучше его нативно устанавливать в ОС WSL. Так и сделал, в таком докере заработали и образы требующие CUDA. Точнее тестовые образы с сайта NVIDIA, но не вышеперечисленные. Они все также работали на CPU, так как были собраны давно, и не о каких последних драйверах NVIDIA, не слышали.

Хорошо. Вступление, пора заканчивать.

Подготовка ОС

Последний билд 20145 или выше, обновления Windows 2004 на момент 20.05.20 (это dev билд, можно получить по инсайдерской программе)

NVIDIA драйвер 455.41 и выше.

Далее следуем инструкции CUDA on WSL User Guide, ну да, конечно же я все продублирую и поясню своими словами, чтобы понять самому и может быть когда нибудь...

Из мануала:

Подсистема Windows для Linux (WSL) - это функция Windows 10, которая позволяет пользователям запускать встроенные средства командной строки Linux непосредственно в Windows. WSL - это контейнерная среда, в которой пользователи могут запускать собственные приложения Linux из командной строки оболочки Windows 10, не требуя сложности среды двойной загрузки. Внутренне WSL тесно интегрирован с операционной системой Microsoft Windows, что позволяет ему запускать приложения Linux наряду с традиционными приложениями Windows для настольных компьютеров и современными магазинами.

Используя технологии паравиртуализации WSL 2 и GPU, Microsoft позволяет разработчикам запускать приложения с ускорением на GPU в Windows.

В следующем документе описывается рабочий процесс для начала работы с приложениями или контейнерами CUDA в среде WSL 2.

Установка WSL 2

В этом разделе содержатся подробные сведения об установке WSL 2, включая настройку дистрибутива Linux на ваш выбор в Магазине Microsoft .

Запустите PowerShell с правами администратора и выполните следующую команду.

dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

Скачивание пакета обновления ядра Linux, как ни странно на данный момент нет нормального места где взять установщик. Прямая ссылка на него есть на данной странице.

Так же ссылка на этот файл с моего облака, на всякий случай.

Устанавливаем как обычную программу.

Запустите PowerShell с правами администратора и выполните следующую команду. Включаем компонент "Virtual Machine Platform" (Платформа виртуальных машин).

dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

Перезапустите компьютер, чтобы завершить установку и обновление WSL до WSL 2.

Выполните следующую команду в PowerShell, чтобы задать WSL 2 в качестве версии по умолчанию при установке нового дистрибутива Linux:

wsl --set-default-version 2

Убедитесь, что у вас установлено последнее ядро:

wsl cat /proc/version

Должно показать не ниже 4.19.121, если ниже то включаем обновление "для других продуктов Макрососфт" в настройках обновлений. Проверяем обновления, если есть дожидаемся окончания установки.

Теперь загружаем контейнерную ОС из магазина Windows. Просто пишем в нём: Ubuntu. Я выбрал 18.04. Загружаем.

Ссылка на запуск появляется в меню Пуск, первый запуск запросит имя пользователя и пароль. У меня это vova:01082008.

Проверим что она работает как нужно и узнаем версию:

uname -r

ответ должен быть подобным этому:

4.19.121-microsoft-standard

Готово WSL2 установлен. И теперь все контейнеры будут выполняться по умолчанию в новой версии.

Настройка 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-get update
sudo apt-get upgrade

Теперь установите CUDA. Устанавливаем именно 11.0, только данная версия работает с WSL2

sudo apt-get install -y cuda-toolkit-11-0

Запуск приложений CUDA (Тест)

Просто запустите ваше приложение CUDA, как если бы вы запускали его под Linux! После установки драйвера больше не нужно ничего делать для запуска существующих приложений CUDA, созданных на Linux.

Ниже приведен фрагмент запуска приложения BlackScholes.

cd /usr/local/cuda/samples/4_Finance/BlackScholes

Казалось бы что могло пойти не так, но я не мог выполнить следующую команду. Как оказалось нужно было выполнить make! Вот тут как бы весь линукс! От куда мне было знать о том что нужно собирать этот BlackScholes? Да неоткуда. Просто видимо приснится должно было...

sudo make

После чего уже можно запустить тест:

./BlackScholes

И должны увидеть:

Initializing data...
...allocating CPU memory for options.
...allocating GPU memory for options.
...generating input data in CPU mem.
...copying input data to GPU mem.
Data init done.

Executing Black-Scholes GPU kernel (131072 iterations)...
Options count             : 8000000
BlackScholesGPU() time    : 1.314299 msec
Effective memory bandwidth: 60.868973 GB/s
Gigaoptions per second    : 6.086897

...

С установкой NVIDIA закончили. Пора приступать к AI.

Anaconda — диспетчер пакетов с открытым исходным кодом, диспетчер среды и средство дистрибуции языков программирования Python и R. Решение Anaconda предназначено для рабочих процессов аналитики данных и машинного обучения.

Берем ссылку на нужную нам версию на сайте anaconda.com. Я использовал версию для Python 3.7. На всякий случай ссылка на облако.

Если взята ссылка с сайта то:

cd /tmp
wget https://repo.anaconda.com/archive/Anaconda3-2020.02-Linux-x86_64.sh

Загрузился скрипт установки .sh в папку /tmp. Если файл скачан самостоятельно, то его нужно переместить в /tmp.

Выполняем скрипт установки:

bash Anaconda3-2020.02-Linux-x86_64

При установке соглашаемся с и отвечаем yes.

Теперь вы можете активировать установку с помощью следующей команды:

source ~/.bashrc

Опирался на этот мануал.

Python 3

Проверим установлен ли python и версию.

python3 --version

MMEditing

Это комплекс из множества сетей. Я использую кусочек нужный мне.

Следую установке из скрипта. Источник.

conda create -n open-mmlab python=3.7 -y
conda activate open-mmlab
conda install -c pytorch pytorch torchvision -y
cd /tmp
git clone https://github.com/open-mmlab/mmediting.git
cd /tmp/mmediting/

Теперь нам нужно скачать обученную нейросеть и конфиг к ней. Скачиваем от сюда. Копия на всякий случай в облаке.

создаем патолог work_dirs внутри папки mmediting и переходим в неё:

mkdir /tmp/mmediting/work_dirs
cd /tmp/mmediting/work_dirs

Скачиваем туда нейросеть с помощью wget или вручную с облака и перемещаем самостоятельно.

wget https://openmmlab.oss-accelerate.aliyuncs.com/mmediting/restorers/esrgan/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth
wget https://openmmlab.oss-accelerate.aliyuncs.com/mmediting/restorers/esrgan/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth

Скачиваем в папку cd /tmp/mmediting/configs/restorers/esrgan/ конфиги. Там уже находятся можно их заменить, удалив и загрузив по новой.

cd /tmp/mmediting/configs/restorers/esrgan/
rm esrgan_psnr_x4c64b23g32_g1_1000k_div2k.py
rm esrgan_x4c64b23g32_g1_400k_div2k.py
cd /tmp/mmediting/configs/restorers/esrgan/
wget https://raw.githubusercontent.com/open-mmlab/mmediting/master/configs/restorers/esrgan/esrgan_psnr_x4c64b23g32_g1_1000k_div2k.py
wget https://raw.githubusercontent.com/open-mmlab/mmediting/master/configs/restorers/esrgan/esrgan_x4c64b23g32_g1_400k_div2k.py

устанавливаем по requirements.txt

pip install -r requirements.txt
pip install -v -e .

Готово MMEditing установлен.

Теперь для запуска нужно:

Задача состояла в том что требуется выполнять массив изображений, это работает и для одного изображения.

Команда выглядит так:

PHOTO=($(ls папка с картинками)) - #Команда сканирует указную директорию и создает на основе параметр

for tgt in "${PHOTO[@]}"; do python3
/tmp/mmediting/demo/restoration_demo.py
/tmp/mmediting/configs/restorers/esrgan/esrgan_x4c64b23g32_g1_400k_div2k.py
/tmp/mmediting/work_dirs/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth
/папка откуда берем картинки/$tgt
/папка выхода/E_$tgt; - # "E_" - это то что будет дописано к выходному файлу
done

Выглядит это так в командной строке.

for tgt in "${PHOTO[@]}"; do python3 /tmp/mmediting/demo/restoration_demo.py /tmp/mmediting/configs/restorers/esrgan/esrgan_x4c64b23g32_g1_400k_div2k.py /tmp/mmediting/work_dirs/esrgan_x4c64b23g32_1x16_400k_div2k_20200508-f8ccaf3b.pth /mnt/e/test/005/$tgt /mnt/e/test/004/E_$tgt; done

В целом это все. Сеть работает и обрабатывает.