Как стать автором
Обновить

Комментарии 8

«Видно, что нейронная сеть несколько хуже справляется с сжатием изображения» — не видно, не тот график в текст вставили.
Ошибка исправлена.
PNG относительно долго кодируется/декодируется, интересно сравнить результаты по времени кодирования/декодирования с неросетью
Очевидно, что вариант с нейросетью будет самым медленным. Так как чем проще фильтр, тем он быстрее.
А выигрыш в размере не столь велик, чтобы ускорить последующие стадии сжатия.

Кстати, когда разбирался с производительностью сохранения в PNG, выяснилось, что по-умолчанию кодировщик перебирает все доступные фильтры и тратит на это бОльшую часть времени. А если ограничить его одним фильтром (например для большинства синтетических изображений из нашей выборки Up фильтр оказался оптималным), то скорость возрастает в разы.
Если правильно написать NNFilter, допустим используя технологию OpenCL, то сеть ускорится в разы и сможет конкурировать с остальными предикторами. Над чем я собственно и занят в настоящее время на работе.

Спасибо за перевод интересной статьи. Продажа Magic Pony за 150 миллионов долларов показывает, что у нейросетей огромный потенциал в обработке изображений. В данном случае эксперимент интересен, но не является "чистым" — для чистого теста лучше было бы заставить нейронную сеть, например, динамически выбирать лучший из существующих в стандарте предикторов. Так как встраивание нового предиктора в PNG поломает совместимость со всеми существующими декодерами, но не докажет превосходство нейронных сетей. Сейчас в PNG используются тривиальные алгоритмы предсказания, а их заменили новым, нелинейным и зависящим от большого количества пикселов. Вероятно, что и не основанный на нейронной сети, но учитывающий большое количество информации детерминированный алгоритм тоже дал бы лучшие результаты.

Очень интересно. А вы не пробовали использовать несколько предсказателей? Например, по одному для каждой из битовых плоскостей или разложить изображение по масштабам в пирамиду и использовать свой предсказатель на каждом уровне.
Каков смысл раскладывать каналы на разные битовые плоскости? Это только усложнит процедуру сжатия, ровно как и увеличит время работы предикторов. То же самое касается использования двух предикторов.
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории