Зачем нам нужны сверточные нейронные сети (CNN)?

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

  1. Классификационные задания: отличить кошку от собаки. Разделение 100 000 изображений на определенные категории.

2. Задачи распознавания. Интересно, как Facebook предлагает правильным людям отмечать фотографии. Как смартфоны используют распознавание лиц для разблокировки вашего устройства.

3. Обнаружение объектов: идентификация интересующих объектов со сцены. Подсчет количества машин на трассе.

4. Обнаружение образов. Обнаружение образов имеет приложения в биологии для обнаружения аномальных или больных клеточных структур. Он применяется на производственных предприятиях для обнаружения дефектных или поврежденных продуктов.

5. Обработка естественного языка: CNN используются для чтения бумажных книг или документов и их классификации в цифровом формате.

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

Что такое сверточная нейронная сеть?

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

Прежде чем объяснять подробности, приведем немного истории:

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

Но одним из самых популярных исследований в этой области стала разработка LeCunn и его компании LeNet-5. в 1997 году. Это была одна из первых сверточных нейронных сетей (CNN), которая была развернута в банках для считывания чеков в режиме реального времени. В нем говорилось, что LeNet-5 прочитал более миллиона чеков. Хотя были и другие алгоритмы, такие как машины с опорным вектором, которые были близки по точности к LeNet-5, утверждалось, что скорость вычислений CNN была экспоненциально выше, чем у других алгоритмов.

Перенесемся в 2010, чтобы поддержать исследования в области компьютерного зрения, родился ImageNet. Imagenet - это хранилище больших наборов данных Image, в котором каждый год проводится открытый конкурс для содействия исследованиям. В 2012 году победителем конкурса ImageNet стала модель Alexnet Алекса Крижевского. AlexNet была моделью CNN, похожей на LeNet-5, но имела большое значение в нескольких отношениях, что повлияло на развитие ИИ.

  1. AlexNet, CNN имеет коэффициент ошибок 15%, что снижает коэффициент ошибок более чем на 10% по сравнению с традиционными моделями.
  2. В модели использовался графический процессор (вместо ЦП) для вычислений с использованием платформы Nvidia CUDA, что делало ее намного быстрее, чем модели, обученные ЦП.
  3. После этого года все победители были моделями CNN с обычно более глубокой архитектурой моделей.

После этого популярными событиями стала разработка Tensor FLow, которая представляет собой бесплатную программную библиотеку с открытым исходным кодом для потока данных, разработанную Google в 2015 году. Tensor flow очень популярен в сообществе Data Science за то, что упростил задачи глубокого обучения.

Итак, как работают CNN?

Чтобы объяснить работу CNN, я хотел бы поделиться типичной архитектурой CNN ниже.

В архитектуре CNN есть определенные базовые уровни.

  1. Вход
  2. Обивка
  3. Свертка + Активация / Relu
  4. Объединение
  5. Сглаживание / Плотность
  6. Полностью подключен + Softmax

Более глубокая модель CNN могла бы иметь больше слоев свертки и объединения в середине, имея аналогичные начальный и конечный уровни. Последний слой имеет столько же параметров, сколько и количество категорий.

Входные данные: входные данные - это изображение определенной категории. Например, в этом случае мы пытаемся найти тип автомобиля. Итак, вход - это изображение автомобиля. Входные данные обычно предварительно обрабатываются в формат многомерного массива. Итак, если разрешение изображения 100x100 и это цветное изображение, формат ввода будет [100,100,3]. Обратите внимание, что [3] соответствует 3 пиксельным каналам: красный, синий и зеленый.

Заполнение: слой заполнения обычно добавляется, чтобы гарантировать, что внешние границы входного слоя не потеряют своих свойств при применении операции свертки. Также это сделано для регулировки размера ввода. Поэтому в большинстве случаев применяется Zero Padding, то есть просто добавляется черное пространство на границах. Таким образом, ZeroPadding [2,2,3] применит черное пространство на входе и изменит форму ввода на [104,104,3]. Обычно заполнение выполняется перед каждым сверточным слоем.

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

Процесс умножения матриц. Представьте, что у нас есть входное изображение 5x5 и фильтр 3x3. Входное изображение имеет фиксированные значения, скажем, от 0 до 1, и значения фильтра выбираются нами для обнаружения некоторых особенностей. Теперь умножение матриц работает, применяя фильтр ко входу и выполняя умножение двух матриц, а затем добавляя

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

Почему мы это делаем?

По сути, эта операция помогает обнаруживать особенности среди входного изображения. Матрица «Карта характеристик» (фильтр) с разными значениями может обнаруживать разные особенности. Например, с левой стороны вы можете увидеть некоторые значения этой матрицы 3x3 и то, как ее изменение может привести к совершенно другим функциям вывода. Вы можете изобразить это как фильтры Instagram, с которыми вы, возможно, знакомы. Слой свертки может иметь несколько карт объектов (или фильтров) в каждом слое и поэтому может производить столько же выходных данных.

Функция активации (Relu): после применения сверточной функции к выходным данным добавляется нелинейность. Обычно это делается с помощью функции активации выпрямленного линейного устройства (Relu). Вы можете думать об этом как о передаче на выход только положительных значений при изменении отрицательных значений на 0. Существуют и другие формы функций активации, такие как Sigmoid, Tanh и Softmax. Подробную информацию о функциях активации можно найти здесь.

Объединение. Объединение - это операция, которая оказывает два основных воздействия:

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

Есть несколько популярных операций по объединению: средний пул, максимальный пул и суммарный пул. Из них наиболее широко используется максимальный пул.

Шаг: шаг - это способ, которым свертка работает как в слоях свертки, так и в слоях объединения. Обратите внимание, что в сверточном слое фильтры переместились только на 1 шаг вправо и на 1 шаг вниз. Это потому, что на шаге свертки шаг был равен 1. На этапе объединения фильтр 2x2 переместился на 2 шага вправо и на 2 шага вниз. Это связано с тем, что наш шаг был равен 2. Если бы при объединении в пул применялся фильтр 2x2 к входу 4x4 с шагом = 1, тогда объединенная карта функций имела бы измерение 3x3.

Ниже приведена формула, по которой можно рассчитать выходные размеры:

output_with_stride = floor((input + 2*pad - filter) / stride) + 1

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

Полностью подключено и Softmax (активация):

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

Полностью связанный слой - последний кусок пазла. Он в основном принимает высокоуровневые карты характеристик (нос, уши и т. Д.) В качестве входных данных и решает, какой будет выходная категория.

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

Полностью подключенный уровень имеет функцию активации Softmax в конце, которая гарантирует, что сумма выходных вероятностей из полностью подключенного уровня равна 1. Это последний шаг классификатора и определяет выход.

Ладно!

Вы узнали, как работает сверточная нейронная сеть! Конечно, это был лишь базовый обзор CNN. Если вам интересно узнать больше о фактической реализации CNN, я мог бы порекомендовать несколько ресурсов:

  1. CNN для компьютерного зрения в Стэнфорде
  2. DeepLearnign.AI

Что касается фреймворков для создания CNN, есть 3 очень популярных, и вы можете использовать их в Python среди других языков:

  1. TensorFlow (от Google)
  2. Керас
  3. Pytorch (через facebook)

Личная работа:

Недавно у меня был проект компьютерного зрения с примерно 100 000 изображений, которые были разделены на 15 категорий. Это была задача классификации, и я использовал модель CNN для классификации изображений. Хотя я не могу поделиться изображениями, я поделился ссылкой на приведенный ниже код, если вы хотите взглянуть.



Ссылки:

Https://becominghuman.ai/building-an-image-classifier-using-deep-learning-in-python-totally-from-a-beginners-perspective-be8dbaf22dd8

Https://www.analyticsvidhya.com/blog/2018/12/practical-guide-object-detection-yolo-framewor-python/

Https://medium.com/@RaghavPrabhu/understanding-of-convolutional-neural-network-cnn-deep-learning-99760835f148

Https://towardsdatascience.com/applied-deep-learning-part-4-convolutional-neural-networks-584bc134c1e2#7d8a

Https://towardsdatascience.com/activation-functions-neural-networks-1cbd9f8d91d6

Https://towardsdatascience.com/simple-introduction-to-convolutional-neural-networks-cdf8d3077bac

Https://medium.com/@purnasaigudikandula/a-beginner-intro-to-convolutional-neural-networks-684c5620c2ce

Https://www.superdatascience.com/blogs/convolutional-neural-networks-cnn-step-4-full-connection

📝 Прочтите этот рассказ позже в Журнале.

👩‍💻 Просыпайтесь каждое воскресное утро и слушайте самые интересные истории из области технологий, ожидающие вас в вашем почтовом ящике. Прочтите информационный бюллетень« Примечательно в технологиях .