Чому просте порівняння зображень не працює
Модуль 1Урок 1 з 36Безкоштовний модуль
Уявіть, що ви хочете, щоб компʼютер сказав, чи на двох фото зображена одна й та сама кішка. Найнаївніша ідея — порівняти зображення піксель за пікселем: якщо кожен піксель збігається, це «та сама» картинка. Так працюють прості програми перевірки дублікатів файлів, але для реального світу цей підхід швидко ламається.
Що змінюється між двома фото
Та сама кішка на іншому фото може бути трохи лівіше, повернута набік, освітлена яскравішим світлом або знята іншою камерою. Пікселі вже не збігаються один до одного, хоча для людини це очевидно та сама тварина. Додайте тінь від меблів, стиснення JPEG, невеликий blur — і «ідентичність по пікселях» майже завжди каже «ні», навіть коли зміст той самий.
Приклад
Додаток «знайди дублікат фото» порівнює два знімки кухні: на одному вікно відкрите, на другому — ні. Піксельне порівняння дає низьку схожість, хоча це один і той самий кут кімнати. Якщо так будувати пошук обʼєктів або перевірку особи на проході, система постійно помилятиметься через дрібні зміни сцени, а не через зміну суті.
Інша проблема — масштаб. Кішка може займати половину кадру або маленький шматок у куті. Піксельна сітка інша: координати не співпадають, навіть якщо обʼєкт один. Поворот на десять градусів знову перетасовує значення кольорів по всіх комірках. Тому інженери давно відмовилися від ідеї «запамʼятати картинку як масив чисел і шукати точну копію». Потрібен спосіб порівнювати зміст, а не сирий масив пікселів.
Чому це важливо для машинного навчання
Більшість практичних задач — розпізнати літеру в різних шрифтах, знайти дефект на конвеєрі, відрізнити спам від листа — потребують стійкості до варіантів. Якщо алгоритм привʼязаний до точного збігу, він не узагальнює: новий ракурс або шум у мікрофоні знову «ламають» правило. Саме тут зʼявляється мотивація для машинного навчання: навчити систему виділяти ознаки, які залишаються корисними, коли поверхня даних змінюється.
Увага
Не плутайте «однакові файли» і «однаковий зміст». Контрольна сума файлу корисна для архівів, але не відповідає на питання «чи це та сама людина на двох знімках через пʼять років». Для змісту потрібні інші представлення даних і інші методи порівняння — про них підемо далі в курсі.
import numpy as np
a = np.array([[255, 0], [0, 255]])
b = np.array([[250, 5], [3, 252]])
dist = np.linalg.norm(a.ravel() - b.ravel())
exact = np.array_equal(a, b)
print("pixel-perfect match:", exact)
print("euclidean distance:", round(dist, 2))Натисніть «Запустити» — вивід зʼявиться тут
Підказка
Змініть значення в b — коли distance стає нулем?
Вправа
PythonНапишіть функцію compare_lists(list_a, list_b), яка повертає True, якщо списки однакової довжини збігаються елемент за елементом, інакше False.
def compare_lists(list_a, list_b):
pass
Тести
Ще не перевірялиПідсумок простий: світ подає нескінченну кількість варіантів одного й того самого явища. Піксель-в-піксель — це жорстке правило без запасу міцності. Наступний урок покаже, як люди обходять цю проблему без калькулятора на кожен піксель — і чому цей досвід ліг в основу сучасних моделей.
Що запамʼятати
Порівняння «піксель у піксель» ламається від освітлення, ракурсу, масштабу й стиснення — змінюються числа, а не зміст. Контрольна сума файлу перевіряє цілісність байтів, але не відповідає на питання «чи це той самий обʼєкт». Практичні задачі потребують узагальнення: порівнювати стабільні ознаки, а не точного збігу масиву пікселів.
Перевірка
4 питанняКілька питань за матеріалом уроку. Спроб — скільки завгодно.