Впервые это было опубликовано в моем блоге

В моей предыдущей статье я рассказал об основной идее нейронных сетей. Быстро просмотрите эту статью, нажав НАЖМИТЕ ЗДЕСЬ.

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

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

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

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

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

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

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

Теперь, когда ясно, что мы распознаем лица на основе определенных характерных черт, как мы можем включить это в «компьютерное зрение»? Давайте посмотрим на это.

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

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

Следовательно, то, что мы воспринимаем как черно-белое изображение на наших экранах, становится для компьютера двумерной матрицей целых чисел в пикселях. Если мы имеем дело с простым 1-битным изображением, состоящим из некоторой белой фигуры на черном фоне, то интенсивности пикселей «0» и «1» будут представлять черный и белый цвета соответственно. Если мы имеем дело со сложным 8-битным изображением, то интенсивность пикселей будет варьироваться от «0» до «255» (поскольку 2⁸ = 256) с целыми числами 0 и 255, представляющими крайние точки (светлые и темные) на цветовой шкале. . Но как мы можем применить ту же технику к цветным изображениям?

Для этого нам нужно обратиться к цветовой модели RGB. В соответствии с этим каждый цвет представляет собой просто уникальную комбинацию цветов «красный, зеленый и синий». Например, розовый цвет представлен как «RGB (255 192 203)», что означает, что пиксель розового цвета может быть получен путем объединения трех пикселей красного, зеленого и синего цветов с интенсивностью 255, 192 и 203 соответственно. Следовательно, цветное изображение может восприниматься компьютером как комбинация трех матриц, где каждая матрица представляет собой распределение пикселей по двумерному пространству для каждого из цветов RGB. Это трехмерное представление цветных изображений обычно называют «тензором третьего порядка», что является просто общим термином для описания нескольких двумерных матриц, сгруппированных вместе.

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

Изображение может быть 1-битным, 8-битным, 16-битным или даже 32-битным, что означает, что интенсивности отдельных пикселей, которые мы можем передать в нейронную сеть, не всегда являются простыми одномерными нулями и единицами. Здесь пригодится сверточная часть нейронных сетей.

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

i) Размер входного изображения уменьшается за счет уменьшения количества пикселей.

ii) Позже это уменьшенное изображение проходит через функцию «сжатия», целью которой является сокращение интенсивности пикселей между значениями 0 и 1.

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

Теперь давайте взглянем на архитектуру простой CNN ниже:

Входной слой -> Сверточный слой -> объединяющий слой -> сглаживающий слой -> полносвязный слой -> выходной

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

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

Входной слой — › Первый сверточный слой — › Первый объединяющий слой — › Второй сверточный слой — › второй объединяющий слой — › сглаживающий слой — › полносвязный слой — › выходной

Теперь, когда у нас есть общее представление об архитектуре CNN, давайте попробуем кратко понять каждый уровень.

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

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

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

Давайте попробуем изучить масштаб, используемый сверточным слоем, прежде чем мы перейдем к части измерения. Масштаб в этом контексте называется картой признаков, фильтром или ядром и обычно представляет собой матрицу пикселей. Эти пиксели случайным образом изменяются моделью для создания нескольких карт объектов. Нам нужно будет ввести форму для каждой из этих матриц (количество строк X количество столбцов) и количество таких матриц, которые будут использоваться моделью на этом уровне.

Эти карты функций используются для измерения отдельных функций входного изображения. Для этой цели между входными данными и каждой из этих карт объектов применяется операция свертки, что в конечном итоге приводит к множеству выходных данных. Обратите внимание, что количество этих выходных данных будет таким же, как количество масштабов объектов, которые мы передали в качестве входных данных для этого слоя. Эту операцию свертки лучше всего объяснить визуально, а не описательно, поэтому, пожалуйста, взгляните на это ГЕНИАЛЬНО ОБЪЯСНЕННОЕ ВИДЕО ВЫСОКОГО УРОВНЯ ИНТУИЦИИ на канале YouTube интуитивное машинное обучение.

Размер карт объектов, которые мы передаем этому слою, остается меньше, чем размер входных данных, чтобы позже получить уменьшенный размер на выходе. Если наше входное изображение имеет размер 256X256 и если мы выбираем объекты размером 125X125, то машина генерирует несколько карт объектов с различными комбинациями пикселей в пределах этого пространства 125X125. Каждый из этих фильтров 125X125 применяется к входному изображению 256X256 для выполнения операции свертки, которая дает выходной размер (256–125+1)X(256–125+1), т. е. 132X132.

Следовательно, этот начальный сверточный слой генерирует несколько выходных данных для одного входного значения. Каждый из этих выходных данных имеет меньший размер, чем исходный входной, но обогащен некоторыми специфическими функциями из-за операции свертки. Кроме того, прежде чем эти выходные данные будут переданы на следующий уровень для операции объединения, к ним применяется функция сжатия (также называемая функцией активации), чтобы ограничить диапазон интенсивностей пикселей от 0 до 1. Проверьте ЭТО СТАТЬЯ, чтобы узнать больше о таких функциях.

Объединяющий слой:

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

Как и операцию свертки, операцию объединения можно лучше понять с помощью визуального объяснения. Поэтому обязательно посмотрите ЭТО ВИДЕО с того же канала YouTube.

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

I) Дальнейшее увеличение количества выходов

II) уменьшение размера каждого из этих выходов

III) Обогащение выходов более возможными функциями.

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

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

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

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