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

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

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

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

Теперь, как этот расчет сверток помогает в распознавании изображений? Скажем, у нас есть два изображения, одно с цифрой 1, а другое с цифрой 2, и мы пытаемся вычислить свертки по обоим из них. Когда все свертки для всех слоев сети вычислены для обоих изображений, в конце мы получаем другой и уникальный набор двумерных массивов чисел для них обоих.

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

Укладка карт с несколькими объектами

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

Объединение

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

Итак, как происходит объединение? Позвольте нам понять через изображение ниже.

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

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

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

Следите за iSrajan в Facebook, Twitter, LinkedIn и Instagram.