7.1. Що таке нейронна мережа¶
Нейронна мережа — це алгоритм, поведінка якого вивчається на прикладах, а не прописується вручну. Одна й та сама архітектура мережі, отримавши мільйон знімків облич, навчається розпізнавати обличчя. Та сама архітектура, отримавши мільйон знімків рук, навчається розпізнавати руки. Та сама архітектура, отримавши помічений набір даних, що охоплює багато категорій об’єктів, навчається розпізнавати їх усі одночасно. Між цільовими задачами змінюються лише ваги, а ваги формуються зовнішнім процесом навчання, який зіставляє прогнози мережі з поміченими прикладами та коригує ваги до їх збігу.
7.1.1. Механізм роботи¶
Нейронна мережа — це стек шарів. Кожен шар множить вихід попереднього шару на матрицю ваг, додає вектор зміщення та застосовує нелінійну функцію до результату. Вихід одного шару є входом наступного. Знятий кадр надходить до вершини стека, проходить через десятки або сотні шарів і виходить знизу як тензор, елементи якого описують вміст зображення.
Те, що роблять ваги кожного шару, залежить від того, на чому навчалася мережа. Матриця ваг раннього шару мережі технічного зору може реагувати на коротку горизонтальну межу; трохи глибший шар — на кут; ще глибший — на форму кола ока; найглибші шари — на загальне розташування обличчя. Нічого з цього не було написано вручну. Процес навчання ітерував по мільйонах помічених прикладів, поступово коригував ваги вниз по функції втрат, і ієрархія «межа — кут — очей — обличчя» виникла із самих даних.
Невелика мережа класифікації як стек шарів. Вхідний тензор надходить зверху з формою захопленого зображення і проходить крізь шари, кожен з яких перетворює розміри тензора. Вихідний тензор знизу містить по одному елементу на клас. Мережі виявлення та ключових точок мають ту саму форму стека шарів; змінюється лише інтерпретація вихідного тензора.¶
Архітектура мережі — спосіб організації шарів та операції між ними — визначає, що мережа може робити. Ваги — це те, чого мережа навчилася. Завдання камери полягає в тому, щоб завантажити файл ваг, отриманий у процесі навчання, і виконати ту саму арифметику, що й тренувальний процес, але на захопленому кадрі замість тренувального набору.
7.1.2. Що подається на вхід і що виходить¶
Обидва кінці мережі — це тензори — багатовимірні масиви чисел, той самий тип об’єктів, що й у розділі numpy. Вхідний тензор мережі технічного зору — це захоплене зображення, перетворене у компонування, якого очікує мережа: як правило, 4-вимірна форма (B, H, W, C), де B — розмірність пакету (завжди 1 на камері, оскільки кадри обробляються по одному), H і W — очікувана висота і ширина зображення в пікселях, а C — кількість каналів (3 для RGB-мережі, 1 для відтінків сірого).
Вихідний тензор залежить від призначення мережі:
Мережа класифікації видає одновимірний тензор оцінок впевненості, по одній на клас. Індекс найбільшої оцінки є передбаченим класом. Детектор осіб на основі MobileNet, що входить до комплекту поставки більшості камер, має саме таку форму: дві оцінки — одна для «person», одна для «not person».
Мережа виявлення видає двовимірний тензор, елементи якого описують список обмежувальних прямокутників та ймовірності класів. YOLOv8 має таку форму: тензор
(84, N), де 4 з 84 рядків є значеннями регресії прямокутника, а інші 80 — ймовірностями по класах, повторюваними дляNякірних позицій.Мережа ключових точок видає тензор, елементи якого є пікселями координат названих орієнтирів. Модель ключових точок обличчя MediaPipe має таку форму: 468 ключових точок на кожне виявлене обличчя.
Мережа сегментації видає двовимірний тензор, елементи якого є мітками класів для кожного пікселя — ті самі розміри, що й вхідні дані, з індексом категорії в кожній позиції.
Мережа регресії видає одне число або короткий вектор чисел — оцінку глибини, кут, температуру.
Для кожної форми на камері є власний постпроцесор, який перетворює вихідний тензор назад у форму результату, яку використовує решта програми — обмежувальні прямокутники, списки ключових точок, мітки класів, числові оцінки. Постпроцесор — це код на стороні застосунку, що знає компонування виходу мережі; сама мережа — це лише арифметика, що видає тензор.
7.1.3. Чому це працює на камері¶
Два елементи арифметики роблять це практичним для мікроконтролерного класу пристроїв. Перший — квантування. Навчання відбувається в 32-бітній арифметиці з плаваючою комою; інференс може працювати в 8-бітній цілочисельній арифметиці майже без втрат точності для більшості мереж. 8-бітові ваги займають чверть пам’яті та працюють у кілька разів швидше, ніж 32-бітові числа з плаваючою комою. Кожна модель, що постачається з камерою, вже квантована зовні.
Другий — апаратне прискорення. Ту саму арифметику, через яку CPU мікроконтролера проходить по одній інструкції за раз, прискорювач нейронної мережі виконує одночасно для сотень операцій. Нові камери (AE3 і N6) мають виділений нейронний процесор (NPU) — тензорний прискорювач на SoC — що перетворює модель, виконання якої на CPU зайняло б секунду, на модель, що виконується за десятки мілісекунд. Розділ про рушії інференсу описує, як виглядає ця частина на камері.
7.1.4. Що охоплює цей розділ¶
Навчання — не завдання камери. Натренована модель потрапляє на камеру у вигляді файлу .tflite; камера завантажує її, пропускає кожен захоплений кадр через неї та декодує отриманий тензор у результат, з яким може працювати застосунок. Усе наступне присвячено кожному з цих кроків:
завантаження та огляд моделі;
флеш-розділ, де зберігаються файли моделей;
чотири етапи виклику інференсу;
рушії, що фактично виконують арифметику;
та постпроцесори, що перетворюють вихідний тензор назад у список прямокутників, ключових точок або класів.
Детектори в розділі про зображення були налаштовані на конкретну ціль. Ті, що описуються далі в цьому розділі, навчаються на даних, а один і той самий рушій запускає будь-яку модель, яку завантажує скрипт. Зміна в робочому процесі, що виникла разом із ними — алгоритм для конкретної цілі, замінений файлом ваг для конкретної цілі, — це наступне, що слід розглянути.