Компьютерное зрение: от нуля к герою

Один из основных вопросов на протяжении всей истории человечества и изучения мозга заключается в следующем: как мы воспринимаем мир так, как мы?

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

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

Компьютеры также недавно стали способны визуально распознавать, учиться видеть. Это стало возможным благодаря достижениям в области искусственного интеллекта и, в частности, применению сверточных нейронных сетей (CNN). На эту тему есть множество статей, но очень немногие объясняют интуицию метода вне статистики и линейной алгебры.

Строительные блоки сверточной нейронной сети

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

Что такое свертка?

Свертка - это математическая операция, объединяющая две функции в третью. Например, предположим, что у нас есть две заданные функции: f (t) и g (t), и нам интересно наложить один на другой и вычислить площадь пересечения: f (t) * g (t) = (f * g) (t) .

В этом случае мы применяем g (t) (называемое ядром) вместо f (t) и меняем ответ (f * g) (t) в соответствии с пересечением по площади обеих функций. Эта концепция свертки является наиболее часто используемым методом обработки сигналов, поэтому она также применяется в компьютерном зрении, которое можно рассматривать как обработку сигнала нескольких датчиков RGB. Интуиция, лежащая в основе эффективности сверток, заключается в их способности фильтровать заданные входные сигналы в комбинированный, более полезный результат.

В частном случае изображений сигнал лучше понимается в терминах матриц, а не форм волны. Поэтому наши функции f (t) и g (t) теперь станут image (matrix) и ядро ​​(матрица) соответственно. Еще раз, мы можем применить свертку, сдвинув одну из матриц поверх другой:

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

Перемещая различные ядра свертки по изображению, можно выполнять манипуляции с изображением. Вот сколько инструментов можно найти в программах для редактирования изображений, таких как Photoshop или GIMP:

Что такое глубокие нейронные сети?

Концепцию обучения в рамках машинного обучения можно рассматривать как попытку предсказать неизвестную функцию на основе заданных данных. Допустим, вы заинтересованы в прогнозировании метки y на основе входных данных x. В этом конкретном сценарии вы хотите, чтобы ваша модель минимизировала ошибку между вашим предсказанием и истинностью. Мы изменяем веса и смещения в нашей сети таким образом, чтобы мы максимально точно отображали вход x на выход y .

Чтобы лучше понять это, давайте рассмотрим простую задачу линейной регрессии. Уравнение линии можно описать как y = mx + b, где m - наклон, а b - пересечение с плоскостью Y (обычно называется смещением). Если есть только две точки, можно вычислить наклон и смещение напрямую с помощью формулы, но проблема становится сложнее, когда у нас есть количество точек n ›2 и есть нет линии, которая идеально подходит для этих точек. В этом случае нам было бы интересно аппроксимировать линию, которая минимизирует расстояние до каждой точки данных. Для этого мы можем выполнить следующие шаги:

1. Задайте случайные значения для m и b.
2. Вычислите ошибку, которая может быть описанным как Среднеквадратичная ошибка (MSE), чтобы узнать, как далеко мы находимся от оптимальной линии.
3. Используя производные этой функции ошибок, вычислите градиент, чтобы узнать, в каком направлении переместить два значения для уменьшения ошибки.
4. Повторяйте шаги 2 и 3, пока ошибка не перестанет уменьшаться.

В левой части рисунка вы можете увидеть пространство ошибок, которое задается MSE, примененным к нашим конкретным точкам данных. Справа мы видим представление наших точек данных и линию, определяемую m и b. . Вначале линия полностью отключена, что отражается в высоком значении ошибки. Тем не менее, по мере того, как мы вычисляем производную и приближаемся к точке уменьшения функции, мы получаем значения m и b для линии, которая напоминает свойства точек данных.

В глубоких нейронных сетях (DNN) это основная идея о том, что происходит в каждом нейроне. Учитывая, что нашу задачу решить гораздо сложнее, чем просто аппроксимировать линию, нам нужно больше нейронов, обычно структурированных по слоям. Глубокое обучение минимизирует функцию ошибок за счет использования градиентного спуска, и, поскольку обучение структурировано по уровням, DNN в конечном итоге изучают иерархию в данных.

Основными строительными блоками нейронной сети являются искусственные нейроны. Их бывают разные типы, самый простой из которых - перцептрон. Перцептрон можно рассматривать как единицу, которая принимает несколько двоичных входов x1, x2,…, xn и генерирует один двоичный выход y :

Каждому входу присваивается вес w1, w2,…, wn, отражающий их важность для вывода. Наконец, выход рассчитывается по взвешенной сумме входов и заданного порога. Если эта сумма больше этого порога, перцептрон выдаст 1, в противном случае 0. Это проще выразить алгебраическими терминами:

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

Название Deep Learning происходит от того факта, что в архитектуре задействовано более двух слоев нейронов. В прошлом выход за пределы двух уровней был непрактичным и приводил к слабым результатам. Эти ограничения были преодолены за счет доступности больших объемов обученных данных и ускоренных вычислений. Именно в этот момент сообщество начало добавлять больше слоев, что привело к так называемым глубоким нейронным сетям. Связь через уровни позволила описать иерархическое представление данных, где каждый слой нейронов представляет собой уровень абстракции.

Изучение визуальных представлений с помощью сверточных нейронных сетей

Сочетание мощности сверток для извлечения пространственных характеристик с возможностью иерархического обучения из глубоких нейронных сетей дает то, что известно как сверточные нейронные сети. Оба эти метода объединены в единое решение путем замены классического слоя нейронов, присутствующих в DNN, сверточными слоями. Таким образом, веса и смещения кодируются в ядрах и являются изученными параметрами, которые оптимизируют представление от необработанных входных данных (изображений) до предполагаемых прогнозов (например, класса изображения). Первоначальные слои будут кодировать такие элементы, как края, в то время как более поздние края будут кодировать все более высокие абстракции, такие как формы и текстуры.

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

Заключение

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

Преимущества

  • По сравнению с классическими методами компьютерного зрения, CNN легче применять с точки зрения разработки. Доступно множество учебных пособий и программного обеспечения с открытым исходным кодом, которые могут справиться с наиболее распространенными задачами, такими как классификация изображений или обнаружение объектов, просто путем ввода ваших данных в уже доступные модели.
  • При наличии достаточного количества данных CNN превосходят другие, в основном мелкие, модели.

Ограничения

  • Объем данных, необходимых для любых задач, может быть огромным, потому что методы глубокого обучения обычно начинаются с ограниченных предварительных знаний о текущей задаче. В других алгоритмах компьютерного зрения есть много методов, которые используют эти предварительные знания, реализованные в отношении того, как работают алгоритмы, для уменьшения количества необходимых данных.
  • Как и любой метод глубокого обучения, CNN являются методами черного ящика и не могут быть интерпретированы формально. Это означает, что если у вас возникнут проблемы с вашей моделью, вы начнете гадать, что могло пойти не так.