В связи с появлением в последнее время множества интересных проектов по компьютерному зрению существует неотъемлемая потребность понять, как работают модели в рамках этих проектов. Чтобы коснуться этих проектов, я расскажу о сверточных нейронных сетях или CNN, которые представляют собой многоуровневую нейронную сеть со специальной архитектурой для обнаружения сложных функций в данных. Сети CNN использовались в распознавании изображений, проектах дополненной реальности и, конечно же, в вашем Tesla!

Что означает свертка?

Процесс преобразования небольшого фрагмента входного изображения в пиксель выходного изображения с последующим повторением этого для каждой области входного изображения - это свертка.

Изображение, загружаемое в вашу модель, затем делится на строки и столбцы чисел. Это можно назвать матрицей. Эти числа измеряют интенсивность определенного цвета в определенной части этой матрицы. Изображение имеет некоторую ширину, некоторую высоту и глубину, где глубина обычно равна 3 и соответствует красному, зеленому и синему (RGB).

Как показано на схеме, CNN состоит из следующих слоев: (если вам интересно)

  • Слои ReLU
  • Объединение слоев (преобразование активации с помощью фиксированной функции)
  • Слои Conv (имеют веса, которые нужно тренировать)
  • Полностью связанный слой

Затем вы можете посмотреть на небольшой участок этого изображения и проверить, есть ли вертикальная интенсивность (или резкость) линии на этом участке. Если этот небольшой участок размером 10х10 пикселей состоит из резких вертикальных линий, мы присваиваем ему высокое значение. Мы применяем восходящий подход, поэтому мы повторяем, группируя наши выводы и проверяя их интенсивность. Таким образом, мы затем проверяем патч на интенсивность вертикальных линий в целом. Процесс повторяется до тех пор, пока мы не покроем все изображение. Точно так же другие атрибуты, такие как гладкость, интенсивность цвета, плотность, могут быть покрыты тем же процессом.

Исходное изображение, вероятно, будет иметь 3 канала (RGB), следующий слой может иметь намного больше слоев по мере увеличения сложности изображения. Таким образом, предпочтительно проверять только небольшой регион.

Обратите внимание, что это было сделано только для одного слоя. По мере продвижения дальше - изображение обрабатывается еще глубже, основываясь на наших выводах из первого слоя. Мы продолжаем открывать больше аспектов изображения, пока не сможем распознать изображение полностью. Это позволит нам идентифицировать все изображение в модели распознавания изображений.

Что же тогда такого особенного?

Перед людьми стоит задача выяснить, какие аспекты изображения следует исследовать. Например, на изображении кошки какие атрибуты, с точки зрения вертикали и горизонтальных линий, будут составлять кошку?

Нетрудно придумать несколько линий, проходящих через морду кошки, расстояние между зрачками и структуру лица, но как написать для этого тонны кода?

Здесь в игру вступают нейронные сети. Вы предоставляете нейронной сети какое-то описание, и на основе этого она задает вопросы и завершает работу. Вы показываете сети картинку, на которой вы уже знаете, что она содержит, и просите сеть выяснить, что это такое. На основе вероятности - нейронная сеть может выдать определенный атрибут этой картинки. Когда это происходит, вы изменяете математику, которая входит в ваши отдельные вопросы, чтобы быть немного более уверенными, и уменьшаете уверенность, когда что-то не так. Вы повторяете это несколько миллионов раз, и в конечном итоге описание превращается, возможно, в детектор вертикальных линий, или, если оно находится в одном из более поздних слоев, возможно, оно превращается в детектор «гладкости».

Какие бы функции ни оказались полезными для решения поставленной задачи, в конечном итоге их изучают, а это означает, что вам больше не нужно, чтобы человек выяснял, какие вещи вам нужно искать на изображении, а не то, как их искать. Это означает, что вместо того, чтобы писать вручную несколько слоев для обнаружения чего-то простого, мы можем иметь сеть из 200+ слоев!