Человек с первого взгляда отличает кошку от человека, но компьютер получает таблицу, плотно заполненную числами от 0 до 255. Проследим, вплоть до одного пикселя, как фото становится матрицей, убедимся, почему пиксельное расстояние не измеряет «похожесть», и вручную вычислим свёртку, которая находит границы фильтром 3 × 3. В конце рассмотрим сильные стороны и пределы признаков, заданных человеком (рамка лица·ключевые точки·сила границ).
Острые уши и шерсть, гладкая кожа. Человек различает их с первого взгляда. В каком виде компьютер получает эти фото и с каких подсказок он может начать?
Красные линии на кошке слева — каркас мордочки, соединяющий лоб·глаза·нос; зелёная рамка на человеке справа — результат детекции «здесь есть лицо»; красные точки — ключевые точки по линии подбородка, бровям и контуру губ; розовые точки — главные положения глаз, носа и рта. Всё это подсказки, в которых человек заранее решил, «на что смотреть».
В этом выпуске мы разберём две вещи. Во-первых, компьютер получает не такие линии и точки, а матрицу чисел (разделы 2~3). Во-вторых, фильтры, которые находят в этих числах подсказки вроде границ, и пределы подсказок, заданных человеком (разделы 4~6).
Числовые примеры на протяжении всей серии разбираются на одном и том же фото чихуахуа (героини выпуска 4-4): пиксели и фильтры работают одинаково на любой фотографии. В практических заданиях можно выбрать любое из пяти фото: кошку, человека, собаку, чихуахуа и маффин.
Задача, простая для человека, не обязательно проста для компьютера. Человек в момент взгляда на фото замечает: «есть шерсть», «уши острые», а компьютер должен вычислить каждую такую подсказку из чисел. В паре кошка vs человек подсказки довольно отчётливы, поэтому это хорошее первое упражнение в классификации изображений.
Фото — это сетка чисел, а цветное фото — три такие сетки, наложенные друг на друга. Наименьшая единица, которую модель получает на вход, — одно значение канала (0~255).
Цифровое фото — это набор маленьких клеток, плотно нарезанных по горизонтали и вертикали. Одна такая клетка называется пикселем (pixel, picture element). В пикселе хранится только один цвет, и этот цвет записывается тремя интенсивностями света — красного (R)·зелёного (G)·синего (B). Интенсивность — целое число от 0 (нет света) до 255 (максимальная яркость). Поэтому цветное фото становится таблицей из высота × ширина × 3 чисел, то есть матрицей (точнее, трёхслойным тензором).
Проще говоряэто раскраска по клеточкам. Если для каждой клетки записать числом от 0 до 255, сколько капель из трёх баночек краски (красной·зелёной·синей) в неё добавлено, то по одной этой записке кто угодно сможет заново раскрасить ту же картинку. У компьютера есть не картинка, а эта записка.
Если продолжать дробить фото, мы дойдём до одной клетки-пикселя, чисел R·G·B в ней и восьми битов, из которых состоит одно число. Бит — наименьшая единица, которую хранит компьютер, но один бит — это не цвет и не яркость, а лишь «включено/выключено».
Поэтому в глубоком обучении на изображениях наименьшая информация, имеющая смысл, — одно значение канала, то есть число вроде «интенсивность красного в этой клетке — 39». Первый слой модели получает на вход именно эти числа (X[y, x, c]).
Но в одном таком числе нет никакого смысла «чихуахуа». Пиксель глаза (39, 37, 43) и пиксель черники (37, 31, 37) по числам почти одинаковы. Смысл возникает из того, как собраны вместе многие пиксели, а поиск таких сочетаний — это извлечение признаков из раздела 4.
Фото чихуахуа режется на 14 клеток по горизонтали и вертикали, выбирается одна клетка глаза и превращается в числа. Числа справа рассчитаны по реальным пикселям фото.
Выберите фото и разрешение, затем нажмите на клетку рисунка или наведите на неё мышь. В таблице сбоку (на мобильных — ниже) — реальные числа выбранной клетки и окружающих её 7 × 7 клеток. После нажатия на рисунок клетку можно перемещать клавишами со стрелками.
Q1. Сколько чисел содержится в цветном фото размером 10 клеток по горизонтали и 10 по вертикали?
Q2. Какой цвет у пикселя со значением (R, G, B) = (0, 0, 0)?
Q3. Если сдвинуть то же фото на две клетки вправо, что будет с числами на тех же местах?
Q4. Какова наименьшая информация, которую получает на вход модель глубокого обучения для изображений?
Пиксель — маленькая клетка, из которых состоит фото, и в каждой клетке записаны интенсивности красного·зелёного·синего света числами от 0 до 255. Если сравнить с таблицей из 4-1, одно фото — это одна строка из «высота × ширина × 3» столбцов. Нажимайте на клетки в пиксельной лупе, чтобы увидеть реальные числа, и меняйте разрешение, чтобы посмотреть, как меняется количество чисел.
Если измерять расстояние, вычитая числа на одних и тех же местах двух фото, можно ли измерить «похожесть»? Сдвинем или затемним одну и ту же чихуахуа и измерим все расстояния между пятью фото.
Пиксельное расстояние между двумя фото — это корень из среднего квадратов разностей чисел яркости (ч/б) на одних и тех же местах (0 означает полное совпадение). Попробуйте сдвинуть чихуахуа вбок или затемнить. Для человеческого глаза это всё та же чихуахуа, но по числам фото может оказаться дальше, чем маффин.
Мы измерили пиксельные расстояния между всеми пятью фото на этой странице. Чем меньше число, тем более «похожими» фото оказались по расчёту. Наименьшие значения выделены цветом.
Значения в этой таблице измерены на пяти фото этой страницы (вырезаны только лица и уменьшены до 56 × 56). С другими фото значения сильно меняются в зависимости от фона·освещения·композиции, но вывод «пиксельное расстояние не совпадает с расстоянием по смыслу» — хорошо известное свойство и для реальных фотографий.
Код 1 проводит тот же эксперимент на фото кошки (chelsea) и человека (astronaut) из scikit-image, у которых вырезаны лица и уменьшены до 56 × 56. При сдвиге той же кошки на 1 клетку расстояние выросло до 16.9, на 2 клетки — до 27.1, на 8 клеток — до 40.5, а расстояние между кошкой и человеком составило 85.3. Сдвига всего на несколько клеток достаточно, чтобы набрать почти половину расстояния до другого животного.
Пиксельное расстояние измеряет лишь то, «похожи ли числа на одних и тех же местах». Поэтому оно чувствительно к положению·яркости·композиции и не знает, что снято. Именно из-за этого ограничения нужны фильтры из раздела 4 и CNN из 4-3.
k-NN из 4-1 спрашивал «ближайших соседей». Чтобы сделать то же с фотографиями, расстояние между фото должно отражать смысл. Но по пиксельному расстоянию чихуахуа ближе к маффину, чем к другой собаке (золотистому ретриверу), а та же чихуахуа, сдвинутая всего на 4 клетки, оказывается дальше маффина. Значит, искать соседей для фото по расстоянию между пикселями как есть нельзя.
Таблица чисел 3 × 3 (фильтр) скользит по фото, числа перемножаются и складываются. Там, где фото похоже на узор, получаются большие числа, а собранный результат — это карта признаков.
Признак — это паттерн, который создают несколько пикселей вместе: «здесь было светло и вдруг стало темно (граница)», «круглое место темнее окружения (точка)», «тонкие линии идут густо (текстура шерсти)». CNN кладёт на фото маленькую таблицу чисел, например 3 × 3, — фильтр (ядро) — и, сдвигая её на одну клетку, перемножает совпадающие числа и всё складывает. Там, где фото похоже на узор фильтра, получается большое число, в остальных местах — маленькое, а новая матрица, собранная из этих результатов, — это карта признаков. Такое вычисление называется свёрткой.
Проще говоряэто игра в поиск узора штампом. Прикладываем штамп с узором «слева темно, справа светло» ко всем местам фото и записываем высокий балл там, где узор хорошо совпадает. Когда таблица баллов заполнена, сразу видно, где на фото вертикальные границы. Поменяйте штамп — поменяется и искомый узор.
Фильтр — это «узор, который хочется найти», записанный числами. Фильтр с −1 в левом столбце и +1 в правом выдаёт тем большее число, чем правая сторона светлее левой. Поэтому на вертикальной границе между глазом чихуахуа (темно) и шерстью (светло) получается большое значение вроде 302, а на ровном участке с одной шерстью — значение, близкое к 0.
Важно, что один и тот же фильтр повторно используется во всех местах фото. В одном фильтре всего 9 чисел, но он находит границы в любом месте фото. Уменьшается и проблема из раздела 3 — «сдвиг на одну клетку меняет все числа»: если фото сдвинется, карта признаков просто сдвинется вместе с ним, а факт наличия границы останется.
Первый слой настоящей CNN использует десятки таких фильтров. Каждый фильтр даёт свою карту признаков, поэтому на выходе получается толстая матрица «размер фото × число фильтров».
Прикладываем фильтр вертикальной границы клетка за клеткой к ч/б фрагменту 8 × 8 около глаза чихуахуа (вырезан из фото, уменьшенного до 28 × 28). Синие числа означают «справа светлее», оранжевые — «слева светлее».
Выберите фото и фильтр. Числа в клетках фильтра можно менять вручную. Светлые места на карте признаков справа — это места, «где узор найден». Если нажать на клетку карты признаков, ниже появится вычисление для этого места. Чтобы сохранить размер выхода 56 × 56, область за краями заполнена копией ближайшего краевого пикселя. Это не то же самое, что нулевой паддинг на схеме 3, поэтому значения в клетках рамки могут отличаться от варианта с нулевым паддингом.
Q1. Как в свёртке получается значение для одного положения фильтра?
Q2. Что получится, если применить фильтр вертикальной границы [−1 0 1]×3 к ровному фрагменту, где все клетки равны 10?
Q3. Каким станет размер карты признаков 56 × 56 после max-пулинга 2 × 2?
Q4. Кто задаёт числа фильтров в CNN?
Свёртка — это вычисление, которое повторяет взвешенную сумму перцептрона из 4-1 (w·x + b) для каждого маленького кусочка фотографии. 9 чисел фильтра — это веса, а поскольку один и тот же фильтр применяется во всех местах фотографии, глаз находится одним и тем же способом, где бы он ни был. В коде 2 мы проверим, что ручной расчёт совпадает с результатом scipy, и увидим: если сдвинуть рукописные цифры на 2 клетки, нейросеть, работающая прямо с пикселями, падает до 14.2%, а маленькая CNN удерживает 90.4%.
До глубокого обучения человек сам решал, «что измерять». Посмотрим на плюсы этого подхода и на его предел: стоит смениться фотографии — и решение переворачивается.
До глубокого обучения распознавание лиц строилось на признаках, заданных человеком. В 2001 году Виола и Джонс быстро вычисляли тысячи простых прямоугольных признаков (признаки Хаара), измеряющих разницу яркости вроде «область глаз темнее щёк», и так находили рамку лица на фотографии [R4]. Метод HOG 2005 года подсчитывал направления границ в каждой маленькой ячейке и находил силуэт человека [R5]. Ключевые точки лица, которые отмечают положение уголков глаз, кончика носа и линии подбородка, как красные точки на изображении из раздела 1, вычисляются уже внутри найденной таким образом рамки лица [R6].
Эти методы быстры и легко объяснимы, но человек должен заранее знать, что измерять, а ещё они плохо справлялись с освещением, ракурсом и заслонением. CNN преодолела этот предел, научившись фильтрам того же рода на данных [R7].
Изображение из раздела 1. Зелёная рамка — результат обнаружения «здесь есть лицо», красные точки — ключевые точки лица по линии подбородка, бровям и контуру губ, розовые точки — главные положения глаз, носа и рта. Красные линии у кошки — каркас морды, соединяющий лоб, глаза и нос.
Человек заранее решает, что измерять: «расстояние между глазами», «угол кончика уха».
Числа фильтра K сначала задаются случайно, а обучение исправляет их так, чтобы ответы становились верными.
Переключитесь на вид «Сила границы». Любопытно, что средняя сила границ по всей фотографии у обоих почти одинакова. Дело в том, что на фото человека тоже много тонких линий — длинные волосы. Разница в том, где находятся границы. У кошки фактура шерсти и полоски густо покрывают даже середину морды, а у человека щёки и лоб гладкие, и границы собираются у глаз, носа, рта и волос. Значение «центральная область» ниже показывает эту разницу. Вот почему нужно не одно среднее число, а карта по положениям — то есть карта признаков.
Признаки частей примерно на 3-м слое тоже чётко различаются. Острых треугольных ушей на макушке, полосок на лбу, маленького розового носа и длинных усов у человека нет. Красные линии и точки на изображении из раздела 1 — это способ, при котором человек сам задаёт такие подсказки, а CNN находит те же подсказки сама с помощью фильтров.
В таблице из раздела 3 пиксельное расстояние в оттенках серого между кошкой и человеком примерно такое же, как между кошкой и собакой. Для человека это самая лёгкая пара, но пиксельное расстояние этой разницы не показывает. Это ещё одно доказательство того, что пиксельное расстояние не знает смысла.
В парном сравнении выше на фотографиях этой страницы центральная граница была сильнее у кошки. Но если измерить в коде 1 на фотографиях кошки и человека из scikit-image, получается наоборот (сила границы в области лица: кошка 101.5, человек 123.6). Причина в том, что волосы и зубы в улыбке на фото человека дают сильные границы.
Единственный признак, заданный человеком, вроде «много границ — значит, кошка», легко переворачивается, стоит смениться фотографии. Поэтому нужен способ, который использует не один признак, а сочетание многих, и к тому же выучивает его на данных. Это тема 4-3.
Признаки, заданные человеком, позволяют легко объяснить, «почему принято такое решение», и работают даже на малых данных. Зато человек должен знать их заранее, и они легко ломаются, когда меняются условия съёмки. Переключите парное сравнение на вид «Сила границы» и сравните, где собираются границы у кошки и у человека.
Фильтры первого слоя ищут линии и границы. Если складывать слои, линии собираются в углы, углы — в глаза и уши, а глаза и уши — в лицо.
Если складывать слои, уменьшая фотографию пулингом, одна клетка дальнего слоя видит более широкую область исходной фотографии. Поэтому ранние слои ищут маленькие линии, следующие — глаза и уши как сочетания линий, а ещё более дальние — лицо целиком. Этот рисунок упрощённо передаёт тенденцию, которую Цайлер и Фергюс (2014) показали, визуализировав реакции слоёв обученной CNN.
Если складывать слои, уменьшая фотографию пулингом, одна клетка дальнего слоя видит более широкую область исходной фотографии. Поэтому ранние слои ищут маленькие линии, а дальние — сочетания этих линий [R8]. В 4-3 мы увидим, как CNN из таких слоёв выдаёт вероятности и почему после добавления слоёв разделяется то, что не делилось одной плоскостью.
Оба кода используют только библиотеки, предустановленные в Colab, и встроенные данные. Нажмите «Скачать ноутбук (.ipynb)» и откройте его в Colab через Файл → Загрузить блокнот или скопируйте код и вставьте в ячейку нового ноутбука.
Смотрим форму и значения пикселей фотографий кошки и человека из scikit-image, вычисляем оттенки серого, пиксельное расстояние и силу границы. Чтобы перейти на свои данные, прочитайте своё фото через io.imread и замените (верх, левый край, сторона) в small() на положение лица.
Вручную вычисляем свёртку с фильтром вертикальных границ 3 × 3, сверяем со scipy и сравниваем MLP и маленькую CNN на тестовых фото рукописных цифр, сдвинутых на 1–2 клетки.
Промпты для вставки в ИИ-ассистента вроде ChatGPT, Qwen или Claude. При нажатии «Копировать» выбранный код добавляется после промпта. Замените текст в 〔 〕 на описание своей ситуации.
Ответ ИИ — лишь отправная точка. Предложенные статьи, числа и функции библиотек обязательно проверяйте по первоисточникам и официальной документации. Если вы пользовались помощью ИИ в конкурсной работе или статье, укажите факт и объём использования по правилам организаторов или журнала.
Тот же словарь, что и у жёлтых пунктирных подчёркиваний в тексте. Во всей серии используются одни и те же термины. Нажмите на название раздела, чтобы перейти к месту первого упоминания.
Аналогия — первый шаг к пониманию, но и семя заблуждения. Для аналогий с глазом и мозгом человека указана степень соответствия. Прямое есть данные, что там действительно происходит то же самое · Частичное похожи лишь некоторые свойства · Нет соответствие неизвестно
| Понятие | Бытовая аналогия | Аналогия с глазом·мозгом | Где аналогия не работает |
|---|---|---|---|
| Пиксель | Одна плитка мозаики | Частично В сетчатке глаза тоже плотно расположены клетки, воспринимающие свет | Клетки сетчатки не лежат ровной решёткой: они сгущаются в центре (центральной ямке), а виды и доли цветовых клеток тоже различаются |
| Фильтр свёртки | Печать с вырезанным узором | Частично Простые клетки зрительной коры сильно реагируют на границы определённого направления | Способ обучения и связи клеток мозга гораздо сложнее. Фильтр CNN применяет одни и те же числа во всех местах, а мозг — нет |
| Карта признаков | Отметка X на карте сокровищ | Нет | Карта сокровищ одна, а в настоящем слое карт признаков столько, сколько фильтров, — слой за слоем |
| Пулинг | Выбор старосты класса | Нет | Старосту выбирают люди, а max-пулинг механически берёт клетку с наибольшим числом |
| Ключевые точки лица | Указатели на карте | Нет | Указатели ставит человек, а положение ключевых точек для каждой фотографии вычисляет обученная модель. Если часть лица закрыта, точка ставится не туда |
E-1 Об авторе · E-2 Научные источники · E-3 Источники иллюстраций·данных
Рекомендации для преподавателей, наставников OJT и репетиторов. Время указано ориентировочно — подстройте его под реальное занятие.
| Аудитория | Студенты и работающие специалисты, прошедшие 4-1. Практики, которые хотят понять, «как ИИ для изображений получает фотографию» |
|---|---|
| Необходимые знания | Признаки, целевые значения и взвешенная сумма из 4-1, умножение и сложение |
| Цели обучения | ① Вычислять форму цветной фотографии (H × W × 3) и количество чисел ② Вручную вычислять одну клетку свёртки 3 × 3 ③ Объяснять на примерах пределы пиксельного расстояния и признаков, заданных человеком |
| Ориентировочное время | Чтение 40–50 мин · демонстрация практики 25 мин · практика в Colab 25 мин (код 1 — 10 мин, код 2 — запуск 1 мин + разбор 14 мин) |
Введение 5 мин (раздел 1) → раздел 2, пиксельная лупа 15 мин → раздел 3, опыт со сдвигом 10 мин → раздел 4, ручной расчёт свёртки 15 мин → «Проверь себя» 5 мин.
Раздел 2: расчёт разрешения и количества чисел для рабочих фото (брак, сканы документов и т. п.) 20 мин → раздел 4: подбор фильтра для своих фото в лаборатории фильтров 25 мин → раздел 5: обсуждение пределов признаков, заданных человеком, 15 мин → запуск и разбор кода 2 30 мин.
Новичкам — только разделы 1·2·4. Слушателям среднего уровня — пересчитать формулу размера выхода из раздела 4 с паддингом и шагом (stride), а также предсказать, как изменится устойчивость к сдвигу, если в CNN из кода 2 заменить GlobalMaxPooling на Flatten.
| Раздел | Вопрос, на котором стоит остановиться | Совет по работе с интерактивом |
|---|---|---|
| 1 Задача | «По чему человек узнаёт, что это кошка?» | Подчеркнуть, что линии и точки — подсказки, заданные человеком |
| 2 Пиксели | «Что это за три числа в клетке глаза?» | В пиксельной лупе меняем разрешение 7 → 56 |
| 3 Пиксельное расстояние | «Почему одна и та же чихуахуа дальше, чем маффин?» | Сдвигаем ползунок сдвига на 4 клетки и больше |
| 4 Свёртка | «Что получится, если приложить фильтр вертикальных границ к ровному кусочку шерсти?» | Останавливаем анимацию на шаге «сложить всё» и сверяем вручную |
| 5 Признаки, заданные человеком | «Много границ — значит, кошка»: всегда ли это верно? | Смотрим вместе вид «Сила границы» в парном сравнении и результат кода 1 |
| 6 Дальние слои | «На каком слое находится фильтр, который ищет глаза?» | Разбираем рисунок слоёв слева направо |
| Заблуждение | Верное объяснение | Что показать |
|---|---|---|
| Фото — это файл с картинкой, а не числа | Для компьютера фото — это H × W × 3 чисел от 0 до 255 | Раздел 2, пиксельная лупа |
| Если пиксели похожи, снято одно и то же | Даже сдвиг на одну клетку сильно меняет расстояние. Пиксельное расстояние не знает смысла | Раздел 3, опыт со сдвигом |
| Свёртка — это сложная математика | Это лишь перемножение и сложение 9 наложенных пар. То же, что взвешенная сумма перцептрона | Числовой пример в разделе 4 |
| Фильтры проектирует человек | Фильтры в практике — примеры. CNN выучивает числа фильтров на данных | Раздел 4, «Проверь себя», Q4 |
| Признаки, заданные человеком, бесполезны | Их легко объяснить, и хватает малых данных. Но при смене условий они слабы | Раздел 5 и перевёрнутый результат кода 1 |
Цветная: 56 × 56 × 3 = 9,408 чисел, чёрно-белая: 56 × 56 = 3,136 чисел.
0.299×39 + 0.587×37 + 0.114×43 = 11.661 + 21.719 + 4.902 ≈ 38.3.
(174−92) + (137−38) + (176−55) = 82 + 99 + 121 = 302. Это сильная граница: справа светлее.
56 − 3 + 1 = 54, то есть 54 × 54. С паддингом 1 сохраняется 56 × 56.
Свёртка, которая применяет один и тот же фильтр во всех местах (находит тот же узор, даже если положение меняется), и глобальный max-пулинг, который отбрасывает положение и оставляет только самый сильный отклик.
В коде 1 прочитайте фото своего лица (или домашнего питомца), выведите форму и количество чисел и составьте таблицу пиксельных расстояний при сдвиге на 1, 2 и 4 клетки.
В CNN из кода 2 замените GlobalMaxPooling2D на Flatten, обучите заново и сообщите изменение точности на фото, сдвинутых на 1 и 2 клетки, по 3 сидам. Объясните причину, опираясь на пояснение из раздела 4.
| Начинающим | Таблицу расстояний из раздела 3 и раздел 6 можно пропустить. Главное — как следует выполнить практику разделов 2 и 4 |
|---|---|
| Углублённо | Пусть изучат признаки Хаара и HOG и попробуют собрать похожие фильтры в лаборатории фильтров из раздела 4. Найденные статьи проверять по оригиналам |
| Что изучать дальше | 3-3 Изображения и CNN · 4-3 Кошка vs собака (полная структура CNN) |
| Материалы для преподавателя | Критерии оценки для «Проверь себя» и примеры ответов к заданиям — на странице ответов для преподавателей (4-2) |
Вы дочитали выпуск «4-2 Кошка vs человек» до конца. Обитатели лаборатории подведут итоги — каждый по одной фразе.