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

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

Компьютерные алгоритмы зрения были далеко не такими сложными, как наши биологические алгоритмы. Так было до сих пор.

Искусственные нейронные сети применительно к зрению

(Если вы еще не знакомы с нейронными сетями, пожалуйста, сначала прочтите этот пост, чтобы быстро познакомиться с удивительным миром ИНС)

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

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

Сверточные нейронные сети, также известные как ConvNets или CNN, являются одними из наиболее эффективных вычислительных моделей для выполнения определенных задач, таких как распознавание образов. Тем не менее, несмотря на их важность для начинающих разработчиков, многие из них не могут понять, что такое CNN и как они работают. Чтобы раскрыть тайну, мы будем работать с обычным применением CNN в компьютерном зрении, которое начинается с матрицы пикселей. Затем мы пройдемся слой за слоем, и операция за операцией, через глубокую структуру CNN, наконец, придя к ее выходу: идентификации облака, кошки, дерева или чего-то еще, что CNN лучше всего догадывается о том, чему они являются свидетелями.

Архитектура высокого уровня CNN

источник: ResearchGate.com

Здесь вы можете увидеть концептуальную архитектуру типичной (простой) CNN. Чтобы дать разумную интерпретацию того, что она видит, CNN выполняет четыре основных операции, каждая из которых соответствует типу слоя, обнаруженного в ее сети.

Эти четыре основные операции (проиллюстрированные выше) в CNN:

  1. Слой свертки
  2. Функция активации ReLU
  3. Слой объединения / субдискретизации
  4. Полностью подключенная ИНС (классификационный уровень)

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

Вход: матрица пикселей

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

Слой свертки

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

источник: i.stack.imgur.com/GvsBA.jpg

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

Полный процесс свертки требует довольно сложной математики. Тем не менее, мы все еще можем понять это с концептуальной точки зрения, лишь попутно коснувшись математики. Для начала, каждая единица сверточного слоя имеет тот же набор весов, который он использует для распознавания определенного шаблона. Этот набор весов обычно изображается как небольшая квадратная матрица значений. Маленькая матрица взаимодействует с большей пиксельной матрицей, составляющей исходное изображение. Например, если небольшая матрица, технически называемая ядром свертки, представляет собой матрицу весов 3 x 3, то она будет охватывать массив пикселей 3 x 3 на изображении. Естественно, существует взаимно однозначная связь с точки зрения размера между ядром свертки 3 x 3 и частью изображения 3 x 3, которое оно покрывает. Имея это в виду, вы можете легко умножить веса в ядре на соответствующие значения пикселей в разделе текущего изображения. Сумма этих продуктов, технически называемая скалярным произведением, генерирует одно значение пикселя, которое система присваивает этому разделу новой отфильтрованной версии изображения. Это отфильтрованное изображение, известное как карта функций, затем служит входными данными для следующего слоя в ConvNet, описанного ниже.

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

Функция активации ReLU

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

источник: datasciencecentral.com

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

Слой объединения

Чем более сложные шаблоны ищет CNN, тем больше требуется слоев свертки и ReLU. Однако по мере того, как слой за слоем постепенно добавляются, вычислительная сложность быстро становится громоздкой.

источник: wiki.tum.de

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

Уровень классификации

Наконец, CNN требуется один или несколько слоев для классификации вывода всех предыдущих слоев по категориям, таким как облако, кошка или дерево.

Наиболее очевидной характеристикой, которая отличает уровень классификации от других уровней в CNN, является то, что уровень классификации полностью связан. Это означает, что она напоминает классическую нейронную сеть (которую мы обсуждали в части 2), в которой блоки на каждом уровне связаны со всеми блоками на соседних уровнях. Соответственно, уровни классификации часто называют полносвязными уровнями или FC.

Глубина и сложность

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

Раскрытие тайны CNN

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

источник: computervisionblog.com

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

источник: mdpi.com

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

Как всегда, большое спасибо за чтение! Скажите, пожалуйста, что вы думаете или хотели бы, чтобы я написал дальше в комментариях. Я тоже открыт для критики!

Если вы потратите время, чтобы «поставить лайк» или «поделиться» статьей, это будет много значить для меня. Я пишу бесплатно в свободное время, потому что мне нравится говорить о технологиях, и чем больше людей читают мои статьи, тем с большим количеством людей я могу пообщаться!

Спасибо и хорошего дня!

Присоединяйтесь к 30 000+ людям, которые читают еженедельную рассылку Машинное обучение, чтобы понять, как ИИ повлияет на их работу и жизнь.