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

ConvNets лежат в основе распознавания изображений и компьютерного зрения. Одна из самых захватывающих вещей в этом - то, как последовательность необработанных математических операций, таких как умножение и сложение, проходит весь путь для обработки и распознавания сложных визуальных элементов. В этом выпуске мы поговорим о нескольких фундаментальных концепциях компьютерного зрения, определим и проиллюстрируем рабочую процедуру ConvNets и набросаем некоторые связанные с этим технические термины. Для начала поговорим об идее, поскольку они пуленепробиваемые (!)

Идея

Идея проста: определить, что находится внутри изображения, воспроизвести видео или прямую запись (поскольку все видео на самом элементарном уровне представляют собой последовательность быстро меняющихся изображений). С технической точки зрения компьютерное зрение - это наука о программировании компьютера для получения высокого уровня понимания цифровых изображений путем воспроизведения стратегии работы зрительной системы человека. Для этого мы используем разновидность искусственных нейронных сетей, называемую свернутой нейронной сетью. С этого момента я буду называть эту технологию CNN. Основная задача CNN - обнаруживать ценные особенности изображения, чтобы само изображение могло быть математически представлено в виде вектора числовых цифр, который, в свою очередь, можно сравнить с изображением помеченного изображения для подтверждения к какому классу принадлежит предмет или что в нем в зависимости от исходных требований.

CNN может состоять из множества слоев, каждый из которых относится к разному типу, что я не буду обсуждать в этом выпуске. Слой, на котором мы сегодня сосредоточимся, - это сверточный слой.

Слой свертки

Слой свертки, как следует из названия, выполняет операцию свертки. Для начала позвольте указать на тот факт, что цифровые изображения представляют собой массивы чисел (обычно от 0 до 256), обозначающих цветовую комбинацию каждого пикселя. Например, квадратное изображение в градациях серого размером 1 КБ представляет собой двоичный массив размером 1024 x 1024. Обратите внимание, что цветные изображения используют третье измерение, называемое цветовым каналом, и что для простоты в этой лекции мы будем иметь дело с изображениями в оттенках серого.

Основная задача сверточного слоя - обнаруживать важные особенности изображения. Начнем с обнаружения краев. Край (нет, только не WWE!) В изображении представляет собой линию, прямую или изогнутую, обе стороны которой имеют резкое изменение цветового контраста. Чтобы обнаружить его, окно фильтра перемещается по исходному изображению, которое пытается найти край в пределах своего диапазона. Вот как выполняется свертка:

  • Сделайте изображение размером nh x nw
  • Фильтр fh x fw
  • Двигайте фильтр по изображению, шаг за шагом, и на каждом шаге выполните поэлементное умножение каждого элемента изображения на элемент фильтра в пределах окна и, наконец, добавьте продукты и сохраните sum в 2-мерном результирующем массиве, мы вскоре поговорим о размерах результирующего массива.

Вот графическое изображение,

Затененное изображение внизу - это объект, есть два края, отмеченные красным эллипсом, 2d-массив в верхнем левом углу - это числовая форма изображения. Используемые соглашения заключаются в том, что чем ниже значение отдельного пикселя (индекс в массиве 2d), тем светлее оттенок изображения. Наконец, 2d-массив в правом верхнем углу - это фильтр. Обратите внимание, что в этом примере мы используем изображение размером 5 x 5 и фильтр 3 x 3.

Давайте запечатлеть свертку в действии,

Для первого значения в результирующей матрице

результирующий [0] [0] = 10x1 + 10x0 + 0x (-1) + 10x1 + 10x0 + 0x (-1) + 10x1 + 10x0 + 0x (-1) = 30

Фактически, каждое подмножество fh x fw (в данном случае 3 x 3) исходной матрицы (изображения) помещается в единственную ячейку результирующей матрицы. Результирующий имеет размер 3 x 3, что всего на одно измерение больше, чем разница в размерах изображения и фильтра.

Следовательно, размер вывода = размер ввода - размер фильтра + 1

Присмотритесь к результирующей матрице: есть столбец с более высокими значениями (60), зажатый между двумя столбцами с более низкими значениями (30), то есть есть два изменения контраста, которые соответствуют двум краям в исходном изображении. У вас может возникнуть соблазн сказать, что это не края, а целая заштрихованная область, но позвольте напомнить, что мы имеем дело с изображением 5 x 5, тогда как реальные изображения имеют гораздо более высокое разрешение.

Аксессуары

При свертке следует учитывать несколько факторов:

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

Шаг: шаг - это пропуск столбцов на каждой итерации свертки. Шаг 2 означает, что фильтр должен быть помещен в каждые 2 столбца.

Вот визуальное представление обивки и шага,

На рисунке показаны отступы 2 (одинаковые отступы для изображения 5 x 5) и шаг 2.

Включение отступов и шага в уравнение выходного размера,

Алгоритм

Наконец, как обычно, давайте закончим обсуждение псевдокодом для алгоритма,