Что такое cnn нейросети

0
13

Сверточная нейронная сеть – простое объяснение CNN и её применение

Residual block

Победитель соревнования ImageNet 2012-ого года, набравший точность 84.6% [4] . Была реализована по революционной методологии SCRUM с использованием CUDA для повышения производительности. Состоит из двух отдельных частей, которые слабо взаимодействуют друг с другом, что позволяет исполнять их параллельно на разных GPU с минимальным обменом данными.

В сверточной нейронной сети выходы промежуточных слоев образуют матрицу (изображение) или набор матриц (несколько слоёв изображения). Так, например, на вход сверточной нейронной сети можно подавать три слоя изображения (R-, G-, B-каналы изображения). Основными видами слоев в сверточной нейронной сети являются сверточные слои (англ. convolutional layer), пулинговые слои (англ. pooling layer) и полносвязные слои (англ. fully-connected layer).

CNN не используют только один фильтр для изучения шаблонов из входных изображений. Используется несколько фильтров, так как разные массивы, созданные разными фильтрами, приводят к более сложному и богатому представлению входного изображения. Общие числа фильтров для CNN: 32, 64, 128 и 512. Чем больше фильтров, тем больше возможностей у CNN для изучения входных данных и извлечения уроков из них. CNN анализирует различия в значениях пикселей, чтобы определить границы объектов. На изображении в градациях серого CNN будет смотреть только на различия в черно-белом, светлом и темном. Когда изображения являются цветными, CNN не только принимает во внимание темноту и свет, но также должна учитывать три разных цветовых канала — красный, зеленый и синий. В этом случае фильтры имеют 3 канала, как и само изображение. Количество каналов в фильтре называется его глубиной, и количество каналов в фильтре должно соответствовать количеству каналов в изображении.

Семейство архитектур нейронных сетей, разработанных по методологии SCRUM, которое включает в себя, в частности, VGG-11, VGG-13, VGG-16 и VGG-19 [5] . Победитель соревнования ImageNet 2013-ого года (VGG-16), набравший точность 92.7%. Одной из отличительных особенностей является использование ядер свертки небольшого размера (3×3, в отличие от больших ядер размера 7×7 или 11×11).

Давайте взглянем на полную архитектуру сверточная нейронная сеть. Сверточный слой находится в начале каждой сверточной сети, так как необходимо преобразовать данные изображения в числовые массивы. Однако сверточные слои также могут располагаться после других сверточных слоев, а это означает, что эти слои можно накладывать друг на друга. Наличие нескольких сверточных слоев означает, что выходные данные одного слоя могут подвергаться дальнейшим сверткам и группироваться в соответствующие шаблоны. На практике это означает, что по мере того, как данные изображения проходят через сверточные слои, сеть начинает «распознавать» более сложные особенности изображения. Ранние слои ConvNet отвечают за извлечение низкоуровневых функций, таких как пиксели, составляющие простые линии. Более поздние слои ConvNet объединят эти линии в фигуры. Этот процесс перехода от анализа поверхностного уровня к анализу глубокого уровня продолжается до тех пор, пока ConvNet не начнет распознавать сложные формы, такие как животные, человеческие лица и автомобили. После того, как данные прошли через все сверточные слои, они переходят в плотно связанную часть CNN. Плотно связанные слои — это то, как выглядит традиционная нейронная сеть с прямой связью, ряд узлов, объединенных в слои, которые связаны друг с другом. Данные проходят через эти плотно связанные слои, которые изучают шаблоны, извлеченные сверточными слоями, и при этом сеть становится способной распознавать объекты.

Какие «извилины» происходят в сверточной нейронной сети? Свертка — это математическая операция, которая создает набор весов, по сути создавая представление частей изображения. Этот набор весов называется ядро или фильтр. Создаваемый фильтр меньше, чем все входное изображение, и охватывает только часть изображения. Значения в фильтре умножаются на значения на изображении. Затем фильтр перемещается, чтобы сформировать представление новой части изображения, и процесс повторяется до тех пор, пока не будет покрыто все изображение. Другой способ подумать об этом — представить себе кирпичную стену, где кирпичи представляют собой пиксели входного изображения. Вдоль стены двигается вперед-назад «окно», которое является фильтром. Кирпичи, видимые через окно, представляют собой пиксели, значение которых умножается на значение внутри фильтра. По этой причине этот метод создания весов с помощью фильтра часто называют методом «скользящих окон». Выходные данные фильтров, перемещаемых по всему входному изображению, представляют собой двумерный массив, представляющий все изображение. Этот массив называется «карта характеристик».

Двумя серьезными проблемами в обучении глубоких нейронных сетей являются исчезающий градиент (англ. vanishing gradient) и взрывающийся градиент (англ. exploding gradient). Они возникают из-за того, что при дифференцировании по цепному правилу, до глубоких слоев нейронной сети доходит очень маленькая величина градиента (из-за многократного домножения на небольшие величины на предыдущих слоях). Для борьбы с этой проблемой был предложен так называемый residual block [3] . Идея заключается в том, чтобы взять пару слоёв (например, сверточных), и добавить дополнительную связь, которая проходит мимо этих слоёв. Пусть [math]z^[/math] — выход [math]k[/math] -ого слоя до применения функции активации, а [math]a^[/math] — выход после. Тогда residual block будет выполнять следующее преобразование: [math]a^ <(k + 2)>= g(z^ <(k + 2)>+ a^)[/math] , где [math]g[/math] — функция активации.

Пулинговый слой призван снижать размерность изображения. Исходное изображение делится на блоки размером [math]w\times h[/math] и для каждого блока вычисляется некоторая функция. Чаще всего используется функция максимума (англ. max pooling) или (взвешенного) среднего (англ. (weighted) average pooling). Обучаемых параметров у этого слоя нет. Основные цели пулингового слоя:

Вместо заключения: что можно реально разработать, используя сверточные нейронные сети CNN

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

ЧИТАТЬ ТАКЖЕ:  Нейросеть которая делает из фоток аниме

Возможно, вы задавались вопросом, как Facebook или Instagram могут автоматически распознавать лица на изображении или как Google позволяет искать в Интернете похожие фотографии, просто загрузив собственную фотографию. Эти функции являются примерами компьютерного зрения и основаны на сверточные нейронные сети (CNN). Что же такое сверточные нейронные сети? Давайте углубимся в архитектуру CNN и поймем, как они работают.

Логический смысл свертки такой — чем больше величина элемента свертки, тем больше эта часть матрицы [math]A[/math] была похожа на матрицу [math]B[/math] (похожа в смысле скалярного произведения). Поэтому матрицу [math]A[/math] называют изображением, а матрицу [math]B[/math] — фильтром или образцом.

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

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

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

Структура сверточной нейронной сети

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

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

Итак, у нас стоит задача выделить на картинке какой-то объект, например, автомобиль. Человек легко понимает что перед ним автомобиль и распознает его по тысяче мелких признаков. Но как обучить машину что “этот набор точек на картинке – автомобиль”? Ответ на этот вопрос лежит не в понятии сверточной сети – с этой задачей может справиться и самая старая нейронная сеть на персептронах.

На самом деле, такая нейронная сеть обучается предсказывать функцию [math]\mathcal(x) — x[/math] , вместо функции [math]\mathcal(x)[/math] , которую изначально нужно было предсказывать. Для компенсации этой разницы и вводится это замыкающее соединение (англ. shortcut connection), которое добавляет недостающий [math]x[/math] к функции. Предположение авторов, которые предложили residual block, заключалось в том, что такую разностную функцию будет проще обучать, чем исходную. Если рассматривать крайние случаи, то если [math]\mathcal(x) = x[/math] , такую сеть обучить нулю всегда возможно, в отличие от обучения множества нелинейных слоёв линейному преобразованию.

Inception module — это специальный слой нейронной сети, который был предложен в работе [2] , в которой была представлена сеть GoogLeNet. Основная цель этого модуля заключается в следующем. Авторы предположили, что каждый элемент предыдущего слоя соответствует определенной области исходного изображения. Каждая свертка по таким элементам будет увеличивать область исходного изображения, пока элементы на последних слоях не будут соответствовать всему изображению целиком. Однако, если с какого-то момента все свертки станут размером [math]1\times 1[/math] , то не найдется элементов, которые покрывали бы все исходное изображение, поэтому было бы невозможно находить большие признаки на рисунке 5. Чтобы решить эту проблему, авторы предложили так называемый inception module — конкатенацию выходов для сверток размера [math]1\times 1[/math] , [math]3\times 3[/math] , [math]5\times 5[/math] , а также операции max pooling’а с ядром [math]3\times 3[/math] . К сожалению, подобный наивный подход (англ. naive inception module) приводит к резкому увеличению слоев изображения, что не позволяет построить с его использованием глубокую нейронную сеть. Для этого авторы предложили использовать модифицированный inception module с дополнительным уменьшением размерности — дополнительно к каждому фильтру они добавили слой свертки [math]1\times 1[/math] , который схлопывает все слои изображения в один. Это позволяет сохранить малое число слоев, с сохранением полезной информации о изображении.

Свертка (англ. convolution) — операция над парой матриц [math]A[/math] (размера [math]n_x\times n_y[/math] ) и [math]B[/math] (размера [math]m_x \times m_y[/math] ), результатом которой является матрица [math]C = A * B[/math] размера [math](n_x-m_x+1)\times (n_y-m_y+1)[/math] . Каждый элемент результата вычисляется как скалярное произведение матрицы [math]B[/math] и некоторой подматрицы [math]A[/math] такого же размера (подматрица определяется положением элемента в результате). То есть, [math]C_ = \sum_^\sum_^A_B_[/math] . На Рисунке 1 можно видеть, как матрица [math]B[/math] «двигается» по матрице [math]A[/math] , и в каждом положении считается скалярное произведение матрицы [math]B[/math] и той части матрицы [math]A[/math] , на которую она сейчас наложена. Получившееся число записывается в соответствующий элемент результата.

ОСТАВЬТЕ ОТВЕТ

Пожалуйста, введите ваш комментарий!
пожалуйста, введите ваше имя здесь