Как сделать компьютерное зрение профессионалом

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

В этом посте мы поговорим о механизмах, лежащих в основе сверточных нейронных сетей, их преимуществах и вариантах использования в бизнесе.

Что такое нейронная сеть?

Во-первых, давайте освежим наши знания о том, как работают нейронные сети в целом.

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

Нейроны обычно организованы в независимые слои. Одним из примеров нейронных сетей являются сети прямого распространения. Данные перемещаются из входного слоя через набор скрытых слоев только в одном направлении, как вода через фильтры.

Каждый узел в системе связан с некоторыми узлами на предыдущем уровне и на следующем уровне. Узел получает информацию от нижележащего уровня, что-то с ней делает и отправляет информацию на следующий уровень.

Каждому входящему соединению присваивается вес. Это число, на которое узел умножает ввод, когда он получает данные от другого узла.

Обычно есть несколько входящих значений, с которыми работает нода. Затем он суммирует все вместе.

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

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

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

В чем проблема с простыми NN?

Обычные искусственные нейронные сети плохо масштабируются. Например, в CIFAR, наборе данных, который обычно используется для обучения моделей компьютерного зрения, изображения имеют размер только 32x32 пикселя и имеют 3 цветовых канала. Это означает, что один полносвязный нейрон в первом скрытом слое этой нейронной сети будет иметь 32323 = 3072 веса. Это все еще управляемо. А теперь представьте изображение большего размера, например, 300х300х3. У него будет 270 000 весов (обучение которых требует такой большой вычислительной мощности)!

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

CNN используют совместное использование параметров. Все нейроны в определенной карте объектов имеют общие веса, что делает всю систему менее вычислительной.

Как работает CNN?

Сверточная нейронная сеть, или ConvNet, — это просто нейронная сеть, использующая свертки. Чтобы понять принцип, мы сначала поработаем с двумерной сверткой.

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

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

Этот фильтр также называют ядром или детектором признаков, и его размеры могут быть, например, 3х3. Для выполнения свертки ядро ​​просматривает входное изображение, выполняя матричное умножение элемент за элементом. Результат для каждого рецептивного поля (область, где происходит свертка) записывается на карте признаков.

Мы продолжаем перемещать фильтр, пока карта объектов не будет завершена.

Прокладка и шаг

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

  • Заполнение. Заполнение расширяет входную матрицу, добавляя поддельные пиксели к границам матрицы. Это сделано потому, что свертка уменьшает размер матрицы. Например, матрица 5x5 превращается в матрицу 3x3, когда по ней проходит фильтр.
  • Шаговое. Часто бывает, что при работе со свёрточным слоем вам нужно получить результат, меньший, чем вход. Один из способов добиться этого — использовать слой пула. Еще один способ добиться этого — использовать шагание. Идея шага состоит в том, чтобы пропускать некоторые области, когда ядро ​​скользит: например, пропуская каждые 2 или 3 пикселя. Это снижает пространственное разрешение и делает сеть более эффективной с точки зрения вычислений.

Заполнение и шаг могут помочь обрабатывать изображения более точно.

Для более подробного объяснения того, как работают CNN, посмотрите эту часть курса машинного обучения Брэндона Рорера.

Для реальных задач свертка обычно выполняется в 3D. Большинство изображений имеют 3 измерения: высоту, ширину и глубину, где глубина соответствует цветовым каналам (RGB). Таким образом, сверточный фильтр также должен быть трехмерным. Вот как эта же операция выглядит в 3D.

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

Например, заполнение и прохождение матрицы 30x30x3 через 10 фильтров приведет к набору из 10 матриц 30x30x1. После того, как мы наложим эти карты друг на друга, мы получим матрицу 30x30x10.

Это результат нашего сверточного слоя.

Этот процесс можно повторить: CNN обычно имеют более одного сверточного слоя.

3 слоя CNN

Цель CNN — уменьшить изображения, чтобы их было легче обрабатывать, не теряя функций, которые важны для точного прогнозирования.

Архитектура ConvNet имеет три типа уровней: сверточный уровень, уровень пула и полносвязный уровень.

  • Сверточный слой отвечает за распознавание признаков в пикселях.
  • Слой пула отвечает за то, чтобы сделать эти функции более абстрактными.
  • Полносвязный слой отвечает за использование полученных признаков для предсказания.

Сверточный слой

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

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

Объединенный слой

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

Фильтр 2x2 уменьшит количество пикселей в каждой карте объектов до одной четверти размера. Если бы у вас была карта объектов размером 10×10, выходная карта была бы 5×5.

Для объединения можно использовать несколько различных функций. Это самые частые:

  • Максимальное объединение. Он вычисляет максимальное значение для каждого участка карты объектов.
  • Средний пул. Он вычисляет среднее значение для каждого участка на карте объектов.

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

Теперь нам нужно сгладить входные данные (превратить их в вектор-столбец) и передать их в обычную нейронную сеть для классификации.

Полносвязный слой

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

Преимущества сверточных нейронных сетей

Сверточные нейронные сети имеют несколько преимуществ, которые делают их полезными для многих различных приложений. Если вы хотите увидеть их на практике, посмотрите подробное объяснение от StatQuest.

Особенности обучения

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

Вычислительная эффективность

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

Высокая точность

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

Недостатки ConvNet

Однако ConvNet не идеален. Даже если это кажется очень интеллектуальным инструментом, он все еще подвержен атакам со стороны злоумышленников.

Враждебные атаки

Состязательные атаки — это случаи подачи в сеть «плохих» примеров (они же слегка модифицированные определенным образом изображения) для ошибочной классификации. Даже небольшое смещение пикселей может свести CNN с ума. Например, преступники могут обмануть систему распознавания лиц на основе CNN и пройти неузнанным перед камерой.

Обучение интенсивному использованию данных

Чтобы CNN продемонстрировали свою магическую силу, им требуются тонны обучающих данных. Эти данные нелегко собрать и предварительно обработать, что может стать препятствием для более широкого внедрения технологии. Именно поэтому даже сегодня существует всего несколько хороших предварительно обученных моделей, таких как GoogleNet, VGG, Inception, AlexNet. Большинство из них принадлежит глобальным корпорациям.

Для чего используются сверточные нейронные сети?

Сверточные нейронные сети используются во многих отраслях. Вот несколько распространенных примеров их использования в реальных приложениях.

Классификация изображений

Сверточные нейронные сети часто используются для классификации изображений. Распознавая ценные признаки, CNN может идентифицировать различные объекты на изображениях. Эта способность делает их полезными в медицине, например, для МРТ-диагностики. CNN также можно использовать в сельском хозяйстве. Сети получают изображения со спутников, таких как LSAT, и могут использовать эту информацию для классификации земель в зависимости от уровня их возделывания. Следовательно, эти данные можно использовать для прогнозирования уровня плодородия земель или разработки стратегии оптимального использования сельхозугодий. Распознавание рукописных цифр также является одним из первых применений CNN для компьютерного зрения.

Обнаружение объекта

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

Аудиовизуальное сопоставление

YouTube, Netflix и другие службы потокового видео используют аудиовизуальное сопоставление для улучшения своих платформ. Иногда запросы пользователя могут быть очень конкретными, например, «фильмы про зомби в космосе», но поисковик должен удовлетворять даже такие экзотические запросы.

Реконструкция объекта

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

Распознавание речи

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

Подведение итогов

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

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

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

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