Апскейл: waifu2x vs nnedi3

Дата: 03 августа 2015 14:00 #1

Апскейл: waifu2x vs nnedi3

В поисках альтернатив nnedi3 недавно наткнулся на любопытнй свежий япоский онлайн-ресемплер: waifu2x.udp.jp за авторством nagadomi.

По сути, использована та же свёрточная нейросеть (на платформе Torch7), но обучалась эта сетка на 3000 отборных аниме-сорцах. Это дало более «специализированные» веса, т. е. нейронка заточена именно на апскейл аниме (хотя и с многими другими типами изображений справляется на удивление хорошо). Вайфа ещё и денойзить умеет, но нас это пока не интересует.

В сравнениях рандомный шот из аниме уменьшался в 4 раза и увеличивался обратно с помощью: a) nnedi3, б) nnedi3+aWarpSharp+toon+LSFMod, в) waifu2x без денойза (веб-версия позволяет только двухкратное увеличиение, поэтому зумилось дважды). Всякие бикубики и ланкзосы приводить не стал, все и так знают что они сосут. Может, позже добавлю АЕшный, но у него отличий от ннеди мало. Стоит отметить, что вайфа без GPU отрабатывает свои два прохода заметно дольше nnedi3.

1.

Original
nnedi3
nnedi3+
waifu2x


2.

Original
nnedi3
nnedi3+
waifu2x


3.

Original
nnedi3
nnedi3+
waifu2x


4.

Original
nnedi3
nnedi3+
waifu2x

Кому лень анализировать, сопоставлять и делать выводы: это твоя вайфа!
На гитхабе доступен код на lua и инструкции, как применять вайфу к видео (батч сиквенса фреймов) и даже обучать по своим правилам. Силами народных умельцев код переписан на с++ и на caffe (с GPU ускорением), и даже сделаны порты на Ависинт и Вапорсинт. На Doom9 сообщают о некотором мерцании при использовании на видео (из-за рандомности скачков микроискажений), но думаю это частично решится фиксами или темпоральными специями.
Дата: 03 августа 2015 14:48 #2
Спасибо за наводку О,о,о,о,о великий Трамп, качнём и заценим на вкус.
Женат на Sony Vega но хожу к любовнице Adobe After Effect
Дата: 03 августа 2015 15:45 #3
НОРМ, как раз Твшник евы перепиливать.
God's in his Heaven… All's right with the world
Дата: 23 августа 2015 10:39 #5
Визуально очевидно, что стало намного лучше. Крутая штука. )
Дата: 24 августа 2015 16:20 #6
Оффлайн-версия вайфы
http://inatsuka.com/extra/koroshell/
Дата: 24 августа 2015 18:22 #7
Ребят, хелп ми плиз) начал постигать азы создания AMV) но что то не выходит(, никак не могу понять как в вайфе с видео работать. Офлайн конвертер ( http://inatsuka.com/extra/koroshell/ ) я так понял только с картинками работает? Остальные ссылки из первого поста блин что-то разобраться не могу по ним. Кто-нибудь хоть примерно сможет навести на путь истиный, хоть каркас алгоритма?) выручайте Embarassed
Дата: 27 августа 2015 12:30 #8
Итак, я полностью ознакомился с этой штукой. Вещь очень крутая. Теперь дам советы и ответы другим людям.

1. На процессоре программа работает очень долго, Вам нужно качать версию, которая умеет работать на видеокарте. У меня разница в скорости около 60 раз (на видеокарте обработка одной картинки занимает 4-9 секунд, на процессоре около 4-9 минут, хотя в новой версии разница уменьшилась и составила 3 раза). Вот ссылка на реализацию waifu2x для Windows, которая использует видеокарту, а не процессор, написана на C++ и использует разные оптимизации: http://int.main.jp/files/waifu2x-converter_x64_0813.zip. В данный момент версия 0813. Версия здесь важна, т.к. старые версии не использовали видеокарту и оптимизации. Также лучше качать 64-битную версию, т.к. в 32-битной версии есть шанс, что видеокарта не будет использоваться.

Для тех, кто хочет понять, как я нашёл эту ссылку, даю инструкцию:
1) Открыть проект waifu2x на Гитхабе (https://github.com/nagadomi/waifu2x)
2) Найти и открыть там ссылку "Third-Party" (https://github.com/nagadomi/waifu2x/wiki/Third-Party)
3) Открыть ссылку "List of waifu2x-derived software" (http://kourindrug.sakura.ne.jp/waifu2x.html)
4) Найти на странице "waifu2x-converter-cpp", но там их несколько, нужно выбрать тот, который авторством tanakamura (http://d.hatena.ne.jp/w_o/20150629#1439401739)
5) Крутим страницу вниз, т.к. более новые версии ниже. В данный момент последняя версия — 0813. Соответственно, ссылка на архив будет называться waifu2x-converter_x64_0813.zip

PS. Я не гарантирую, что нет более быстрых реализаций на GPU. На странице http://kourindrug.sakura.ne.jp/waifu2x.html ещё сказано про реализации waifu2x-opt и waifu2x-caffe, но я не стал их сравнивать (хотя всего скорее они хуже). Также в разных реализациях и версиях качество может слегка отличаться, к примеру, в той версии, что я скинул, качество, по-моему, слегка лучше, чем в главной демке waifu2x.

2. Нужно ли использовать удаление шума? Если шума на картинке нет, то удалять его не нужно, т.к. это только испортит картинку. Если шум на картинке есть, то выбрать уровень удаления шума 1 (обычный). Уровень удаление шума 2 (высокий) вообще почти никогда не рекомендуется использовать, т.к. он портит почти все изображения. Улучшение есть только в редких случаях, когда картинка изначально была очень сильно испорчена.

3. Как обработать видео? Обработка видео делается в тупую: вначале Вам нужно извлечь из видео все кадры, потом обработать их программой, а потом снова склеить в видео. Про это написано на главной странице https://github.com/nagadomi/waifu2x. Также там есть какие-то инструкции, но я их не проверял. Свою инструкцию не дам, т.к. не занимался этим. От себя добавлю, что обработка 1 кадра 480p на моём ноутбуке занимает около 4 секунд, 24-рёх таких кадров — 96 секунд, одной 25-минутной серии аниме — 40 часов, но треть этого времени вроде уходит на кодирование png. +Это ноутбук, на компьютере дело было бы в несколько раз быстрее.

Также нужно добавить: если исходник изначально некачественный (размытый или со сбитыми линиями), то waifu2x не сможет улучшить качество в 4 раза. Например, такие исходники часто попадаются в dvd-рипах. В этом случае waifu2x выдаёт даже сильно менее качественную картинку, чем NNEDI3 (по крайней мере если не использовать устранение шума, но если устранять шум, то лучше тогда устранить шум с помощью waifu2x, а апскейл сделать с помощью NNEDI3). Но если картинка нормальная (например, BDRip или арт), waifu2x может без проблем улучшить качество в 4 раза, а в некоторых случаях даже до 10 раз. NNEDI3 конечно на такое не способен, он вообще не способен улучшать качество, он просто делает очень хороший апскейл.

Естественно нужно упомянуть ещё одну вещь: если картинка изначально была заапскейлена, имеет смысл вначале сделать даунскейл до исходного состояния, и уже потом прогнать через waifu2x. Причину, я думаю, объяснять не нужно. Естественно, вначале нужно сравнить результат, прежде чем делать это.

4. Как начать обработку с помощью той программы, которую я скинул. Есть несколько способов:

1) Просто запустить install.bat. После этого у Вас в меню "Отправить" на всех файлах будет пункт waifu2x. Это самый простой способ, но он не позволяет настроить ни удаление/неудаление шума, ни коэффициент увеличения картинки, ни выходное имя файла. По умолчанию происходит увеличение картинки в 2 раза, используется режим удаления шума 1 (обычный) и имя файла "mai_" + исходное имя.

2) С помощью ExtendedSendTo. Это скрипт я написал сам. Ссылка на скрипт http://vk-games.com/files/ExtendedSendTo.zip, там же есть инструкция. Скрипт тоже работает с помощью добавления новых пунктов в меню "Отправить", но даёт намного больше возможностей: один из пунктов позволяет полностью вручную настроить все параметры, а 5 других пунктов являются быстрыми ссылками для самых популярных настроек. Обрабатывать можно сразу много файлов. Инструкция по установке скрипта есть в архиве. В скрипте есть русский, английский и частично японский языки. Я, наверное, сейчас напишу автору программы об этом скрипте, возможно, он включит его в программу в будущих версиях.

3) С помощью консоли. Для обработки служит программа waifu2x-converter_x64.exe. Введите waifu2x-converter_x64.exe --help для того, чтобы получить список поддерживаемых параметров. Данный способ позволяет настроить абсолютно всё, но требует от Вас хорошо разбираться в компьютерах. Waifu2x-converter_x64.exe поддерживает следующие параметры:

--model_dir — папка с моделью преобразования. Укажите полный путь до models_rgb
--mode — режим обработки изображения, noise - только устранение шума, scale - только увеличение размера, noise_scale - и то, и то
--scale_ratio — коэффициент увеличения изображения по каждой из сторон
--noise_level — режим устранения шума, 1 - обычный, 2 - агрессивный. Если Вы не хотите устранять шум, то при вводе --mode scale (только увеличение размера) параметр noise_level будет игнорироваться
-i — входной файл
-o — выходной файл
-h — вывести справку
-j — количество запускаемых одновременно потоков. При работе на видеокарте указывать нет смысла
--block_size — размер блока. Дело в том, что если картинка большая, то программа обрабатывает её не всю сразу, а разбивает на блоки, чтобы использовать меньше оперативной памяти. Указывать это значение нет смысла
--disable-gpu — отключить использование видеокарты. Нет смысла

5. Я провёл сравнение waifu2x с технологией апскейла, которую применяют создатели аниме. Все знают, что аниме рисуется не в 1080p, а в 540p (по крайней мере линии, фоны вроде в 720p), после чего идёт апскейл в 1080p. Так вот, выяснилось, что waifu2x может сделать этот апскейл, выдав результат целых в 2 раза лучше по качеству, чем сейчас выдают производители аниме. Для выяснения я взял исходный кадр в 1080p из аниме Tokyo ESP, уменьшил его в 4 раза, потом прогнал его через waifu2x и в итоге у меня получилась картинка в 2 раза лучше качества, чем была изначально. Вот архив со скриншотами, где это наглядно показано: http://vk-games.com/files/compareAnimeUpscale.zip (смотреть архив нужно при разрешении не менее 1980x1080). Хотя в некоторых местах картинка наоборот подпорчена (дверная ручка), но понятное дело, что при производстве аниме изображение персонажей и фонов нужно апскейлить отдельно. В общем, я надеюсь, на алгоритм обратят внимание создатели аниме и будут делать более качественный апскейл. Хотя если честно, у меня при просмотре включён фильтр aWarpSharp из ffdshow, он итак улучшает качество, с этим фильтром уже разницы нет (я проверял), но если переходить на монитор 4K, то разница будет.

6. Если выбирать коэффициент апскейла не являющийся степенью двойки, это не ускорит процесс, т.к. если указать, к примеру, 3, на самом деле он сделает 4 и просто в конце сделает даунскейл.

Ну вот и всё, надеюсь, кому-то помог. В заключение скажу, что я мог где-то наврать, т.к. я не спец по waifu2x, я сам узнал о нём 3 дня назад. Можете задавать вопросы. Также если что, я немного знаю японский, если нужно прочитать что-то конкретное по этой теме по-японски — могу прочитать.
Дата: 27 августа 2015 18:46 #9
ачо на вайпе нету поддержки гпу?
плин, заюзал так
[code:1]v = core.waifu2x.Resize(v, width=v.width*2, height=v.height*2, threads=4)[/code:1]
дефаулт ДВД рип
в VD после рендера кадра (10-20сек с нагрузкой в 50% на cpu) он продолжает смаковать еще 2-3 мин с нагрузкой в 100% и сжирать до 6GB оперы...
обработка 24 кадров заняла час... не юзабельно :[

кто-нибудь юзал? (он с гпу какбэ)
https://github.com/HomeOfVapourSynthEvolution/VapourSynth-Waifu2x-w2xc/
у меня черный экран
[code:1]v = core.w2xc.Waifu2x(v, noise=0, scale=2, block=512, gpu=1)[/code:1]
Дата: 27 августа 2015 20:10 #10
Artofeel:
ачо на вайпе нету поддержки гпу?

Поддержка GPU есть, 1 кадр на моём ноутбуке обрабатывается около 4 секунд. Тут вопрос в другом. У waifu2x есть очень много форков. Вопрос в том, какой из них быстрее всего работает. Если кто-то сделает исследование на эту тему, это будет хорошо, т.к. я не стал сравнивать скорость, а взял тот форк, который по внешним признакам быстрее всего. Но я мог и ошибиться.

Просто тут в треде были люди, которые вообще юзали koroshell, который работает на старой версии waifu2x-converter-cpp, которая работает чисто на CPU и без всех оптимизаций и 1 кадр обрабатывается минут 5 Very Happy
Дата: 28 августа 2015 02:40 #11
a0000, большое спасибо за такое подробное описание)! то чего не хватало) Использовал твой скрипт для видео, сохранненого в виде секвенции, результат очень порадовал Rolling Eyes
Дата: 28 августа 2015 14:42 #12
ок, разобрался, оказывается модели надо ложить в подпапки, а не тупо рядом с dll
вот так:
\VapourSynth\plugins64\w2xc.dll
\VapourSynth\plugins64\Waifu2x-w2xc.dll
\VapourSynth\plugins64\models\anime_style_art\noise1_model.json
\VapourSynth\plugins64\models\anime_style_art\noise2_model.json
\VapourSynth\plugins64\models\anime_style_art\scale2.0x_model.json
\VapourSynth\plugins64\models\anime_style_art_rgb\noise1_model.json
\VapourSynth\plugins64\models\anime_style_art_rgb\noise2_model.json
\VapourSynth\plugins64\models\anime_style_art_rgb\scale2.0x_model.json
\VapourSynth\plugins64\models\ukbench\noise1_model.json
\VapourSynth\plugins64\models\ukbench\noise2_model.json
\VapourSynth\plugins64\models\ukbench\scale2.0x_model.json

gpu юзается, обработка 24 кадров заняла ~13мин
при запуске генерируются какие-то .bin файлы рядом с моделями, довольно длительно, при окончании тоже что-то мутиться...

скрипт для вайпа выглядит так:
[code:1]import vapoursynth as vs
core = vs.get_core()
v = core.ffms2.Source(source=r"диск:\путь\сорс.mkv")
v = core.fmtc.resample(v, css="444", kernel="spline64")
v = core.fmtc.bitdepth(v, flt=1)
v = core.w2xc.Waifu2x(v, noise=0, scale=2, block=2048, gpu=1)
v = core.fmtc.matrix(v, mat="601", col_fam=vs.RGB)
v = core.fmtc.bitdepth(v, bits=8, dmode=1)
v = core.resize.Bicubic(v, format=vs.COMPATBGR32)
v.set_output()[/code:1]

w2xc принимает только 32 float, а у fmtc, bits=32 не работают почему-то, поэтому юзать можно flt=1
waifu2x (CPU) немного четче получается чем w2xc (GPU), еле заметно, погрешность вычислений на gpu? хотя вроде cuda же

w2xc в отличии от waifu2x могёт в RGB (waifu2x бака конверит его в YUV, а потом обратно)
для этого надо например так
[code:1]import vapoursynth as vs
core = vs.get_core()
v = core.ffms2.Source(source=r"диск:\путь\сорс.mkv")
v = core.fmtc.resample(v, css="444", kernel="spline64")
v = core.fmtc.bitdepth(v, flt=1)
v = core.fmtc.matrix(v, mat="601", col_fam=vs.RGB)
v = core.w2xc.Waifu2x(v, noise=0, scale=2, block=2048, gpu=1)
v = core.fmtc.bitdepth(v, bits=8, dmode=1)
v = core.resize.Bicubic(v, format=vs.COMPATBGR32)
v.set_output()[/code:1]
и тогда заюзаются anime_style_art_rgb модели
визуально разницы нет (хотя нужны бы тесты)
обрабатывается значительно быстрее, 24 кадра ~5мин

a0000, не, меня интересуют реализации исключительно на VapourSynth
trampe, добавь в первый пост ссылку на w2xc
https://github.com/HomeOfVapourSynthEvolution/VapourSynth-Waifu2x-w2xc/
Дата: 28 августа 2015 15:42 #13
Ну что ж, как видите Artofeel преложил ещё один способ обработки видео — с помощью VapourSynth. Как я понял, это, вроде, фрэймсервер на замену AviSynth. Лично я в этой теме пока не разбираюсь (не занимаюсь кодированием видео, просто мне интересны сами технологии).

Artofeel, можешь рассказать, какие ещё есть способы обработать видео вайфой?
Дата: 28 августа 2015 17:19 #14
a0000:
можешь рассказать, какие ещё есть способы обработать видео вайфой?
наверно только через AviSynth, но там хуже будет, ибо в 8 битах обработка против вайповских 32
Дата: 29 августа 2015 09:00 #15
Nicotine, я тут от нечего делать твои ролики уменьшал в 10 раз и вайфил.
Навалить векторблюра и вот тебе ликвид.

Artofeel:
оказывается модели надо ложить в подпапки, а не тупо рядом с dll
Ах тыж чёрт, а я думал чё не работает, насиловал CPU кривой ависинтовой реализацией.
Ссылку обновил.

Потестил вайфовский денойз: глянцевое мыльцо, очевидно, приученное к форчме jpg (хорошо давит рингинг и т. д., в этом примерно эквивалентен Bilateral Blur), что несколько расходится с видеошумом, где куда лучший результат дадут старые добрые TemporalDegrane, MCTemporalDenoise или QTGMC (применять перед вайфой).
Да и настройки [0, 1, 2] — несерьёзно.

Вообще, поднатаскать бы вайфу конкретно на аниме, конкретно на олдскул, BD переизданий более чем достаточно.
Неясно только, может ли добавление новых моделей сбивать (усреднять) веса, или кашу маслом не испортишь?

И да, как и nnedi3 вайфа даёт немного разный апскейл для флипнутых и повёрнутых на 90° сорцев.
На дум9 не нашёл инфы что будет, если все эти варианты (их 8) взять и аккуратно сблендить (или даже сморфить, чтоб не мылить).
Потестил на аватарке Арти, на глаз не понять.
PSNR: бикубик 189.01, сплайн64 190.13, ннеди 190.54, вайфа/hflip/vflip 190.84/190.83/190.81, их бленд 191.18, морф 191.27.
Совпадение? Подумаю. Но хоть мишурить видос должен меньше.
Чтобы писать в форуме, нужно войти.
Вход