Поглиблене навчання - це майбутнє: як тренуватися по-іншому та які можливості у вас будуть

У нас все ще є деякі речі, які розробляються Google I/O. Одним з них є "новий" образний кодек для Інтернету: WebP (Web - Picture, вони не зламали голови з іменем). Я кажу "новий", оскільки він уже існував задовго до цього, але не завадить дати йому огляд.

формати

Перше, що потрібно зрозуміти, чому Google докладає цих зусиль. У нас є три основні кодеки або формати: JPEG, PNG та GIF, датовані 1991, 1996 та 1987 роками. З тих пір багато чого змінилося, але навіть так ці кодеки все ще працюють. про.

JPEG найчастіше використовується не тільки в Інтернеті, але й поза ним. Найбільша перевага, яку він має, - це його здатність до стиснення, яка може сягати 100: 1 (зображення розміром 100 КБ, що зберігається у файлі розміром 1 КБ). Але, звичайно, у цього потужного стиснення є свої недоліки: втрата якості. Пізніше ми побачимо, чому це трапляється, але я впевнений, що артефакти, спотворення 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 покращує їх