Глаз не узнаёт лицо одним махом. Сперва зрение находит самое простое — границы, штрихи, наклоны, — и лишь потом складывает из них части, а из частей предмет. Тот же приём — маленький детектор, скользящий по всему полю, — лежит и в основе зрительной коры мозга, и в основе свёрточных сетей, которые сегодня видят за нас.

Зрение начинается с краёв

В первом разговоре о нейроне мы видели, что искусственный нейрон — это детектор: он загорается, когда на входе нужный образ. Но как приложить эту идею к картинке в миллион пикселей? Один нейрон, глядящий разом на всё изображение, был бы безнадёжно перегружен: ему пришлось бы выучить облик предмета сразу во всех положениях, размерах и поворотах.

Природа выбрала другой путь. Ранние зрительные нейроны не пытаются узнать предмет целиком. Каждый смотрит в крошечное окошко поля зрения и отвечает на простейший местный признак — например, на границу света и тени под определённым углом. Из этих скромных сигналов и вырастает всё зрение.

У такого разделения труда есть глубокий смысл. Признак «граница под углом 3030 градусов» встречается в изображении повсюду — на краю стола, на контуре лица, на буквах. Разумно завести один детектор этого признака и применять его во всех точках, а не учить заново для каждого места. Так задача распознавания дробится на два уровня: сначала — из чего сложена картинка (края, штрихи, пятна), потом — что из этого собирается (глаз, цифра, знак). Первый уровень одинаков почти для любых изображений, и его стоит устроить раз и навсегда.

Рецептивное поле

Участок поля зрения, на который откликается один нейрон, называют его рецептивным полем. Оно мало: нейрон буквально не видит ничего за пределами своего окошка. Зато таких нейронов множество, и их окошки покрывают всё изображение внахлёст.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Три панели: слева фотография с выделенным красным окном рецептивного поля; в центре ядро-детектор края три на три с весами минус один ноль плюс один; справа карта откликов, где то же окно отмечено зелёным и попадает на яркий край
Рис. 27.1. Рецептивное поле и скользящий детектор

Слева — фотография с выделенным окном рецептивного поля. В центре — детектор края: маленькая таблица весов. Приложив её к окну, нейрон считает один отклик. Сдвигая окно по всему полю, получаем карту откликов справа: ярко там, где под окном оказалась граница.

Опыт Хьюбела и Визела

Что именно ищет ранний зрительный нейрон, выяснили в конце 19501950-х Дэвид Хьюбел и Торстен Визел. Вводя тончайший электрод в зрительную кору кошки, они показывали ей пятна и линии и слушали, когда нейрон «стреляет». Пятна почти не действовали. Зато многие клетки бурно отвечали на светлую полоску — но лишь под своим, определённым углом. Поверни полоску — и нейрон умолкает. Так открылись клетки, избирательные к ориентации; за это Хьюбел и Визел получили Нобелевскую премию 19811981 года. Более того, они различили два сорта клеток. Простые отвечали на край нужного наклона в строго определённом месте поля. Сложные — на край того же наклона, но где угодно в пределах своего поля, будто собирая сигналы многих простых. В этой паре уже читается весь план будущих свёрточных сетей: детектор признака плюс устойчивость к его положению.

Свёртка: один детектор на всё поле

Присмотримся к тому, что делает детектор края. Его вес-таблица (ядро) прикладывается к окну, поэлементно умножается на яркости и суммируется — получается один отклик. Затем окно сдвигается на пиксель, и всё повторяется. Эта операция — прикладывать одно ядро во всех точках изображения — называется свёрткой. Если яркости изображения обозначить II, а ядро KK размера (2r+1)×(2r+1)(2r{+}1)\times(2r{+}1), то отклик в точке (y,x)(y,x) записывается так:

S(y,x)=i=rrj=rrK(i,j)I(y+i,x+j).S(y,x)=\sum_{i=-r}^{r}\sum_{j=-r}^{r}K(i,j)\,I(y+i,\,x+j).

Формула короткая, но за ней стоит вся идея: каждый выход — это взвешенная сумма маленькой окрестности входа, и веса KK одни и те же в любой точке. Меняя KK, мы получаем разные детекторы (края, пятна, полоски), не трогая самой операции.

У неё два бесценных свойства. Во-первых, ядро одно на всё поле: детектор, пойманный в одном углу картинки, узнаётся и в другом. Это и есть инвариантность к сдвигу — сдвинь предмет, и карта откликов сдвинется вместе с ним, не изменившись по сути. Полносвязной сети такую устойчивость пришлось бы выучивать заново для каждого положения предмета; свёртке она дана даром, самим устройством операции. Во-вторых, весов мало — крошечная таблица вместо связи с каждым пикселем. Полносвязный слой на изображении 1000×10001000\times1000 потребовал бы миллион весов на один нейрон; свёрточному хватает девяти. Меньше весов — меньше данных нужно для обучения и меньше риск переобучения: сеть не может запомнить каждый пиксель, она вынуждена искать повторяющиеся признаки.

Простейший детектор края — оператор Собеля. Его ядро вычитает яркости слева из яркостей справа: на ровном фоне отклик нулевой, а на границе, где яркость резко меняется, — большой.

Карта краёв на реальном фото

Проверим детектор на настоящем изображении — обычной фотографии. Прогоним оператор Собеля по всему полю.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Слева чёрно-белая фотография; справа карта краёв после детектора Собеля: ярко очерчены контуры морды, глаз, ушей, усов и меха, подпись сильных краёв 24 процента пикселей
Рис. 27.2. Первый шаг зрения — найти границы

Слева — фотография, справа — карта откликов детектора края. Модель ещё ничего не «узнала», но уже вытащила самое информативное: контуры морды и глаз, линии ушей и усов, границы меха. Сильными краями оказались лишь 24%24\% пикселей — зрение сразу отбрасывает однородный фон и цепляется за границы.

Обычно берут не один Собель, а два — по горизонтали GxG_x и по вертикали GyG_y, — и объединяют их в две осмысленные величины: силу края и его направление,

I=Gx2+Gy2,θ=atan2(Gy,Gx).|\nabla I|=\sqrt{G_x^2+G_y^2},\qquad \theta=\operatorname{atan2}(G_y,\,G_x).

Первая говорит, насколько резка граница, вторая указывает, под каким углом она идёт. Эти две величины устойчивее, чем сырые GxG_x и GyG_y: они не зависят от того, как повёрнута система координат камеры.

Банк фильтров ориентаций

Один детектор ловит края одного типа. Чтобы увидеть все наклоны, зрение держит целый набор детекторов — банк фильтров разных ориентаций. Каждый фильтр устроен как рецептивное поле простой клетки: светлая полоска, окружённая тёмными, повёрнутая под своим углом. Такие фильтры называют габоровскими; их задаёт волна, приглушённая колоколом:

g(x,y)=exp ⁣(x2+γ2y22σ2)cos ⁣(2πxλ),g(x,y)=\exp\!\Big(-\tfrac{x'^2+\gamma^2 y'^2}{2\sigma^2}\Big)\, \cos\!\Big(\tfrac{2\pi x'}{\lambda}\Big),

где x,yx',y' — координаты, повёрнутые на угол фильтра. Колокол ограничивает детектор маленьким окном (рецептивным полем), а косинус задаёт полоски: их частоту задаёт λ\lambda, их наклон — угол поворота. Меняя угол, получаем весь банк ориентаций.

Рисунок шире экрана — проведите по немуОткрыть целиком ↗
Верхний ряд: четыре габоровских фильтра с полосками под углами 0, 45, 90 и 135 градусов; нижний ряд: их карты откликов на фотографии, вертикальный фильтр подсвечивает флагшток, горизонтальный — козырёк фуражки и медали, диагональные — соответствующие края
Рис. 27.3. Банк фильтров ориентаций

Вверху — четыре фильтра, повёрнутые на 00, 4545, 9090 и 135135 градусов. Внизу — их отклики на фотографии. Вертикальный фильтр вспыхивает на флагштоке и вертикальных кантах, горизонтальный — на козырьке фуражки и планках медалей, диагональные — на своих краях. Вместе банк раскладывает изображение по ориентациям — ровно как колонки зрительной коры.

Иерархия: от краёв к предметам

Края — только начало. Следующий слой смотрит уже не на пиксели, а на карту откликов первого слоя, и его рецептивное поле охватывает несколько краёв разом. Так он ловит углы и стыки; слой за ним — части (глаз, колесо); ещё выше — целые предметы. Простое собирается в сложное, и рецептивные поля растут от слоя к слою — та самая глубина, что ломала задачу XOR.

Важно, что растут они не линейно, а лавинообразно. Нейрон второго слоя видит окно нейронов первого, каждый из которых уже смотрел в своё окно входа, — и потому охватывает участок изображения заметно больше собственного ядра. Через несколько слоёв рецептивное поле разрастается от пары пикселей до целого предмета, хотя каждое отдельное ядро остаётся крошечным. В этом фокус: сеть видит и мелкую деталь, и общую форму, не раздувая числа весов.

Русская линия: кора как набор фильтров

Пока Хьюбел и Визел слушали отдельные нейроны, советская школа физиологии зрения задавала другой вопрос: что кора делает с изображением в целом? Ленинградский физиолог Владимир Глезер предложил смелый ответ: зрительная кора раскладывает картинку на локальные пространственные частоты — рецептивные поля работают как набор фильтров, каждый настроен на свой масштаб и наклон узора. Это ровно тот банк габоровских фильтров, что мы видели выше, только описанный на языке частот.

Взгляд Глезера сблизил физиологию зрения с математикой обработки сигналов и оказался пророческим: современные свёрточные сети в первом слое приходят к тому же — банку локальных фильтров ориентации и масштаба.

Лаборатория детектора

Прокрутить фильтр по настоящей фотографии

Загружается живая иллюстрация…

Порядок опытов. Слева — настоящая фотография, справа — карта откликов одного детектора, скользящего по всему полю. Крутите ориентацию фильтра и следите, что вспыхивает: у вертикального фильтра — флагшток и вертикальные канты, у горизонтального — козырёк фуражки и планки наград. Переключите тип детектора с плавных полосок Габора на резкий край Собеля. Табло считает, на какой доле поля детектор дал сильный отклик, — почувствуйте, как один и тот же фильтр по-разному видит одну картинку в зависимости от наклона.

Сборка: маленький детектор, скользящий по полю

Зрение не хватает предмет целиком — оно начинает с малого. Нейрон с крошечным рецептивным полем отвечает на локальный признак, чаще всего на край определённой ориентации, — это открыли Хьюбел и Визел в коре кошки. Один такой детектор, приложенный во всех точках изображения, — это свёртка: общие веса дают экономию и устойчивость к сдвигу. Банк фильтров разных ориентаций раскладывает картинку по наклонам, как колонки коры или как пространственно-частотные фильтры в теории Глезера, а следующие слои собирают из краёв части, из частей — предметы. Мы своими руками вытащили из обычной фотографии карту краёв и карты ориентаций. Всё готово к главному герою компьютерного зрения — свёрточной нейронной сети, где эти фильтры не заданы вручную, а рождаются из данных. С неё начинается следующий разговор.

Задачи