Waifu2X (DeadSix27, OpenCL/CV) - увеличение разрешения изображений в аниме стиле используя ИИ
- Навигация:
- Waifu2X
- Для чего использовать
- Как использовать
- ".BAT" файлы
- Контекстное меню проводника:
- Заключение
Waifu2X
Внимание: Это не курс по основам работы с операционной системой, если вы не в состоянии включить показ расширений файлов в проводнике Windows и сделать ".bat" файл из ".txt", эта статья может быть слишком сложной, я предупредил.
реклама
После создания статьи с тестами производительности используя утилиту Waifu2X, у некоторых людей возникли вопросы по использованию данной утилиты, именно в данной статье я постараюсь наглядно объяснить что это такое, и как использовать.
-= Тестирование видеокарт AMD и nVidia: Обработка изображений Waifu2X и проблемы nVidia =-
Если в двух словах про Waifu2X, то это программа использующая ИИ для увеличения изображений в аниме стиле.
реклама
Исходная Waifu2X создана под nVidia CUDA, и вот собственно её страница: ( github.com/nagadomi/waifu2x )
Оригинальная версия Waifu2X довольно привередлива, требует видеокарту только от nVidia, причем старые видеокарты не подходят, требует проприетарные nVidia библиотеки для работы, а еще "падает" если на видеокарте недостаточно видеопамяти либо драйвер не понравился проприетарной библиотеке от nVidia...
В общем далеко не лучший вариант, но статья не про оригинальную Waifu2X, а про её клон от DeadSix27, ссылка на гит: ( github.com/DeadSix27/waifu2x-converter-cpp )
В отличие от оригинальной Waifu2X, версия от DeadSix27 требует лишь OpenCL, и основана на открытой библиотеке OpenCV, работает OpenCL вариант Waifu2X даже на старых видеокартах которые nVidia CUDA посылает подальше от себя...
реклама
Ничего дополнительно выкачивать не нужно, чтобы заставить работать видеокарту над увеличением изображения либо подавлением шума, т.к. OpenCV свободно распространяемая библиотека в отличие от nVidia cuDNN, и поставляется сразу в комплекте.
Конечно, утилиту можно скомпилировать и под Linux, но в данной статье рассмотрим вариант Windows, тем более под Windows уже скомпилировано всё.
Последняя версия DeadSix27 Waifu2X 5.3.4, но в этой версии есть некоторые проблемы с выводом производительности для GFLOPS-Filter (вероятно внесли изменения в исходный код и не протестировали).
реклама
Хотя и внесли некоторые правки полезные, но в целом версия 5.3.4 не подходит для тестирования производительности видеокарт/процессоров, либо для сравнения использовать время за которое изображение было обработано видеокартой (использовать шкалу "меньше — лучше"), либо править исходный код и компилировать вручную что требует некоторых инструментов и подходит далеко не любому человеку.
Потому использовать я буду версию DeadSix27 Waifu2x 5.3.3, не самая новая, но рабочая и позволяет делать сравнительные тесты видеокарт/процессоров используя шкалу "больше — лучше".
Для чего использовать
Функция подавление шума:
Пожалуй основной вариант использования в моём случае, это подавление шума, можно не только арты в аниме стиле "чистить", но и фотографии.
Несколько примеров "чистки" шумов и артефактов сжатия JPG:
![]() |
![]() |
![]() |
![]() |
Еще функцию подавления шума максимальной степени можно применять для подавления ореолов резкости, однако не следует рассчитывать что данный метод всемогущий:
Функция увеличения:
В совокупности с функцией подавления шума можно получить неплохие результаты:
Иногда исходное изображение размыто, в таких случаях для получения хороших результатов стоит применять резкость к изображению, в зависимости от конкретного случая:
Тестирование производительности:
Тут всё просто, отправляем на обработку изображение, и смотрим насколько быстро обрабатывает видеокарта/процессор в зависимости от того, что выбрано для работы.
Смотреть GFLOPS-Filter, оно показывает с какой скоростью проводилась сама работа над изображением, не учитывая затраченное время на открытие файла, запись файла, сжатие PNG и т.п.
В зависимости от драйвера, фоновых процессов, разгона, самого изображения обрабатываемого и т.п. результаты с одной и той же видеокартой могут иметь погрешность, далее несколько результатов полученных в ходе создания моей предыдущей статьи:
-= Тестирование видеокарт AMD и nVidia: Обработка изображений Waifu2X и проблемы nVidia =-
В идеале следует выбрать одно изображение, и преобразовать его в несколько размеров для видеокарт разного класса производительности, просто чтобы не тратить зря время нагружая огромным массивом работы слабую видеокарту или процессор.
От размера блока так же зависит производительность работы, тут для каждой видеокарты могут быть свои значения идеальные, но для тестирования следует выбирать диапазон одинаковых значений, от малого к большому (например, 256, 512, 1024, 1536).
Чем больше размер блока, тем больше памяти используется для работы, этот нюанс тоже следует учитывать на системах с малым объёмом ОЗУ.
Чтобы меньше тратить времени на тесты, можно сбавить степень сжатия PNG командой "-c", это не повлияет на результат работы, но общее время выполнения сократит значительно т.к. стандартное сжатие PNG занимает много ресурсов процессора.
Как использовать
По-хорошему следует внимательно прочитать "помощь" что встроена в саму программу, её можно вызвать командой "--help":
Если весь текст не помещается в окне командной строки, то следует увеличить размер буфера:
Но если вам не особо помогла "помощь" чтобы понять как использовать утилиту, значит переходим к следующей "шпаргалке":
1) Путь к конвертеру "waifu2x-converter-cpp.exe", может быть как относительный, так и прямой в зависимости от нужды.
2) Если обрабатываемый файл за пределами папки конвертера, то необходимо указывать путь к моделям
"--model-dir путь\models_rgb"
3) "--force-OpenCL" необходим если нужно задействовать встроенную графику Intel, но если нет видеокарт и драйвера не установлены работу сделает ЦП.
4) "--block-size 1024" необходим для настройки оптимальной производительности, маленькие значения есть смысл использовать для минимизации потребления ОЗУ, а большие значения для максимизации скорости.
4.1) Параметр "-c 2" отвечает за степень сжатия PNG и позволяет ускорить общую работу, можно выбрать степень сжатия от 0 до 9, чем выше степень сжатия тем меньше размер обработанного изображения, но высокие степени сжатия требуют больше ресурсов системы.
4.2) Из названия следующего параметра понятно для чего он, "--disable-gpu" позволяет работать используя только ЦП.
4.3) Параметр "-r 1" нужен для рекурсивной обработки папок, например если в одной папке с изображениями есть другая папка с изображениями.
4.4) Параметр "-g 1" автоматически создает папки внутри папок при рекурсивной обработке папок, чтобы всё по полочкам было.
4.5) Параметр "-f png" необходим при обработке папок, он задает формат сохранения обработанных изображений, но можно его применять и при обработке одиночных файлов, например выбрать JPG вместо PNG, но тогда нужно будет параметр контролирующий степень сжатия использовать "-q" вместо "-c"
5) Параметр "-m scale" задает режим работы конвертера, "-m scale" для увеличения, "-m noise" для чистки изображения от шума, "-m noise-scale" для всего вместе.
6) Параметр "--scale-ratio 2.0" применяется вместе с "-m scale" или "-m noise-scale", и позволяет выбрать кратность увеличения (при кратности 1.5x, обрабатывать увеличение будет до 2x с уменьшением до 1.5x).
7) Параметр "--noise-level 3" применяется вместе с "-m noise" или "-m noise-scale", можно выбрать 4 степени подавления шума, самое слабое "--noise-level 0", самое сильно подавление "--noise-level 3".
8) Параметр "-i %1" указывает путь к файлу который нужно обработать, можно указать вручную, но я предпочитаю использовать команду "%1", она сама подставляет прямой путь вместе с именем файла.
9) Параметр "-o путь" необходим если результат нужно сохранить отдельно от исходного файла, по сути аналогичен параметру "-i".
На этом пожалуй всё самое важное расписано, далее переходим к конкретным примерам использования.
".BAT" файлы:
Самый простой вариант будет содержать лишь несколько команд, имя файла конвертера, параметр "-i" с именем обрабатываемого файла, и команда "pause" чтобы окно сразу же не закрылось.
waifu2x-converter-cpp.exe -i w17.JPG
pause
Преимущество такого подхода разве что в простоте, он не позволяет контролировать что-либо, всё работает со стандартными настройками что заданы разработчиками софта, причем такой вариант работает только в пределах папки конвертера.
Нас такой вариант не устраивает, потому представляю вариант позволяющий из любого места перетащить картинку на "батник", и получить результат в той же папке, где исходная картинка:
C:\_PORTABLE_\waifu2x_533\waifu2x-converter-cpp.exe --model-dir C:\_PORTABLE_\waifu2x_533\models_rgb --force-OpenCL --block-size 1024 -c 2 --scale-ratio 2.0 -m scale -i %1
pause
Теперь "батник" можно расположить где угодно, т.к. я использовал прямые пути к конвертеру и моделям, а вместо указания конкретного имени файла, я использую команду "%1", эта команда подставляет прямой путь к файлу вместе с именем файла, что собственно можно заметить в окне командной строки.
Можно добавить параметр "-o" и результат будет помещен в указанный путь, тут можно указать вручную папку куда сохранять результат, но я применю более сложный подход используя команды "MD", "%~d1" и "%~p1".
Сначала командой "MD" создаю папку "result" в папке изображения которое отправляется на обработку, это необходимо чтобы конвертер смог туда записать обработанное изображение.
Чтобы извлечь только путь без имени файла, я применяю команду "%~d1" что подставляет букву диска, и команду "%~p1" что подставляет путь без имени файла и буквы диска, а после просто дописываю название папки которую нужно создать, и точно такую же конструкцию подставляю к параметру "-o".
Не забываем про кавычки если путь может содержать пробелы, и правильные слэши (обратите внимание на прямой слэш подаваемый в параметр -o), выглядит это дело следующим образом:
MD "%~d1%~p1result"
C:\_PORTABLE_\waifu2x_533\waifu2x-converter-cpp.exe --model-dir C:\_PORTABLE_\waifu2x_533\models_rgb --force-OpenCL --block-size 1024 -c 2 --scale-ratio 2.0 -m scale -i %1 -o "%~d1%~p1result/"
pause
Играя с параметрами можно не только для увеличения использовать "батник", но и для подавления шума, например обработать папку с изображениями, но результат положить в соседней папке, в таком режиме можно не применять команду "MD":
C:\_PORTABLE_\waifu2x_533\waifu2x-converter-cpp.exe --model-dir C:\_PORTABLE_\waifu2x_533\models_rgb --force-OpenCL --block-size 1024 -r 1 -g 1 -f png -c 2 --noise-level 3 -m noise -i %1 -o "%~d1%~p1%~n1 - result/"
pause
На этом моменте я пожалуй остановлюсь, можно конечно еще больше вариантов продемонстрировать, и даже более сложные, но основное я уже показал, дальше уже зависит от требований и необходимого результата.
Контекстное меню проводника:
По сути все так же, как и с "батниками" за исключением мелочей, я просто прописываю параметры в кусты реестра [HKEY_CLASSES_ROOT\*\shell] и [HKEY_CLASSES_ROOT\Directory\shell].
[HKEY_CLASSES_ROOT\*\shell] - это для одиночного файла.
[HKEY_CLASSES_ROOT\Directory\shell] - для папки.
Выглядит это дело так:
Я реализовал все в ".reg" файле чтобы вручную не прописывать в редакторе команды, просто один раз открываю ".reg" и вношу все изменения сразу в реестр.
Но есть и минус такого подхода, символы нужно изолировать обратным слэшем, в итоге команды приобретают неприличный вид, следующая строка для обработки одиночного файла:
[HKEY_CLASSES_ROOT\*\shell\2X-Scale\Command]
@="C:\\_PORTABLE_\\waifu2x_533\\waifu2x-converter-cpp.exe --model-dir C:\\_PORTABLE_\\waifu2x_533\\models_rgb -c 2 --block-size 768 --force-OpenCL --scale-ratio 2.0 -m scale -i \"%1\""
Далее строка для обработки папки, тут есть небольшие отличия от ".bat" варианта (в параметре -o):
[HKEY_CLASSES_ROOT\Directory\shell\2X-DeNoise-0-F\Command]
@="cmd.exe /k \"C:\\_PORTABLE_\\waifu2x_533\\waifu2x-converter-cpp.exe --model-dir C:\\_PORTABLE_\\waifu2x_533\\models_rgb -r 1 -g 1 -f png -c 2 --block-size 768 --force-OpenCL -m noise --noise-level 0 -i \"%1\" -o \"%1 - result/\"\""
Работает всё это следующим образом:
Для одиночных файлов окно автоматически закрывается т.к. я не прописывал флаг "/k" для командной строки (отвечает за паузу после завершения работы), потому результат просто появляется рядом с файлом который нужно было обработать.
Собственно на этом можно закончить, основное я более чем расписал и показал, если необходимо вместо PNG сохранять в JPG или сделать что-то иначе, добро пожаловать в "--help", и не забывайте про размер буфера о котором я писал в начале раздела:
Заключение
Никогда не забывайте изучать инструкцию ("--help"), там может быть много интересного спрятано, причем необязательно это будет инструкция к программе...
Я конечно не учитель, но самое главное попытался выделить, и еще раз повторю, это не урок по основам работы с операционной системой, для понимания происходящего нужны некоторые знания и навыки.
На этом всё, благодарю за внимание.
Лента материалов
Соблюдение Правил конференции строго обязательно!
Флуд, флейм и оффтоп преследуются по всей строгости закона!
Комментарии, содержащие оскорбления, нецензурные выражения (в т.ч. замаскированный мат), экстремистские высказывания, рекламу и спам, удаляются независимо от содержимого, а к их авторам могут применяться меры вплоть до запрета написания комментариев и, в случае написания комментария через социальные сети, жалобы в администрацию данной сети.
Комментарии Правила