Визуальное объяснение концепций, которые заставляют работать сверточные нейронные сети, и их интуиции.
Почему работают сверточные сети? В чем заключается магия, которая позволяет нам добиваться успеха в широком спектре приложений, таких как классификация изображений, обнаружение объектов, распознавание лиц и т. Д.?
Оказывается, все это возможно благодаря двум удивительно простым, но мощным концепциям: свертка и объединение.
В этом посте я попытаюсь объяснить их действительно интуитивно и наглядно, оставив математику позади. Я нашел в Интернете много документации с прочной математической основой, но я думаю, что основные идеи иногда размываются во всех формулах и расчетах.
Все примеры, которые мы рассмотрим в этом посте, можно найти в этой записной книжке.
Свертки: все дело в фильтрах
Первое ключевое понятие, которое нам необходимо понять, - это операция свертки. Это просто: мы применим к изображению фильтр, чтобы получить изображение в результате.
В качестве примера предположим, что у нас есть входное изображение и фильтр:
Помните, что любое изображение можно представить в виде матрицы пикселей, где каждый пиксель представляет интенсивность цвета:
Свертка делает следующее:
То есть мы строим другое изображение, применяя фильтр к нашему входному изображению. Обратите внимание, что в зависимости от применяемого фильтра (его формы и значений) мы получим другое изображение.
Но зачем нам это делать? Похоже, в этом нет особого смысла!
На самом деле в этом есть большой смысл. Чтобы понять почему, давайте рассмотрим простое изображение черно-белой сетки.
(Обратите внимание, что это больше не матрица. На самом деле это изображение)
И примените к нему несколько фильтров:
Мы видим, что с этим конкретным фильтром выходное изображение содержит только вертикальные края. Попробуем еще:
В этом случае на выходном изображении мы получаем только горизонтальные линии. Другой другой фильтр позволяет нам подчеркнуть края независимо от ориентации:
И, очевидно, мы можем применить фильтр, который оставит исходное изображение таким же:
В этом заключается идея фильтров, и теперь вы можете лучше понять, почему они так называются: они позволяют нам сохранять какую-то информацию из изображения и игнорировать прочее. И это возможно из-за того, как работает операция свертки.
Но давайте попробуем с другим изображением, чтобы узнать больше о фильтрах:
Если вы внимательно посмотрите на результат, вы увидите, что вертикальные линии удалены, а горизонтальные остались. Но интересной деталью является то, что, поскольку это изображение выполнено в изометрической перспективе, нет ни одной чистой горизонтальной линии.
Однако свертка способна обрабатывать перспективу и показывает линии, которые на самом деле являются горизонтальными, хотя перспектива не показывает их в таком виде.
Наконец, давайте возьмем реальное изображение и применим несколько фильтров, чтобы увидеть, что мы получим. Для пояснения мы получим черно-белую фотографию, но для цветных изображений интуиция почти такая же.
Давайте применим несколько фильтров и посмотрим, что произойдет:
Как мы и ожидали, мы извлекаем из изображения только ту информацию, которая нам нужна, в зависимости от применяемого фильтра.
Теперь, когда мы понимаем, как работает свертка, давайте представим еще одну идею, которая делает ее еще более мощной: объединение.
Объединение: увеличение мощности сверток
Концепция пула проста:
То есть мы собираемся взять группы пикселей (например, группы 2x2 пикселей) и выполнить агрегацию по ним. Одна из возможных агрегаций, которую мы можем сделать, - это взять максимальное значение пикселей в группе (это известно как Максимальное объединение). Еще одна распространенная агрегация - это усреднение (Среднее объединение).
Но, опять же, есть ли в этом смысл? Чтобы ответить на вопрос, давайте возьмем одно из предыдущих изображений и применим к нему 2x2 max pooling:
Мы видим две вещи:
- Прежде всего, размер изображения уменьшается вдвое: если взять группы по 2x2 пикселя и сохранить только максимум, теперь изображение становится вдвое больше.
- Края, которые мы сохранили при применении свертки с фильтром вертикальных краев, не только сохраняются, но также усиливаются.
Это означает, что мы смогли уменьшить информацию, содержащуюся в изображении (сохранив только половину пикселей), но при этом сохранили и усилили полезные функции, которые фильтры показывают при свертке изображения.
Как это вписывается в сверточную нейронную сеть?
В заключение я дам интуитивно понятное объяснение того, как эти две идеи строятся внутри сверточных нейронных сетей. Опять же, я не буду вдаваться в математические подробности, поскольку это выходит за рамки цели данной статьи.
Базовую сверточную нейронную сеть можно рассматривать как последовательность слоев свертки и слоев пула. Когда изображение проходит через них, важные функции сохраняются в слоях свертки, а благодаря слоям объединения эти функции усиливаются и сохраняются в сети, в то время как отбрасывание всей информации, которая не имеет значения для задачи.
Эти важные функции могут быть от отдельных линий или краев (как мы видели в примерах), до более сложных элементов (например, уши собаки), пока мы путешествуем по нейронной сети.
И есть небольшая, но важная деталь: применяя свертки в примерах, которые мы видели, мы выбрали фильтр, а затем наблюдали результат. На практике, если, например, мы выполняем задачу классификации изображений, сеть узнает, какие фильтры позволяют нам извлекать наиболее важные функции, чтобы различать классы в нашем наборе обучающих данных.
Попробуйте сами
Я создал блокнот, чтобы вы могли попробовать все эти идеи на себе. Вы можете загрузить желаемое изображение и попробовать на него действие различных фильтров и пулов.
Записную книжку можно найти здесь.
Я рекомендую запустить его в Google Colab, чтобы вам не пришлось устанавливать все необходимые зависимости на свой компьютер.
Прочитав этот пост, я надеюсь, вы узнали интуицию о том, как работают свертки и пулы и почему они полезны в CNN. В следующем посте мы более подробно рассмотрим, как изображения проходят через слои CNN и как функции извлекаются на каждом этапе.
Заявление об ограничении ответственности: эта статья дает интуитивное представление о том, как работают сверточные нейронные сети. Для простоты объяснения я пропустил некоторые концепции, такие как обработка различных каналов в цветных изображениях, шагах, отступах и т. Д. Эти концепции важны для полного понимания CNN, поэтому не забывайте о них! Вдобавок этот пост был вдохновлен специализацией deeplearning.ai TensorFlow на практике, которая дает отличное объяснение интуиции, лежащей в основе CNN.