MMEditing: различия между версиями
Владимир (обсуждение | вклад) |
Владимир (обсуждение | вклад) |
||
| (не показана 1 промежуточная версия этого же участника) | |||
| Строка 28: | Строка 28: | ||
Хорошо вот и начнем с '''ESRGAN'''. Года я зашел на '''github.com''', понял, что я вообще не понимаю, что делать. Совершенно не информативно, инструкций просто нет. Точнее они есть... но... считай их нет. | Хорошо вот и начнем с '''ESRGAN'''. Года я зашел на '''github.com''', понял, что я вообще не понимаю, что делать. Совершенно не информативно, инструкций просто нет. Точнее они есть... но... считай их нет. | ||
Начал искать что то готовое. Оказывается есть такая штука как '''docker''', это что то вроде виртуальной машины, но прямо из ресурсов материнской системы. Изолирована среда, которая потребляет ресурсы только для выполнения своей внутренней задачи. | Начал искать что то готовое. Оказывается есть такая штука как '''docker''', это что то вроде виртуальной машины, но прямо из ресурсов материнской системы. Изолирована среда, которая потребляет ресурсы только для выполнения своей внутренней задачи. | ||
| Строка 55: | Строка 49: | ||
===Подготовка ОС=== | ===Подготовка ОС=== | ||
Следуем инструкции установки на реальное '''железо linux''' или '''[[WSL2 и CUDA|WSL2]]'''.<br /> | |||
''' | |||
'''Anaconda''' — диспетчер пакетов с открытым исходным кодом, диспетчер среды и средство дистрибуции языков программирования Python и R. Решение Anaconda предназначено для рабочих процессов аналитики данных и машинного обучения. | '''Anaconda''' — диспетчер пакетов с открытым исходным кодом, диспетчер среды и средство дистрибуции языков программирования Python и R. Решение Anaconda предназначено для рабочих процессов аналитики данных и машинного обучения. | ||
| Строка 203: | Строка 119: | ||
done | done | ||
Выглядит это так в командной строке. | Выглядит это так в командной строке. | ||
PHOTO=($(ls /mnt/e/test/005/)) | |||
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 | ||
В целом это все. Сеть работает и обрабатывает. | В целом это все. Сеть работает и обрабатывает. | ||
| Строка 230: | Строка 148: | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Текущая версия от 10:47, 23 августа 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, понял, что я вообще не понимаю, что делать. Совершенно не информативно, инструкций просто нет. Точнее они есть... но... считай их нет.
Начал искать что то готовое. Оказывается есть такая штука как 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, не слышали.
Хорошо. Вступление, пора заканчивать.
Подготовка ОС
Следуем инструкции установки на реальное железо linux или WSL2.
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
Выглядит это так в командной строке.
PHOTO=($(ls /mnt/e/test/005/))
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_psnr_x4c64b23g32_g1_1000k_div2k.py /tmp/mmediting/work_dirs/esrgan_psnr_x4c64b23g32_1x16_1000k_div2k_20200420-bf5c993c.pth /mnt/e/test/005/$tgt /mnt/e/test/004/E_$tgt; done
Конфигурация \tmp\mmediting\configs\restorers\esrganesrgan_x4c64b23g32_g1_400k_div2k.py
scale = 4 # Коэффициент масштабирования для повышения частоты дискретизации, но он не работает, так как модель всегда на 4
# настройки модели
model = dict(
type='ESRGAN', # Название модели
generator=dict( # Конфиг генератора
type='RRDBNet', # Тип генератора
in_channels=3, # Номер канала входов
out_channels=3, # Количество каналов выходов
mid_channels=64, # Номер канала промежуточных функций
num_blocks=23, # Номер блока в магистральной сети
pixel_loss=dict(type='L1Loss', loss_weight=1e-2, reduction='mean'), # Конфиг для потери пикселей
# модель обучения и настройки тестирования
train_cfg = None # Конфигурация обучения