Перед тобою одне фото з дошки оголошень про вживані телефони: два апарати лежать на столі, один частково накриває інший. Продавець виклав його, щоб показати товар. А тепер питання, з якого починається весь компʼютерний зір: що модель має віддати, подивившись на це фото?
Питання здається дивним — ну як що, відповідь. Але відповіді бувають різної форми, і саме форма ділить компʼютерний зір на задачі. «Телефон» — одне слово на все фото. Дві рамки з підписами — список. Картинка того самого розміру, де кожен піксель пофарбований за класом, — масив на 86 400 чисел. Два окремі обриси, по одному на кожен апарат. Або взагалі нове зображення, якого не існувало.
Вхід у всіх пʼяти випадках байт у байт однаковий. Виходи не мають між собою нічого спільного: одне слово, список, масив, набір масок, картинка. Це і є головна теза теми, і її варто прочитати двічі: задачі компʼютерного зору відрізняються не картинкою на вході, а формою відповіді на виході.
01 / ТезаВхід один, виходи різні
У попередній темі ми зʼясували, чим зображення є для компʼютера: масивом чисел розміром «висота × ширина × три канали кольору». Наше фото — це 240 рядків, 360 стовпців і три числа яскравості в кожній клітинці, разом 259 200 чисел. Це вхід. І він не змінюється від того, яку задачу ми поставимо.
У курсі машинного навчання тип задачі визначала цільова колонка: число в ній — регресія, мітка — класифікація, немає колонки взагалі — кластеризація. Ти дивився на таблицю, знаходив стовпчик із відповіддю й уже знав, що робити далі.
Із зображеннями цей фокус не спрацьовує. Цільової колонки немає — є фото й є задача, яку хтось поставив словами. Одне й те саме фото телефона може бути входом для пʼяти різних моделей, і кожна віддасть щось своє. Тому перше, що треба зробити, зустрівши задачу компʼютерного зору, — не обирати архітектуру, а спитати: якої форми має бути відповідь. Усе інше — модель, метрика, розмітка, бюджет — випливає з цього.
Ось ті самі пʼять відповідей на тому самому фото. Перемикай задачу й дивись не стільки на картинку, скільки на праву частину — там показано, що саме модель повертає як дані.
Інтерактив 1 · Одне фото, пʼять виходів
Ліворуч — фото товару з накладеною відповіддю моделі. Праворуч — та сама відповідь у вигляді структури даних: рядок, список, масив.
Зверни увагу на два числа з підпису. Класифікація повертає одне число, генерація — 259 200. Між ними лежать усі інші задачі, і чим правіше по цій шкалі, тим дорожче обходиться кожне розмічене зображення. До цього ми повернемось у розділі 8, і саме там ховається найпрактичніша частина теми.
02 / МіткаКласифікація: одна мітка на все
Класифікація зображень (image classification) — найпростіша постановка. Вхід: одне зображення. Вихід: одна мітка з наперед відомого списку класів. «На фото телефон», «на фото ноутбук», «на фото нічого з нашого каталогу».
Технічно модель віддає не мітку, а вектор чисел — по одному на клас. Якщо класів пʼять, вихід має пʼять чисел, які після нормування читаються як ймовірності й дають у сумі одиницю. Мітку отримують, узявши клас із найбільшим числом. Це та сама механіка, що й у логістичній регресії, тільки ознаки не виписані вручну, а витягнуті з пікселів самою моделлю.
Метрики теж ті самі, які ти вже знаєш: частка правильних відповідей, а коли класи незбалансовані — точність і повнота з їхнім компромісом. Нічого нового зображення сюди не приносять. Якщо модель має віддати не клас, а число — скажімо, оцінити ціну телефона за фото, — це регресія, і міряють її середньою абсолютною похибкою чи RMSE, знову ж таки без жодних змін.
Коли міток треба кілька
Одне фото цілком може заслуговувати на кілька міток одночасно: «телефон», «зарядка», «коробка», «є подряпини». Це багатоміткова класифікація (multi-label), і вона відрізняється від звичайної однією деталлю, яку часто плутають. У звичайній класифікації класи конкурують: більше ймовірності одному — менше решті, бо сума фіксована. У багатоміткові вони не конкурують: модель дає кожному класу власне число від нуля до одиниці, незалежно від інших, і кожне порівнюється зі своїм порогом. Фото може отримати чотири мітки або жодної.
Але й багатоміткова класифікація нічого не каже про де. Вона повідомляє, що на фото є телефон і є коробка, і мовчить про те, у якому кутку вони лежать і скільки їх. Наше фото з двома апаратами дістане ту саму мітку «телефон», що й фото з одним. Щойно замовнику потрібне слово «скільки» або слово «де», класифікації стає замало.
03 / РамкаДетекція: рамка й мітка
Детекція обʼєктів (object detection) відповідає одразу на обидва питання. Вихід — список: для кожного знайденого предмета чотири числа рамки, мітка класу й число впевненості. Рамка (bounding box) — це прямокутник зі сторонами, паралельними краям кадру, заданий координатами лівого верхнього й правого нижнього кутів.
Одна деталь ламає всю звичну схему оцінювання, і на неї варто зупинитись. Довжина відповіді заздалегідь невідома. У таблиці кожен рядок давав рівно одну відповідь, і порівняти прогноз із правдою було легко: збіглось або ні. Тут модель може повернути нуль рамок, дві, а може сімнадцять — з яких дві правильні, пʼять зайвих і десять майже правильних, зсунутих на кілька пікселів.
Тому питання «яка частка правильних відповідей» тут просто не має сенсу: щоб порахувати цю частку, треба спершу вирішити, яка прогнозована рамка якій розміченій відповідає. А для цього потрібна міра збігу двох прямокутників.
IoU: наскільки дві рамки — це та сама рамка
Міра зветься IoU (intersection over union, українською — «перетин, поділений на обʼєднання»). Ідея геометрична й не потребує жодної математики, складнішої за площу прямокутника.
Поклади дві рамки одна на одну. Частина площі належить обом — це перетин. Уся площа, яку разом накривають обидві рамки, — це обʼєднання. IoU — це перше, поділене на друге.
Якщо рамки збігаються ідеально, перетин дорівнює обʼєднанню, і IoU дорівнює одиниці. Якщо вони не торкаються, перетин нульовий, і IoU дорівнює нулю. Усе між нулем і одиницею — проміжні випадки. Порахуймо один із них руками на числах із нашого фото.
Розмітник обвів другий телефон прямокутником від точки (124, 61) до точки (217, 192). Ширина: 217 − 124 = 93 пікселі. Висота: 192 − 61 = 131 піксель. Площа: 93 × 131 = 12 183 пікселі.
Модель видала рамку такого самого розміру, але зсунуту на 24 пікселі праворуч і на 20 вниз: від (148, 81) до (241, 212). Її площа теж 12 183.
Перетин двох прямокутників — теж прямокутник. Його ліва межа — більша з двох лівих (148), права — менша з двох правих (217). Так само по вертикалі: верхня межа 81, нижня 192.
Площа перетину: 69 × 111 = 7 659 пікселів.
Якщо просто скласти дві площі, спільна частина потрапить у суму двічі. Тому її треба відняти один раз:
7 659 ÷ 16 707 = 0.4584. Рамка накриває більшу частину телефона й на око виглядає майже правильною — а до звичного порога 0.5 не дотягує.
Цей поріг — угода, а не закон природи. Історично прижилось значення 0.5: рамку зараховують як влучну, якщо IoU з розміченою не менший за нього. Що воно означає на око? Для двох рамок однакового розміру арифметика дає точну відповідь: IoU 0.5 досягається, коли вони перекриваються рівно на дві третини своєї площі. Тобто «половина» в назві порога зовсім не означає «половина рамки збіглась» — вимога помітно суворіша. У нашому прикладі перекриття становить 7 659 із 12 183, тобто 63%, — і цього вже не вистачило.
Інтерактив 2 · IoU наочно
Бірюзова рамка — розмітка, вона нерухома. Рожеву рамку моделі можна зсувати й міняти їй розмір. Заштрихована ділянка — перетин двох рамок.
Звідки береться mAP
Маючи IoU, оцінювання будується так. Беруть поріг (нехай 0.5) і зіставляють рамки моделі з розміченими. Прогнозована рамка, для якої знайшлась розмічена з IoU не меншим за поріг, — влучна. Зайва рамка, якій нічого не відповідає, — хибне спрацювання. Розмічений предмет, який модель проґавила, — пропуск. Це рівно ті самі три категорії, з яких складаються точність і повнота.
Далі є тонкість. Кожна рамка має ще й число впевненості, і чим нижчий поріг впевненості, тим більше рамок модель віддає: повнота росте, точність падає. Одного числа тут замало — потрібна крива. Площу під цією кривою для одного класу називають AP (average precision), а середнє AP по всіх класах — mAP (mean average precision). Часто рахують ще й середнє по кількох порогах IoU одразу, від 0.5 до 0.95, — тоді модель, яка ставить рамки акуратніше, отримує вищу оцінку, навіть якщо знаходить ті самі предмети. Розбирати mAP по кроках тут не будемо: цим займається блок 4, цілком присвячений детекції. Зараз важливо інше — запамʼятати, що детекція міряється не часткою правильних відповідей, і зрозуміти, чому саме.
04 / ПікселіСемантична сегментація
Семантична сегментація (semantic segmentation) робить крок, який спершу виглядає як «те саме, тільки точніше», а насправді змінює саму постановку. Модель призначає мітку класу кожному пікселю зображення. Вихід — масив тієї самої висоти й ширини, що й фото, де на місці кожного пікселя стоїть номер класу: 0 — стіл, 1 — телефон.
Різниця з детекцією не в акуратності, а в питанні, на яке дається відповідь. Детекція каже: «отут приблизно лежить телефон». Сегментація каже: «оці конкретні пікселі — телефон, а оці — не телефон». І це справді різні відомості, у чому легко переконатись на числах.
Схема 1 · Що всередині рамки і що всередині маски
Той самий телефон, дві форми відповіді. Ліворуч — прямокутна рамка, праворуч — піксельна маска. Заштриховане — те, що потрапило у відповідь помилково.
Коли ця різниця дорого коштує? Щоразу, коли важлива форма або площа. Порахувати, яку частку екрана займає тріщина. Вирізати товар із фону, щоб поставити на білий фон каталогу. Обвести пухлину на знімку. Порахувати гектари поля на супутниковому знімку. У всіх цих задачах прямокутник відповіді не дає в принципі — не тому, що він неточний, а тому, що він відповідає на інше питання.
Метрика та сама, обʼєкт інший
Головна метрика сегментації — знову IoU, тільки тепер площі рахують не за формулою прямокутника, а лічильником пікселів. Перетин — скільки пікселів обидві маски назвали телефоном. Обʼєднання — скільки пікселів хоч одна з масок назвала телефоном. Ділимо перше на друге. У сегментації цю величину часто називають індексом Жаккара, але це те саме число.
Числа з нашого фото: якщо взяти справжню маску телефона й зсунути її на 8 пікселів праворуч і 6 вниз, перетин дасть 6 495 пікселів, обʼєднання — 9 111, а IoU буде 0.7129. IoU прямокутних рамок для тих самих двох масок — 0.7732. Маскова оцінка суворіша: рамка прощає похибку по кутах, маска — ні.
Коли класів більше двох, IoU рахують окремо для кожного класу й усереднюють — виходить mIoU (mean IoU). Поруч часто зустрічається коефіцієнт Дайса: він рахує подвоєний перетин, поділений на суму площ, і завжди трохи більший за IoU для того самого випадку. Обидва вимірюють одне й те саме, просто по-різному карають за помилку.
05 / ПредметиInstance: полічити предмети
У семантичної сегментації є межа, і вона видна саме на нашому фото. Маска каже про кожен піксель, до якого класу він належить. Вона нічого не каже про те, до якого предмета. Два телефони, що торкаються один одного, дають одну суцільну область класу «телефон» — і з цієї маски неможливо дізнатись, що апаратів було два.
Instance segmentation (сегментація екземплярів) прибирає саме це обмеження. Її вихід — не одна маска на клас, а список масок: окрема маска на кожен окремий предмет, з міткою класу для кожної. Два телефони — дві маски, навіть якщо вони злиплись в одну пляму.
Спокуслива думка, яка спадає першою: та ну, візьмімо семантичну маску й порахуємо в ній звʼязні плями — скільки плям, стільки й предметів. Цей прийом справді працює, поки предмети не торкаються. Перевір це сам.
Інтерактив 3 · Семантична проти instance
Повзунок розсуває телефони. Перемикач міняє те, що віддає модель. Кількість звʼязних областей рахується просто по маскі, як це зробив би найпростіший алгоритм.
Прийом із лічильником плям ламається у двох напрямках одразу. Предмети, що торкаються, він зливає в один — це ти щойно бачив. А один предмет, перекритий чимось посередині — скажімо, телефон, через який лежить провід зарядки, — він, навпаки, порахує як два. У задачах, де рахують штуки (скільки телефонів у партії, скільки клітин у полі зору мікроскопа, скільки людей у черзі), обидві помилки трапляються постійно.
Технічно instance segmentation найчастіше будують як детекцію з добудовою: спершу знаходять рамки, потім усередині кожної рамки передбачають маску. Тому в неї є те, чого немає в семантичної, — число впевненості для кожного предмета, а отже, і метрики звідти ж таки, з детекції: те саме mAP, тільки IoU рахують по масках, а не по рамках.
06 / РазомPanoptic: усе разом
Лишилась дірка. Семантична сегментація добре описує те, що не рахується поштучно: стіл, небо, дорогу, траву. Instance добре описує те, що рахується: телефони, людей, машини. Англійською ці дві категорії так і називають — stuff (матерія) і things (речі). Реальне фото містить і те, і те.
Panoptic segmentation — це просто обʼєднання двох попередніх задач в одну відповідь. Кожен піксель зображення отримує пару чисел: клас і номер предмета. Для пікселів столу номер предмета порожній — стіл не рахують поштучно. Для пікселів першого телефона номер 1, другого — 2. Жоден піксель не лишається без відповіді, і жоден не отримує двох відповідей одразу.
Практичне значення просте: якщо задача звучить як «опиши мені все, що на кадрі, повністю й без дірок» — це panoptic. Так ставлять задачу для автономного водіння, де треба знати і де саме дорога, і скільки на ній машин. Детально ця постановка розбирається у блоці 5.
| задача | вихід | метрика | що коштує розмітка |
|---|---|---|---|
| класифікація | одна мітка на все фото | частка правильних, точність і повнота | секунди на фото |
| багатоміткова | кілька незалежних міток | точність і повнота по кожній мітці | секунди на фото |
| детекція | список рамок із мітками | mAP на порозі IoU | десятки секунд на предмет |
| семантична | масив H × W із номерами класів | IoU і mIoU по класах | хвилини на предмет |
| instance | список масок, по одній на предмет | mAP, де IoU рахують по масках | хвилини на предмет |
| panoptic | клас і номер предмета кожному пікселю | PQ (panoptic quality) | десятки хвилин на кадр |
| генерація | нове зображення H × W × 3 | окрема історія: FID, оцінка людьми | розмітки в звичному сенсі немає |
07 / РештаРешта карти
Пʼять задач із першого розділу — кістяк, але не вся карта. Ось іще пʼять постановок, які трапляються постійно. Кожна знову ж таки визначається формою свого виходу.
Ключові точки (keypoints). Вихід — список координат наперед відомих точок: суглоби людини, кути обличчя, кути документа. Не рамка й не маска, а саме набір пронумерованих точок, де номер має сенс: точка 3 — це завжди праве плече. Звідси оцінка пози, фільтри в камері й вирівнювання сфотографованого документа. На нашому фото ключовими точками були б чотири кути телефона — саме за ними його розвертають у прямокутник перед тим, як розпізнавати текст на екрані.
Трекінг у відео (tracking). Вхід — не одне зображення, а послідовність кадрів. Вихід — рамки з номерами, які зберігаються між кадрами: телефон, що був номером 7 на першому кадрі, лишається номером 7 і на сотому. Задача звучить як детекція, але має власну складність: предмет зникає за перешкодою й зʼявляється знову, і треба зрозуміти, що це той самий предмет, а не новий. Звідси підрахунок відвідувачів, аналітика матчів, контроль конвеєра.
Оцінка глибини (depth estimation). Вихід — масив тієї самої форми, що й фото, але в кожній клітинці не клас, а число: наскільки далеко ця точка від камери. Формою відповіді це сегментація, тільки замість міток — відстані, тобто регресія на кожному пікселі. Використовується в робототехніці, доповненій реальності й у тому самому розмитті фону на портретному фото.
Розпізнавання тексту (OCR). Задача складається з двох: спершу знайти, де на зображенні текст (детекція), потім прочитати, що там написано (перетворення картинки в рядок). Вихід — рамки плюс рядки. Саме так із фото телефона дістають IMEI, з фото документа — номер і дату, а з фото цінника — ціну.
Генерація зображень. Вихід — нове зображення, якого не існувало: масив H × W × 3. Сюди ж належать задачі, де на вхід іде зіпсоване фото, а на вихід — полагоджене: прибрати шум, збільшити роздільність, домалювати вирізаний шматок, поставити товар на білий фон. Головна незручність — оцінювати такий вихід нічим із того, що ми бачили: «правильної» відповіді не існує, тож або міряють статистичну схожість на справжні фото, або питають людей.
Схема 2 · Пʼять постановок поза основною пʼятіркою
Той самий домен — фото товару з дошки оголошень. Для кожної задачі показано, що саме модель віддає.
08 / ГрошіСкільки коштує розмітка
Тепер розділ, який у переліках задач зазвичай пропускають, а на реальному проєкті він вирішує більше, ніж вибір архітектури. Кожна з цих задач потребує розмічених даних, і розмітка різних типів коштує принципово різного часу.
Поставити одну мітку на фото — це подивитись і клацнути. Обвести рамку — це два точні кліки по кутах, а потім ще підправити. Обвести маску — це вести полігон по контуру предмета, ставлячи десятки точок, і тим довше, чим складніший контур. Різниця не у відсотках, а в порядках.
| тип розмітки | час на один обʼєкт | у скільки разів довше за мітку |
|---|---|---|
| мітка на все зображення | 1–5 с | ×1 |
| кілька міток на зображення | 5–15 с | ×3 |
| рамка навколо предмета | 7–30 с | ×10 |
| ключові точки, 17 точок | 30–60 с | ×15 |
| полігональна маска предмета | 2–10 хв | ×120 |
| повна маска складної сцени | 30–90 хв | ×1000 |
Порахуймо на нашому прикладі. Хай треба розмітити сто фото, на кожному по два телефони, і візьмімо середні значення: 3 секунди на мітку, 15 секунд на рамку, 3 хвилини на маску.
100 фото × 3 с = 300 секунд, тобто 5 хвилин. Один розмітник справляється між справами.
100 фото × 2 предмети × 15 с = 3 000 секунд, тобто 50 хвилин. Один вечір.
100 фото × 2 предмети × 180 с = 36 000 секунд, тобто 10 годин. Повний робочий тиждень, якщо розмічати не весь день.
Схема 3 · Ціна розмітки в порядках величини
Шкала логарифмічна: кожна поділка — це час у десять разів більший за попередню. На лінійній шкалі перші три стовпчики просто злилися б із нулем.
Ось чому вибір постановки — це майже завжди рішення про дані, а не про модель. Модель із рамками, навчена на 5 000 зображень, майже напевно виявиться кориснішою за модель із масками, навчену на 200, — просто тому, що друга не бачила достатньо різних телефонів, столів і освітлень. А якщо потрібна саме площа дефекту, то жодна кількість рамок цього не замінить, і доведеться платити за маски. Обидва висновки правильні; вирішує те, яке питання ставить замовник.
09 / ВибірЯк обрати постановку
Схема нижче — робочий порядок дій. Читати її треба зліва направо: спершу питання, на яке треба відповісти, потім задача, потім те, за що доведеться заплатити розміткою.
Схема 4 · Від питання замовника до типу розмітки
Три колонки: що саме треба знати, яка це задача, що доведеться розмітити. Знизу — правило, яке вирішує спірні випадки.
Найпоширеніша помилка новачка звучить так: «візьмімо одразу сегментацію, вона найдетальніша, з неї потім усе можна дістати». Логіка виглядає бездоганно й помилкова відразу в трьох місцях.
Перше. Детальніша відповідь потребує детальнішої розмітки — у сто разів дорожчої, як ми щойно порахували. За той самий бюджет ти отримаєш у сто разів менше навчальних прикладів, і модель вийде гіршою навіть на своїй власній задачі.
Друге. «Потім усе можна дістати» — неправда для головного випадку. Семантична маска не дає кількості предметів: два телефони, що торкаються, ти з неї не розділиш, і це не питання якості моделі, а властивість формату відповіді. Інтерактив вище показує саме це.
Третє. Складніша постановка складніше й живе. Її важче оцінювати (один поріг перетворюється на криву), важче налагоджувати, вона повільніша при роботі, і помилок у розмітці в неї на порядок більше — бо ручне обведення контуру просто фізично неточне, і два розмітники обведуть той самий телефон трохи по-різному.
10 / ДаліКуди далі
Тепер, зустрівши в описі вакансії чи в статті слова «детекція», «сегментація» чи «ключові точки», ти читаєш їх не як набір синонімів для «розпізнавання», а як конкретні формати відповіді: список рамок, масив міток на кожен піксель, список координат. І одразу бачиш, що за кожним із них стоїть — своя метрика, своя ціна розмітки й своє коло питань, на які він узагалі здатен відповісти.
Далі курс іде вглиб. У темі 03 ми беремо в руки OpenCV — бібліотеку, якою всі ці зображення читають, перетворюють і показують: змінити розмір, вирізати шматок, перевести в градації сірого, намалювати ту саму рамку поверх фото. Тема 04 розбирає згортку — операцію, з якої зроблені всі сучасні моделі зору. А постановки з цієї карти розкриваються поблоково далі: детекція — у блоці 4, сегментація — у блоці 5, відео й трекінг — у блоці 6, генерація — у блоці 8. Карта в тебе тепер є; лишається пройти кожну дорогу.
practice.ipynb ти згенеруєш ту
саму сцену з двома телефонами на NumPy, власноруч зробиш для неї розмітку всіх пʼяти
типів і подивишся, скільки місця займає кожна; порахуєш IoU двох рамок руками й звіриш із
формулою через assert; порахуєш IoU масок; побачиш різницю семантичної та
instance-розмітки числом — через cv2.connectedComponents; і наприкінці
оціниш, скільки часу зайняла б розмітка сотні таких зображень кожним із трьох способів.
Далі в темі
Теорію прочитано. Тепер закріпи її на практиці.