Дълбокото обучение е бъдещето: как да тренирате по различен начин и какви възможности ще имате

Все още имаме някои неща в подготовка на Google I/O. Един от тях е "новият" имиджев кодек за Web: WebP (Web - Picture, те не са си счупили главите с името). Казвам „ново“, защото вече е съществувало много преди, но не боли да му дадете рецензия.

форматите

Първото нещо е да разберем защо Google полага тези усилия. Имаме три основни кодека или формата: JPEG, PNG и GIF, датиращи съответно от 1991, 1996 и 1987 г. Много неща се промениха оттогава, но въпреки това тези кодеци все още работят. относно.

JPEG е най-използваният не само в Интернет, но и извън него. Най-голямото предимство, което има, е неговият капацитет за компресия, който може да достигне до 100: 1 (100KB изображение, съхранявано в 1KB файл). Но разбира се, тази мощна компресия има своите недостатъци: загуба на качество. По-късно ще видим защо това се случва, но съм сигурен, че артефактите, изкривяването на JPG са познати на всички нас.

Тогава имаме GIF формат. Форматът наистина е доста лош: въпреки че компресията е без загуби, имаме проблем и това е, че можем да представим само 256 цвята. За да ви даде представа, нормалният екран представлява милиони цветове. Резултатът е, че GIF не е с качествен формат и всъщност се използва само за прости лога и анимации (единственият, който ги позволява).

И накрая, има PNG. Това е формат без загуби, който поддържа прозрачност. Проблемът е, че не достига компресия толкова висока, колкото JPEG, така че се използва само с малки изображения и с малко цветове.

WebP обединява предимствата на PNG, GIF и JPEG в един формат.

В крайна сметка имаме три различни формата и всеки един превъзхожда в поле, в което останалите нямат какво да правят: JPEG за малки файлове, PNG за високо качество и прозрачност и GIF за анимации.

WebP има за цел да обедини всички тези предимства в един файл. Той има компресия със загуби за намаляване на размера на файла, без загуби за поддържане на качеството (и все още по-малки файлове от PNG), поддържа прозрачност и анимации. Крайният формат, хайде. Как го правят в Google?

Как работят кодеците за изображения?

За да разберем малко защо е необходима WebP, трябва да видим как работят кодеците за изображения. Забележете, че ще направя няколко опростявания, за да се разбере по-добре.

На първо място, нека запомним, че изображението не е нищо повече от поредица от точки или пиксели, където всяка позиция има количествата червено, зелено и синьо, които съставят цвета на пиксела.

Загубата на качествена компресия на изображението се основава на два принципа (най-важният, има много повече). Основното е, че човешкото око не е в състояние да различи много леки промени в цвета. И второто, че е по-кратко да се запази серия от точки като функция. Например, какво е по-кратко за запазване, петдесет точки от права или нейната функция (y = ax + b в случай, че някой не си спомня)?

Не можем да открием малките промени в цвета, така че защо да ги запазваме?

Изглежда, че казаното от мен не е свързано, но всъщност е така. Казахме, че изображението не е нищо повече от поредица от точки, така че можем да представим тези точки в графика и след това да изградим функция, която апроксимира тези точки.

Тази функция излиза с много много малки върхове. Почакайте, не казахме ли, че такива малки промени не се откриват от окото? Е, лесно ни е: нека се отървем от тези шипове. Нека "изравним" функцията. Това ще го направи по-кратък и ще го запазим по-лесно. Можете да видите диаграма на това, което се случва на следващото изображение.

В JPEG това (повече или по-малко) е това, което се нарича процес на квантуване. Въпросът е какво се случва, ако преминем към „изравняване“ на функцията? Че губим подробности. Цветовете са буквално по-плоски: губим контраст. Всеки пиксел прилича много повече на останалите и затова се появяват артефакти. Преувеличавам много, ето какво се случва в реалното изображение, ако преминем компресията:

Този метод е доста ефективен по отношение на степента на компресия на изображението. Лошото е това, което споменахме: то е необратимо. Губим качество и не можем да си го върнем.

За щастие има и други алгоритми за намаляване на размера на изображението без загуба на качество, които се основават на промяна в начина на изразяване на изображението, така че да може да бъде по-добре компресиран.

Как се компресира най-добре изображението (или който и да е файл)? Спестявайки ни многократните данни. Например, вместо да запазваме 20 нули в един ред, ние просто записваме две числа: 20 (броят на повторенията) и 0 (елементът, който се повтаря). Целта на алгоритмите за компресиране е да се намерят други начини за изразяване на изображението по такъв начин, че да има възможно най-много повтарящи се данни (техническото име е да се намали ентропията на информацията във файла).

Основната техника, която PNG и GIF кодеците използват за това, е следната. Взимаме пиксел. Правим прогноза какъв ще бъде този пиксел въз основа на хората около него. Например, ако един пиксел е заобиколен от червени пиксели, той също ще бъде червен; или ако е между червено и жълто, вероятно ще е оранжево.

Номерът е да се запази не стойността на пиксела, нито прогнозата, а доколко прогнозата се отклонява от действителния пиксел. Тъй като като цяло няма много резки промени в изображението, ще има много разлики, които са 0 или малки, така че ще имаме много повтарящи се данни. Освен това този процес е обратим, така че не губим качество.

Тъй като има няколко метода за предсказване на стойността на пиксел, кодерът избира този, който най-добре предсказва за всеки „блок“ на изображението (т.е. този, който прави най-точните прогнози и този, който оставя по-малки числа).

Как WebP подобрява съществуващите?

И след това „въведение“ можем да видим какво прави WebP, за да бъде по-добър от своите предшественици. Не забравяйте, че намалява теглото на файловете с приблизително 25% по отношение на PNG и JPEG, като същевременно запазва качеството (това също зависи от използвания енкодер).

Основното подобрение на WebP е да даде повече възможности за компресиране на изображението без загуба.

В сравнение с PNG, WebP го подобрява, като разполага с по-голям набор от филтри без загуби. Филтърът за прогнозиране има повече режими (всеки режим оценява съседните пиксели, към които искаме да изчислим теоретично неговата стойност по различен начин), което позволява по-добро прилягане и следователно данните могат да бъдат по-добре компресирани. Освен това има още два допълнителни филтъра: трансформация на цветовете и индексиране на цветовете.

Тези филтри могат да бъдат приложени едновременно върху изображение, така че форматът WebP предлага по-висока максимална компресия, използвайки техники, които PNG не позволява.

От друга страна, в сравнение с JPEG, WebP се откроява с възможността за добавяне на филтри без загуби, които току-що споменах. Вярно е, че JPEG има методи за компресиране без загуби, но те не са толкова ефективни като WebP (и те се използват по-рядко).

Друго предимство на WebP е, че включва подобрени методи за компресиране. Подобно на PNG, той използва DEFLATE, но също така добавя кеш от най-използваните цветове. В този смисъл той е най-напредналият от четирите формата.

И всичко това за какво?

Е, след като видяхме теорията, нека разгледаме практиката. Нека да изследваме изображенията, които Google има за пример, за да сравним това, което WebP предлага, на ниво качество.

В сравнение с PNG (пълна галерия), промяната е впечатляваща. Качеството на WebP е 90%, а изображението в PNG е около 4-5 пъти по-голямо от това на WebP. Различията в качеството едва ли се забелязват (вече съм оставил очите си и практически не съм видял нищо).

С JPEG (пълна галерия) нещата са малко по-различни. Досега няма голяма разлика, но ако продължим да увеличаваме, виждаме, че докато в WebP блоковете с изображения са по-забележими, в JPEG артефактите по краищата са много по-забележими.

Например, в изображенията на небето, ако се вгледате отблизо, WebP изостава малко, като му придава по-кариран модел. Липсата на артефакти по краищата на обектите обаче му дава много точки.

Имайте предвид, че при преоразмеряване на изображенията може да са въведени нови изкривявания (или корекции), така че най-доброто нещо, което трябва да направите, за да оцените напълно разликите, е да отидете в галериите, които свързвам към Opera или Chrome и да увеличите изображенията.

Заключения

Като се има предвид, че WebP е насочен към мрежата повече от всичко, че загубите на качество не са твърде големи и че намаляването на размера е значително, изглежда, че това е най-добрата алтернатива. Още повече, когато е този с най-много характеристики от трите формата (прозрачност, изображение със загуби и без загуби, анимации).

Проблемът е същият както винаги: съвместимост. Докато всички браузъри не го поддържат родно, WebP не е разумна алтернатива на други формати. И дори по това време приемането му ще бъде бавно: останалите програми за изображения (от Paint до Photoshop) ще трябва да го поддържат, за да могат потребителите да започнат да го използват.

Също така, това не е като SPDY: тази промяна не е прозрачна за потребителите. Това не е нещо между разработчиците на уеб и браузъри. В играта влизат много повече актьори, включително нормални потребители, които ще трябва да сменят чипа на „WebP за изображения в Интернет“. И освен това ще е необходимо да има приложения, които обработват някои изображения (не само специализирани, но и мобилни приложения в стил Instagram или всеки, който позволява запазване/качване на изображения), така че да имат WebP като формат по подразбиране.

Това, което Google се опитва да направи, е много похвално, но ще са необходими много години, за да се установи WebP като стандарт за изображения в Интернет.

Споделете как работят форматите на изображенията и как WebP ги подобрява