Блог

Взяв извилин глубину и кишечника длину


Юбилейные врачи. ОЧЕНЬ СМЕШНАЯ Сценка-поздравление на юбилее



ЗВУК СИРЕНЫ. Появляются 2-3 медика в белых халатах, с клизмой, с грелкой,

большим нарисованным на картоне градусником. (Возможны голубенькие шапочки, очки, стетоскоп)

Мы, бригада юбилейных медработников, в течении 55 лет проводили наблюдения за жизнедеятельностью уважаемой ЮБИЛЯРШИ!
и после проведения консилиума вынесли вердикт. Весь консилиум врачей,
Что пришел на праздник сей,
Юбиляршу осмотрел,
И, конечно, обалдел! Ухо, горло, нос, печенку,
Сердце, почки, селезенку,
Оценили и мозги
На предмет хандры, тоски.
Взяв извилин глубину,
И кишечника длину,
Просчитав обмен веществ,
Ширину отверстий всех,
Вывод сделали такой:
ЮБИЛЯРША – то МОЛОДАЯ! В целом данный экземпляр
Бодра, здорова, совсем не стара.
Мы выносим заключенье:
Не нуждается в леченье!
Разве только отдохнуть,
Может на море махнуть.
На озера разливные,
На Сибирские пески.
Иль конечно на фазенде,
На лужайке, под кусты! Не болея, не тоскуя,
Долго жить рекомендуем.
При активнейшем режиме
Бурной жизнью одержимо,
Спортом, сексом и трудом,
Полной чашей будет дом! Медицинская карта юбиляра:

Ф.и.о.: -----

Возраст: цветущий.

Пульс: бьет фонтаном

Группа крови: много красных телец, про таких говорят: «кровь с молоком».

Ритм сердца: душевный

Тонус жизни: разносторонний.

Слух: универсальный.

Зрение: четко подмечает даже мелочи,

Обоняние: чувствует тонко, откуда и куда дует ветер; определит с ошибкой в 5%, что пил муж.

Болезни: почему- то впадает в спячку после сытного обеда, роскошного ужина и каждый день в 21.00

Режим: ходячий, вперемежку с сидячим, а в последнее время все чаще лежачий.

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



Комплексное введение в различные типы сверток в глубоком обучении | by Kunlun Bai

Другой пример многоканальных данных - это слои в сверточной нейронной сети. Слой сверточной сети обычно состоит из нескольких каналов (обычно сотен каналов). Каждый канал описывает разные аспекты предыдущего уровня. Как сделать переход между слоями с разной глубиной? Как преобразовать слой с глубиной n в следующий слой с глубиной m ?

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

Разница между «слоем» («фильтром») и «каналом» («ядром»).

Разница между фильтром и ядром немного сложна. Иногда они используются как синонимы, что может создать путаницу. По сути, эти два термина имеют тонкое различие. «Ядро» относится к двумерному массиву весов. Термин «фильтр» относится к трехмерным структурам нескольких ядер, уложенных вместе. Для 2D-фильтра фильтр такой же, как и ядро. Но для 3D-фильтра и большинства сверток в глубоком обучении, фильтр - это набор ядер. Каждое ядро ​​уникально, подчеркивая разные аспекты входного канала .

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

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

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

Затем эти три канала суммируются (поэлементное сложение), образуя один единственный канал (3 x 3 x 1).Этот канал является результатом свертки входного слоя (матрица 5 x 5 x 3) с использованием фильтра (матрица 3 x 3 x 3).

Второй шаг двумерной свертки для многоканальных каналов: затем эти три канала суммируются (поэлементное сложение), образуя один единственный канал. Изображение взято из этой ссылки.

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

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

Теперь мы можем увидеть, как можно делать переходы между слоями с разной глубиной. Допустим, входной слой имеет каналов Din , и мы хотим, чтобы выходной слой имел каналов Dout .Что нам нужно сделать, так это просто применить фильтры Dout к входному слою. Каждый фильтр имеет ядер Din . Каждый фильтр имеет один выходной канал. После применения фильтров Dout у нас есть каналов Dout , которые затем можно сложить вместе, чтобы сформировать выходной слой.

Стандартная 2D свертка. Отображение одного слоя с глубиной Din на другой слой с глубиной Dout с помощью фильтров Dout .

На последней иллюстрации в предыдущем разделе мы видим, что фактически выполняли свертку в трехмерный объем.Но обычно мы по-прежнему называем эту операцию двумерной сверткой в ​​глубоком обучении. Это двухмерная свертка трехмерных объемных данных. Глубина фильтра такая же, как и глубина входного слоя. 3D-фильтр перемещается только в двух направлениях (высота и ширина изображения). Результатом такой операции является 2D-изображение (только с 1 каналом).

Естественно, есть 3D свертки. Они являются обобщением двумерной свертки. Здесь при трехмерной свертке глубина фильтра меньше глубины входного слоя (размер ядра <размер канала).В результате 3D-фильтр может перемещаться во всех 3-х направлениях (высота, ширина, канал изображения) . В каждой позиции поэлементное умножение и сложение дает одно число. Поскольку фильтр скользит в трехмерном пространстве, выходные числа также располагаются в трехмерном пространстве. На выходе получаются трехмерные данные.

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

Подобно двумерным сверткам, которые кодируют пространственные отношения объектов в двумерной области, трехмерные свертки могут описывать пространственные отношения объектов в трехмерном пространстве. Такое трехмерное соотношение важно для некоторых приложений, таких как трехмерные сегменты / реконструкции биомедицинского воображения, например КТ и МРТ, когда объекты, такие как кровеносные сосуды, извиваются в трехмерном пространстве.

Поскольку мы говорили об операции по глубине в предыдущем разделе трехмерной свертки, давайте рассмотрим еще одну интересную операцию - свертку 1 x 1.

Вы можете спросить, почему это полезно. Мы просто умножаем число на каждое число во входном слое? Да и нет. Для слоев с одним каналом операция тривиальна. Здесь мы умножаем каждый элемент на число.

Все становится интересно, если входной слой имеет несколько каналов. На следующем рисунке показано, как свертка 1 x 1 работает для входного слоя с размерами H x W x D.После свертки 1 x 1 с размером фильтра 1 x 1 x D выходной канал будет иметь размер H x W x 1. Если мы применим N таких сверток 1 x 1, а затем объединим результаты вместе, у нас может быть выходной слой с размером H. x W x N.

Свертка 1 x 1, где размер фильтра 1 x 1 x D.

Изначально свертки 1 x 1 были предложены в документе «Сеть в сети». Затем они широко использовались в статье Google Inception. Несколько преимуществ сверток 1 x 1:

  • Уменьшение размерности для эффективных вычислений
  • Эффективное низкоразмерное встраивание или объединение признаков
  • Повторное применение нелинейности после свертки

Первые два преимущества можно увидеть на изображении выше.После свертки 1 x 1 мы значительно уменьшаем размерность по глубине. Скажем, если исходный вход имеет 200 каналов, свертка 1 x 1 встроит эти каналы (функции) в один канал. Третье преимущество заключается в том, что после свертки 1 x 1 может быть добавлена ​​нелинейная активация, такая как ReLU. Нелинейность позволяет сети изучать более сложные функции.

Эти преимущества были описаны в документе Google Inception как:

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

Это приводит ко второй идее предложенной архитектуры: разумное применение уменьшения размерности и проекции везде, где в противном случае вычислительные требования слишком сильно увеличились бы. Это основано на успешности внедрения: даже низкоразмерные вложения могут содержать много информации об относительно большом фрагменте изображения ... То есть свертки 1 x 1 используются для вычисления сокращений перед дорогостоящими свертками 3 x 3 и 5 x 5. Помимо использования в качестве редукторов, они также включают использование выпрямленной линейной активации, что делает их двойными.

Один интересный взгляд на свертку 1 x 1 принадлежит Янну Лекуну: «В сверточных сетях нет такого понятия, как« полносвязные слои ». Есть только слои свертки с ядрами свертки 1x1 и полная таблица соединений ».

Теперь мы знаем, как работать с глубиной свертки. Давайте перейдем к разговору о том, как обрабатывать свертку в двух других направлениях (высоте и ширине), а также о важной арифметике свертки.

Вот несколько терминов:

  • Размер ядра: ядро ​​обсуждалось в предыдущем разделе.Размер ядра определяет поле обзора свертки.
  • Шаг: определяет размер шага ядра при перемещении по изображению. Шаг 1 означает, что ядро ​​скользит по изображению пиксель за пикселем. Шаг 2 означает, что ядро ​​скользит по изображению, перемещая 2 пикселя за шаг (то есть пропускает 1 пиксель). Мы можем использовать stride (> = 2) для уменьшения разрешения изображения.
  • Padding: заполнение определяет, как обрабатывается граница изображения. Свертка с заполнением («одинаковое» заполнение в Tensorflow) будет сохранять пространственные выходные размеры равными входному изображению, при необходимости добавляя 0 вокруг входных границ.С другой стороны, свертка без дополнений («допустимое» заполнение в Tensorflow) выполняет свертку только для пикселей входного изображения, без добавления 0 вокруг входных границ. Размер вывода меньше размера ввода.

На следующем рисунке описана двумерная свертка с размером ядра 3, шагом 1 и отступом 1.

Есть отличная статья о подробной арифметике («Руководство по арифметике свертки для глубокого обучения»). К нему можно обратиться за подробным описанием и примерами различных комбинаций размера ядра, шага и заполнения.Здесь я просто суммирую результаты для самого общего случая.

Для входного изображения с размером i, размером ядра k, заполнением p и шагом s, выходное изображение из свертки имеет размер o:

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

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

Транспонированная свертка также известна в литературе как деконволюция или свертка с дробным шагом. Однако стоит отметить, что название «деконволюция» менее уместно, поскольку транспонированная свертка не является реальной деконволюцией, как это определено в обработке сигнала / изображения. С технической точки зрения, деконволюция в обработке сигналов обращает операцию свертки. Здесь дело обстоит не так. Из-за этого некоторые авторы категорически против называть транспонированную свертку деконволюцией.Люди называют это деконволюцией в основном из-за простоты. Позже мы увидим, почему называть такую ​​операцию транспонированной сверткой естественно и более уместно.

Всегда можно реализовать транспонированную свертку с прямой сверткой. В качестве примера на изображении ниже мы применяем транспонированную свертку с ядром 3 x 3 к входу 2 x 2, дополненному границей 2 x 2 из нулей с использованием единичных шагов. Выходной сигнал с повышающей дискретизацией имеет размер 4 x 4.

Повышающая дискретизация входа 2 x 2 до выхода 4 x 4.Изображение взято из этой ссылки.

Интересно, что одно и то же входное изображение 2 x 2 можно сопоставить с изображением другого размера, применив причудливые отступы и шаг. Ниже транспонированная свертка применяется к тому же входу 2 x 2 (с 1 нулем, вставленным между входами), дополненному границей нулей 2 x 2 с использованием единичных шагов. Теперь выход имеет размер 5 x 5.

Повышающая дискретизация входа 2 x 2 до выхода 5 x 5. Изображение взято из этой ссылки.

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

При свертке определим C как наше ядро, Large как входное изображение, Small как выходное изображение из свертки. После свертки (матричного умножения) мы понижаем дискретизацию большого изображения до небольшого выходного изображения. Реализация свертки при матричном умножении выглядит следующим образом: C x Large = Small .

В следующем примере показано, как работает такая операция. Он сглаживает входные данные до матрицы 16 x 1 и преобразует ядро ​​в разреженную матрицу (4 x 16). Затем между разреженной матрицей и сглаженным входом применяется матричное умножение. После этого результирующая матрица (4 x 1) преобразуется обратно в выходной файл 2 x 2.

Умножение матрицы для свертки: от большого входного изображения (4 x 4) до малого выходного изображения (2 x 2).

Теперь, если мы умножим транспонирование матрицы CT на обе стороны уравнения и воспользуемся тем свойством, что умножение матрицы на ее транспонированную матрицу дает единичную матрицу, тогда мы получим следующую формулу CT x Small = Большой, как показано на рисунке ниже.

Умножение матрицы для свертки: от маленького входного изображения (2 x 2) до большого выходного изображения (4 x 4).

Как вы можете видеть здесь, мы выполняем повышающую дискретизацию с маленького изображения до большого изображения. Это то, чего мы хотим достичь. И теперь вы также можете увидеть, откуда произошло название «транспонированная свертка».

Общую арифметику транспонированной свертки можно найти в Отношениях 13 и 14 в этой замечательной статье («Руководство по арифметике свертки для глубокого обучения»).

6.1. Артефакты шахматной доски.

Одно неприятное поведение, которое люди наблюдают при использовании транспонированной свертки, - это так называемые артефакты шахматной доски.

Несколько примеров артефактов шахматной доски. Изображения взяты из этого документа.

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

Артефакты шахматной доски являются результатом «неравномерного перекрытия» транспонированной свертки.Такое перекрытие в одних местах дает больше метафорической краски, чем в других.

На изображении ниже верхний слой является входным, а нижний слой - выходным после транспонированной свертки. Во время транспонированной свертки слой небольшого размера отображается на слой большего размера.

В примере (а) шаг равен 1, а размер фильтра - 2. Как показано красным, первый пиксель на входе отображается на первый и второй пиксели на выходе. Как показано зеленым, второй пиксель на входе отображается на второй и третий пиксели на выходе.Второй пиксель на выходе получает информацию как от первого, так и от второго пикселей на входе. В целом пиксели в средней части вывода получают одинаковое количество информации от ввода. Здесь есть область, где ядра перекрываются. Когда размер фильтра увеличивается до 3 в примере (b), центральная часть, которая принимает большую часть информации, сжимается. Но это может не иметь большого значения, так как перекрытие все равно ровное. Пиксели в центральной части вывода получают одинаковое количество информации от ввода.

Изображение заимствовано и изменено из статьи (ссылка).

Теперь для примера ниже мы изменим stride = 2. В примере (a), где размер фильтра = 2, все пиксели на выходе получают одинаковое количество информации от входа. Все они получают информацию от одного пикселя на входе. Здесь нет перекрытия транспонированной свертки.

Изображение заимствовано и изменено из бумаги (.

Введение в различные типы сверток в глубоком обучении | Автор: Paul-Louis Pröve

Позвольте мне дать вам краткий обзор различных типов сверток и их преимуществ. Для простоты я сосредоточусь только на двумерных свертках.

Сначала нам нужно согласовать несколько параметров, которые определяют сверточный слой.

2D свертка с размером ядра 3, шагом 1 и заполнением
  • Размер ядра : Размер ядра определяет поле обзора свертки.Обычный выбор для 2D - 3, то есть 3x3 пикселя.
  • Шаг : Шаг определяет размер шага ядра при обходе изображения. Хотя по умолчанию он обычно равен 1, мы можем использовать шаг 2 для понижающей дискретизации изображения, аналогичного MaxPooling.
  • Padding : Padding определяет, как обрабатывается граница образца. Свертка с заполнением (наполовину) будет сохранять пространственные выходные размеры равными входным, тогда как свертки без заполнения будут обрезать некоторые границы, если ядро ​​больше 1.
  • Входные и выходные каналы : сверточный слой принимает определенное количество входных каналов (I) и вычисляет определенное количество выходных каналов (O). Необходимые параметры для такого слоя можно вычислить как I * O * K, где K равно количеству значений в ядре.

(a.k.a. atrous свертки)

2D-свертка с использованием ядра 3 со скоростью расширения 2 и без заполнения

Расширенные свертки вводят еще один параметр для сверточных слоев, называемый скоростью расширения .Это определяет интервал между значениями в ядре. Ядро 3x3 с коэффициентом расширения 2 будет иметь такое же поле зрения, что и ядро ​​5x5, при использовании только 9 параметров. Представьте, что вы берете ядро ​​5x5 и удаляете каждый второй столбец и строку.

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

(также известные как деконволюция или свертки с дробным шагом)

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

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

2D-свертка без отступов, шаг 2 и ядро ​​3

На этом этапе вы должны сильно запутаться, поэтому давайте рассмотрим конкретный пример.Изображение размером 5x5 загружается в сверточный слой. Шаг установлен на 2, заполнение отключено, а ядро ​​- 3x3. В результате получается изображение 2x2.

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

Транспонированная двумерная свертка без заполнения, шаг 2 и ядро ​​3

Транспонированная свертка этого не делает.Единственное, что объединяет, - это гарантия того, что на выходе также будет изображение 5x5, при этом выполняется обычная операция свертки. Чтобы добиться этого, нам нужно выполнить некоторые причудливые отступы на входе.

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

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

В разделяемой свертке мы можем разделить операцию ядра на несколько шагов. Представим свертку как y = conv (x, k) , где y - выходное изображение, x - входное изображение, а k - ядро. Легко. Затем предположим, что k можно вычислить по формуле: k = k1.dot (k2) . Это сделало бы его разделяемой сверткой, потому что вместо двумерной свертки с k мы могли бы получить тот же результат, выполнив 2 одномерных свертки с k1 и k2.

Фильтры Sobel X и Y

Возьмем, к примеру, ядро ​​Sobel, которое часто используется при обработке изображений. Вы можете получить такое же ядро, умножив вектор [1, 0, -1] и [1,2,1] .T. Это потребует 6 вместо 9 параметров при выполнении той же операции. В приведенном выше примере показана так называемая пространственная разделяемая свертка , которая, насколько мне известно, не используется в глубоком обучении.

Редактировать: На самом деле, можно создать что-то очень похожее на пространственную разделяемую свертку, сложив слой ядра 1xN и Nx1.Недавно это было использовано в архитектуре под названием EffNet , показав многообещающие результаты.

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

Допустим, у нас есть сверточный слой 3x3 на 16 входных и 32 выходных каналах.В деталях происходит то, что каждый из 16 каналов проходит через 32 ядра 3x3, что приводит к 512 (16x32) картам функций. Затем мы объединяем 1 карту функций из каждого входного канала, складывая их. Поскольку мы можем сделать это 32 раза, мы получаем 32 желаемых выходных канала.

Для разделимой по глубине свертки в том же примере мы просматриваем 16 каналов с 1 ядром 3x3 в каждом, что дает нам 16 карт характеристик. Теперь, прежде чем что-либо объединять, мы просматриваем эти 16 карт функций с 32 свертками 1x1 каждая и только затем начинаем их складывать.В результате получается 656 (16x3x3 + 16x32x1x1) параметров, а не 4608 (16x32x3x3) параметров, указанных выше.

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

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

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

.

интуитивно понятные свертки для глубокого обучения | автор: Irhum Shafkat

Для сетки, не содержащей краев (например, фон неба), большинство пикселей имеют одно и то же значение, поэтому общий вывод ядра в этой точке равен 0. Для сетки с вертикальным краем существует разница между пикселями слева и справа от края, и ядро ​​вычисляет, что разница не равна нулю, активируя и открывая края. Ядро работает только с сетками 3x3 за раз, обнаруживая аномалии в локальном масштабе, но при применении ко всему изображению этого достаточно, чтобы обнаружить определенную особенность в глобальном масштабе, в любом месте изображения!

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

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

Визуализация функций для 3 различных каналов из 1-го сверточного слоя GoogLeNet [3]. Обратите внимание, что, хотя они обнаруживают разные типы краев, они по-прежнему являются детекторами краев низкого уровня.Особенность Визуализация канала 12 из 2-й и 3-й сверток [3]

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

Тем не менее, какими бы глубокими ни были наши детекторы признаков, без каких-либо дальнейших изменений они все равно будут работать с очень небольшими участками изображения. Независимо от глубины ваших детекторов, вы не можете обнаружить лица по сетке 3 × 3. И здесь появляется идея восприимчивого поля.

Восприимчивое поле

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

Идея последовательной свертки заключается в том, что мы обрабатываем слайды только на фиксированном расстоянии друг от друга и пропускаем те, которые находятся в середине. С другой точки зрения, мы сохраняем только выходные данные на фиксированном расстоянии друг от друга, а остальные удаляем [1].

Свертка 3 × 3, шаг 2

Затем мы применяем нелинейность к выходным данным и, как обычно, затем накладываем еще один новый слой свертки поверх. И вот здесь все становится интересно. Даже если бы мы применили ядро ​​того же размера (3 × 3), имеющее ту же локальную область, к выходу последовательной свертки, ядро ​​имело бы большее эффективное принимающее поле:

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

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

Функция визуализации каналов из каждого из основных наборов блоков свертки, показывающая прогрессивное увеличение сложности [3]

Это расширение воспринимающего поля позволяет слоям свертки комбинировать низкие выровнять объекты (линии, края) на объекты более высокого уровня (кривые, текстуры), как мы видим в слое mixed3a.

Далее следует объединяющий / чередующийся слой, сеть продолжает создавать детекторы для объектов еще более высокого уровня (частей, паттернов), как мы видим для mixed4a.

Повторное уменьшение размера изображения по сети приводит к тому, что к 5-му блоку сверток входные размеры составляют всего 7 × 7 по сравнению с входными 224 × 224. На этом этапе каждый одиночных пикселей представляет собой сетку размером 32 × 32 пикселя, которая огромна.

По сравнению с предыдущими слоями, где активация означала обнаружение края, здесь активация на крошечной сетке 7 × 7 является одной для объекта очень высокого уровня, например для птиц.

Сеть в целом развивается от небольшого количества фильтров (64 в случае GoogLeNet), обнаруживающих низкоуровневые функции, до очень большого количества фильтров (1024 в окончательной свертке), каждый из которых ищет исключительно определенный высокий уровень. характерная черта. За ним следует последний слой объединения, который сворачивает каждую сетку 7 × 7 в один пиксель, каждый канал представляет собой детектор признаков с воспринимающим полем, эквивалентным полному изображению .

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

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

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

Заключительное примечание о враждебных атаках

При построении визуальной иерархии CNN вполне разумно предположить, что их системы зрения похожи на человеческие. И они действительно хороши с изображениями реального мира, но они также терпят неудачу, что убедительно свидетельствует о том, что их системы зрения не совсем человеческие.Самая большая проблема: состязательные примеры [4], примеры, которые были специально модифицированы, чтобы обмануть модель.

Для человека оба изображения, очевидно, являются пандами. Для модели не очень. [4]

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

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

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

Ссылки

  1. Руководство по сверточной арифметике для глубокого обучения
  2. CS231n Сверточные нейронные сети для визуального распознавания - Сверточные нейронные сети
  3. Визуализация функций - Как нейронные сети формируют свое понимание изображений (примечание: визуализации функций здесь были произведено с использованием библиотеки Lucid, реализации методов из этой журнальной статьи с открытым исходным кодом)
  4. Атака машинного обучения с помощью состязательных примеров

Дополнительные ресурсы

  1. fast.ai - Урок 3. Улучшение классификатора изображений
  2. Conv Nets: модульная перспектива
  3. Создание мощных моделей классификации изображений с использованием очень небольшого количества данных
.

Страница не найдена · GitHub Pages

Страница не найдена · GitHub Pages

Файл не найден

Сайт, настроенный по этому адресу, не содержать запрошенный файл.

Если это ваш сайт, убедитесь, что регистр имени файла соответствует URL-адресу.
Для корневых URL (например, http://example.com/ ) вы должны предоставить index.html файл.

Прочтите полную документацию для получения дополнительной информации об использовании GitHub Pages .

.

Смотрите также

MAXCACHE: 0.84MB/0.00054 sec