Обучение ESRGAN: различия между версиями
Владимир (обсуждение | вклад) |
Владимир (обсуждение | вклад) м →Python |
||
| Строка 10: | Строка 10: | ||
=== '''Python''' === | === '''Python''' === | ||
Устанавливаем Python, в моем случае 3. | Устанавливаем Python, в моем случае 3.8.10 с [https://www.python.org/downloads/ официального сайта]. | ||
При установке обязательно поставить галочку на против '''Add Python 3. | При установке обязательно поставить галочку на против '''Add Python 3.8.10 to Path''' - это нужно чтобы он прописался как команды в Windows, что позволит выполнять команды Python из любого терминала. | ||
После инсталляции открыть PowerShell и ввести: | После инсталляции открыть PowerShell и ввести: | ||
Версия от 07:43, 22 мая 2021
Обучения силами BasicSR от Xintao.
За основу взята версия релиз 1.2
Интересно то, что все будет запускаться нативно в Windows. Без каких либо прослоек. С использование аппаратного ускорения CUDA.
Подготовка

Python
Устанавливаем Python, в моем случае 3.8.10 с официального сайта.
При установке обязательно поставить галочку на против Add Python 3.8.10 to Path - это нужно чтобы он прописался как команды в Windows, что позволит выполнять команды Python из любого терминала.
После инсталляции открыть PowerShell и ввести:
Python
Получим ответ по типу:
Python 3.8.5 (default, Sep 3 2020, 21:29:08)
Значит все Ок, все установлено верно и будет работать.

PyTorch
фреймворк машинного обучения для языка Python с открытым исходным кодом.
Без него не будет работать BasicSR.
Берем опять же от официалов
В моем случае это версия 1.8.1, для Windows, устанавливаться будет через pip3, Работать будет с CUDA11.1.
Будет сгенерирован код.
Выполняем через PowerShell от администратора:
pip3 install torch==1.8.1+cu111 torchvision==0.9.1+cu111 torchaudio===0.8.1 -f https://download.pytorch.org/whl/torch_stable.html
Начнется небыстрая установка компонентов.
Результатов в процессе будет очень много, сложно сказать какие могут быть проблемы...
NVDIA драйвер
Ставим самый последний драйвер, как обычно, наверняка это все умеют, с официального сайта конечно.

CUDA Toolkit
Такое обычный пользователь ставить не будет, но в данном случае придется, ведь наша нейросеть основана на cuda, точнее она исполняет код с помощью CUDA Toolkit.
Конечно же брать с официального сайта. Выбрать Windows, архитектуру x86_64, версия Windows конечно же 10, ну и тип установщика: автономный или локальный, в челом без разницы.
Устанавливает как обычно, практически также как драйвер.
Так что ждем установки и радуемся успешному окончанию.
Git
Тоже мало кто будет ставить это на Windows, но разработчики это делают по умолчанию. Потому что, а как еще взаимодействовать с GitHab. Интересно, что MS давно уже приобрели GitHab, но какого мелкомягкого человека Git не встроен в Windows до сих пор!?
Ладно... Скачиваем с официального сайта. Естественно под x64, в каком веке мы живем?
Ничего сложного, далее, далее, далее, готово.
Теперь мы можем получать с Githab и подобных файлы напрямую, через PowerShell.

Microsoft C++ Build Tools
Не понимаю зачем но придется поставить и вот это. Да понятно что это, но на всего то нужно пара как их то модулей, но придется ставить монструозный софт, весом под 4 гигабайта.
Конечно скачать с официального сайта.
При установке, отметить галкой C++ Build Tools. Как показано на картинке.

BasicSR
При скачивании последней версии, обучение модели работает, но при создании Валидных изображений процесс крашится. На момент 22.05.20.
Поэтому беру релизную версию и не мучаюсь. В ней все работает, но инструкция не соответствует. Поэтому по ссылке приложена именно страница на момент выпуска релиза.
Важно!
В инструкции написано:
git clone https://github.com/xinntao/BasicSR.git
Но так как мы берем не последнюю версию, то нужно просто получить архив, на картинке:
Скачиваем архив, помещаем содержимое куда надо. Вообще не важно куда.
Теперь запускаем PowerShell от админа.
Переходим в папку BasicSR - у меня это выглядит так:
cd D:\test\AI\BasicSR
Выполняем команды:
pip install -r requirements.txt
python setup.py develop
Произойдет не мало всего, и очень надеюсь что без ошибок.
Настройка
Под настройкой подразумевается прописывание в конфигах нужных путей, настроек.
Мы хотим обучать сеть, алгоритм будем брать ESRGAN.
Открываем текстовым редактором файл:
.\BasicSR\options\train\ESRGAN\train_ESRGAN_x4.yml
name: указываем имя паки в которую будут складываться результаты.
name: Manga_set2
Далее по документу:
datasets: train: name: DIV2K type: PairedImageDataset dataroot_gt: datasets/Manga_set2/GT # тут папка в корой лежат файлы к которым сеть будет стремиться. dataroot_lq: datasets/Manga_set2/LQ # тут файлы которые сеть будет пытаться превратить в то к чему нужно стремится.
Следующий блок:
val: name: Set14 type: PairedImageDataset dataroot_gt: datasets/Manga_set2/GT_V # это файлы валидности, чрез некий промежуток времени будет делаться создание среза в виде результата обработки, то что как бы должно быть. dataroot_lq: datasets/Manga_set2/LQ_V # из этого она попытается сделать конечный результат, который мы увидим, своего рода срезы обучения.
Следующий блок отвечает за местоположение файла предварительно обученной модели.
path: pretrain_network_g: experiments/pretrained_models/ESRGAN_PSNR_SRx4_DF2K_official-150ff491.pth # путь до файла модели, обучение запускается именно отсюда strict_load_g: true resume_state: ~ # в начале обучения тут ничего не должно быть, но в какой то момент, захочется остановить обучение, и продолжить позже, для этого ниже создаются срезы модели. Вот этими срезами и можно будет воспользоваться для возобновления обучения. Просто будет указан путь до среза.
Данный блок отвечает за то как часто будет создаваться изображения валидности, из срезов.
val: val_freq: !!float 1e2 # может указываться как в научном виде, так и простом, например 200. Каждые 200 итераций, будет выполнено создание изображения с использованием текущего состояния модели. save_img: true
Данные блоки отвечают за частоту отображения состоянии итераций и сохранении срезов модели.
logger: print_freq: 10 # частота отображения результатов в командной строке. save_checkpoint_freq: !!float 1e3 # частота создания срезов модели. В данном случае раз в 1000 итераций. Не забываем что каждый такой срез занимает 256 мегабайт, и таких срезом будет порядка 400, в итоге это будет занимать очень много места.
В общем с настройками train_ESRGAN_x4.yml можно закончить.
Следующим этапом будет подготовка датасетов.
Датасет
Для начала нам нужно понять что мы хотим получать на выходе.

В моем случае, и случае который я буду описывать, мне нужно:
Задача восстановление качества графических изображений, а именно манги. Так же основной причиной именно обучения модели и не применении классических методов, является превращение зернистых полутонов в градиенты. Пример на картинке. Так как все эти графические рисунки издают на бумаге, все полутона и градиенты делают в виде множества точек. После чего именно в таком виде это утекает в сеть. Минусы такого изображения в том, что зачастую программная интерполяция, при просмотре не в масштабе, создает артефакты, ореолы и в целом лично мне не нравится.

Но есть еще причины, в сети изображение в 99 процентах случаем уменьшают в разрешении, Происходит интерполяция, и каждая точка уже не способна уместится в один пиксель, происходит сглаживание, но самое не приятное, меняется общая гамма, из за изменения плотности. Получается изображение теряет свои оригинальные оттенки.
Но и это не самая большая проблема. Хуже всего то что хорошо обученная прошлая моя модель, специально настроена на вычленение каждой детали из исходника, и она с лёгкостью выделяет каждую такую точку в отдельный объект. Что влечёт у очень большим искажениям тона. Это уже выглядит не совсем приятно, и при программной интерполяции воссияют еще более резкие артефакты, из за очень высокой четкости.
На картинке пример, видно что модель закрасила тени, потому что на исходнике не было четкого контраста, такое бывает редко, в большинстве случав фон будет белым, а точки мелкие и черные. Это сильно бьёт по глазам, и в итоговой отрисовке, кажется менее темным чем должно быть, также исчезает эффект перехода от светлого к темному.
В теории можно выполнить такую операцию в графическом редакторе, подобрав тон градиента, и и с помощью маски нанести в нужных места изображений. Но просто представим трудозатраты на эту работу. Это огромное количество ручной работы.
Второе что я бы хотел получать - это конечно же качественный абскеил. Такого же уровня как я обучил ранее. Попробую убить 2х зайцев одним выстрелом.
Посмотрим что получится. На момент написания статьи я сам не знаю результата, получится у меня или нет.

Первое что я предполагаю еще до обучения, это то как объяснить модели, где реально зерно для создания градиента, а еде например вот такая вот текстура как на картинке.
Сверху отчётливо видно, что есть объект стилизованный под текстуру. А внизу закрашенный градиент.
Данное изображение получено обработкой моей моделью. Но место которое стилизовано под текстуру было обработано отдельно, другой моделью, а потом наложено в графическом редакторе. Немало ручной работы, но и таких мест не очень много в манге. Но все же хотелось бы добиться результата из коробки.
А это все означает следующее:
Нам нужно найти пару десятков, изображений низком качестве с зерном на переходах и эти же изображения но в отличном качестве, с градиентами вместо зерна.
Совсем не простая задача, как кажется.
Так де не реально получить изображение в 4 раза больше чем стандартное размещаемое на ресурсах с мангой. Так же зачастую изображения с зерном - это сканы. А изображения с градиентами это цифровые версии. Скан отличается от цифровой версии, как размером страницы иногда искажен. Так же отличаются языки, размеры диалоговых облаков. Тут остается надеется на "сообразительность" модели, она должна понять что это совершенно не те места на которые нужно обращаться внимание и пытаться что то сделать.
Обучение
Такой результат получаю с дастасетом в 800 картинок уже после 2100 итераци. Модель моментально поняла что от неё требуется, заодно неплохо повышается резкость изображения, как и контрастность.
-
Валидный кадр с зерном 01
-
Результат после обучения 2100 итераций 01
Сесть обучалась в течении 10 минут, а результат уже изумительны. Есть некоторые флуктуации от среза к срезу, по части цвета фона. Причиной является то, что предварительно обученная модель которую мы обучаем нашим датасетом, работала с цветными изображениями.
Нужно пройти пару десятков тысяч итерация чтобы модель стала пренебрегать цветом.