Объяснение сверточных нейронных сетей простым языком.

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

Видение, созданное природой

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

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

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

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

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

Карта возможностей

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

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

Каждый сверточный слой также состоит из слоев, но эти слои не полностью связаны. Предположим, что изображение 28x28 RGB используется в качестве входных данных для первого сверточного слоя с четырьмя фильтрами 3x3 F1, F2, F3, F4. Каждый фильтр представляет собой куб размером 3x3x3, который применяется по всему изображению, чтобы каждый раз выдавать одно число.

Количество шагов, на которые фильтр перемещается по изображению, называется шагом, обычно 1. Результирующая карта объектов имеет глубину, равную количеству фильтров. Его ширина и высота зависят от размера изображения, размера фильтра и заполнения.

В нашем примере в случае полного заполнения у нас будет размер карты объектов 28x28x4. В случае отсутствия заполнения у нас будет размер 26x26x4. Следовательно, количество каналов не влияет на размер карты объектов.

Объединение

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

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

Становиться глубже

Способ объединения сверточных слоев - это больше искусство, чем наука. Приведенная ниже сеть VGG была предложена в 2014 году для разделения 14 миллионов изображений на 1000 классов с точностью тестирования 92,7%. Его тренировали в течение 2 недель, чтобы оценить свои 14 714 688 весов. Таких сверхмассивных сетей больше: GoogLeNet, ResNet, DenseNet, MobileNet, Xception, ResNeXt и многие другие.

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

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

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

Заключение

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

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

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