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

f = размер фильтра

n_filers = количество фильтров

р = заполнение

с = шаг

Почему CNN?

Предположим, что на рисунке 1.1 размер фильтра равен 3, а количество фильтров равно 10. Выходной объем будет иметь размер 30 x 30 x 10. Общее количество параметров в этих слоях свертки равно [3 x 3 +1] x 10. = 100. Теперь предположим, что если бы это была полносвязная нейронная сеть, количество параметров было бы [32 x 32 x 3] x [30 x 30 x 10] ≃ 27 миллионов. Это много параметров для обучения, и, кроме того, это требует больших вычислительных ресурсов. Уровень свертки имеет небольшое количество параметров из-за совместного использования параметров и sпаритета соединений. Совместное использование параметров означает, что представьте фильтр, отвечающий за обнаружение вертикальных краев на изображении, во время операции свертки этот же фильтр будет скользить по всему изображению в поисках вертикальных краев. Это означает, что детектор признаков, такой как в данном случае детектор вертикальных краев, который полезен в одной части изображения, вероятно, также полезен и в другой части изображения, поэтому веса являются общими. Разреженность соединений означает, что в каждом слое каждое выходное значение зависит лишь от небольшого количества входных данных, как показано на рисунке 1.2. Это делает CNN более склонными к переоснащению и может обучаться на меньших наборах данных.

На рис. 1.2 во время операции свертки значение 4 в выходном изображении зависит только от 9 значений в красном окне входного изображения. Это известно как разреженность соединений.

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

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

На рис. 1.3 секция входного изображения размером 3 x 3 свернута с фильтром размером 3 x 3, выполняя поэлементное умножение значений пикселей в каждом месте. Действительная свертка означает отсутствие заполнения, а такая же свертка означает дополнение таким образом, чтобы размер вывода был таким же, как размер ввода. По соглашению в сверточном фильтре компьютерного зрения обычно нечетный. Если заполнение такое же, p = f-1/2, где f — размер фильтра. Пошаговая свертка означает, что вы перемещаете окно свертки по изображению на s строк и s столбцов.

Заполнение

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

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

Шагать

Шаг означает, как долго сверточный фильтр прыгает перед вычислением следующего значения. Если изображение (n x n), шаг равен 2, а фильтр равен ( f x f ), фильтр будет сворачивать изображение с перекрытием шага 2 как в горизонтальном, так и в вертикальном направлениях. На рис. 1.5 фильтр будет вычислять поэлементное произведение пикселей с красным окном, затем сдвинет 2 пикселя по горизонтали и свернет с синим окном, а затем с зеленым окном. Затем он смещается на 2 пикселя по вертикали и продолжается до конца изображения.

Слой Relu

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

Где Z - вход.

ReLU — это выбор по умолчанию для скрытых слоев. Это ускоряет обучение, поскольку предотвращает падение градиента до нуля, что замедляет обучение.

Максимальный слой пула

Maxpooling вычисляет максимум окна (f x f) в изображении (n x n). Размер фильтра f и шаг s являются гиперпараметрами этого слоя.

Слой пула (POOL) уменьшает высоту и ширину ввода. Это помогает сократить объем вычислений, а также помогает сделать детекторы признаков более инвариантными к их положению во входных данных. Идея максимального пула заключается в том, что он выбирает максимальное значение в окне, которое может быть любой конкретной функцией, поэтому оно сохраняется в выводе максимального пула. скажем, если в верхнем левом окне 2 x 2 обнаружен вертикальный край, тогда берем максимальное значение, которое затем сохраняет эту функцию. Если он не обнаружен, то максимальное значение все равно будет довольно маленьким, и функция не будет обнаружена в первую очередь. Следует отметить одну интересную вещь: слой максимального пула не имеет параметров для обучения обратного распространения.

Свести слой

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

Ссылки

Мохамед, Ихаб Сами Мохамед. Обнаружение и отслеживание поддонов с помощью лазерного дальномера и методов машинного обучения. Дисс. Магистерская работа, Европейский магистр передовой робототехники плюс (EMARO+), Университет Генуи, 2017 г.