Сверточный автоэнкодер

искусственный интеллект TensorFlow алгоритм WeChat

Добавить Автора
WeChat и QQ: 862251340
Публичный аккаунт WeChat: coderpai
мой блог:пожалуйста, нажмите здесь

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

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

свертка

图 1. 输入的维度是 4*4*1的,卷积核的维度是 3*3*1的,所以输出的特征图是 2*2*1的

В общем непрерывном состоянии свертка определяется как интеграл произведения двух функций (сигналов) после их обращения и сдвига:

В результате операция свертки дает новую функцию (сигнал). Свертка удовлетворяет операции обмена, поэтому:

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

В двумерном дискретном пространстве операцию свертки можно определить следующим образом:

Поскольку диапазон изображения ограничен, формула может выглядеть так:

в:

  • O(i, j)представляет выходной пиксель, позиция(i, j)

  • 2k+1является ребром, представляющим прямоугольное нечетное ядро ​​свертки

  • FПредставляет ядро ​​свертки

  • Iпредставляет входное изображение

Как показано на рисунке 1, одно ядро ​​свертки работает с входным изображением.Iкаждое местоположение(i, j)Выполните операцию свертки.

图2:利用一个手工制作的卷积核对图片进行卷积操作,从而提取输入图像的边缘

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

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

для квадратного изображенияIw = Ih(Это для простого описания, очень удобно, если вы хотите расширить до общего матричного изображения), по шагам2k+1, после выполнения операции двумерной дискретной свертки мы можем получить следующее изображениеO:

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

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

Свертка во всех измерениях

Кубоид может быть полностью составлен из троек(W, H, D)представлять, где:

  • Вт≥1Указывает длину

  • Н≥1Указывает рост

  • Д≥1Это обозначает глубину

Очевидно, что изображение в градациях серого можно рассматривать как прямоугольный параллелепипед с глубиной D = 1, в то время как изображение RGB можно рассматривать как прямоугольный параллелепипед с глубиной D = 3.

Ядро свертки также можно рассматривать как ядро ​​свертки с глубиной D. В частности, мы можем думать об изображениях и фильтрах как о наборе одноканальных изображений/фильтров (независящих от порядка).

Если мы рассмотрим глубину изображения, предыдущую формулу свертки можно резюмировать следующим образом:

После свертки на изображении результат называется картой активации. Карта активации представляет собой кубоид глубины D = 1.

Как бы странно это ни звучало, свертка на 3D-изображении приводит к 2D-результату. Фактически, для входного сигнала с глубиной D ядро ​​свертки выполняет ровно D дискретных двумерных операций свертки. Сгенерированные двумерные карты активации D затем обрабатываются для получения результата двумерной свертки. Таким образом, информация, содержащаяся в каждом элементе (i, j) результирующей карты активации O, является результатом извлечения всей информации в этом месте.

Интуитивно эту операцию можно рассматривать как преобразование входного канала RGB в один канал для вывода.

Сверточный автоэнкодер

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

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

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

Из-за их сверточной природы количество карт активации, созданных CAE, одинаково независимо от размерности входных данных. Таким образом, CAE полностью игнорирует структуру самого 2D-изображения, а действует как экстрактор общих признаков. На самом деле при автокодировании (АЭ) изображение необходимо развернуть в один вектор, а в сети есть определенные ограничения на количество нейронов во входном векторе. Другими словами, AE заставляет каждую функцию быть глобальной (т. е. охватывающей все поле зрения), поэтому в ее параметрах есть избыточность, а в CAE — нет.

Кодер

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

Таким образом, каждые входные данные с глубиной D

и набор из n ядер свертки

Операция свертки, выполняемая между ними, приводит к набору n карт активации или эквивалентных карт функций. Конечно, количество каналов окончательно сгенерированной карты объектов по-прежнему равно n, а именно:

Для улучшения обобщающей способности сети каждая свертка активируется нелинейной функцией a, обученной таким образом, полученная сеть может обучаться некоторым нелинейным свойствам входных данных:

где bm^(1) представляет смещение m-й карты объектов, а термин zm вводится, чтобы сохранить то же имя переменной в AE.

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

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

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

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

Итак, мы хотим, чтобы ввод был дополнен нулями, например:

Как видно из уравнения 1, мы хотим дополнить I 2(2k+1)-2 нулями ((2k+1)-1 на ребро), таким образом, сверточное кодирование даст a Ширина и высота равны :

декодер

Полученные n карт признаков zm = 1,..., n будут использоваться в качестве входных данных для декодера для восстановления входного изображения I из этой сжатой информации.

На самом деле гиперпараметры декодированной свертки определяются фреймворком кодирования:

  • Поскольку свертка охватывает каждую карту объектов и создает измерения с (2k+1, 2k+1, n) , после фильтра F(2) создается та же пространственная протяженность I.

  • Количество фильтров для изучения: D, потому что мне нужно восстановить входное изображение с глубиной D.

Следовательно, реконструированное изображение I_ является результатом свертки между размером Z = {zi = 1}^n карты объектов и этим фильтром свертки F(2).

Заполнение по ранее рассчитанным нулям, тогда результирующая размерность после декодирования свертки:

Наша цель — сделать входное измерение равным выходному, которое затем можно вычислить с помощью любой функции потерь, такой как MSE:

В следующей статье поговорим о том, как использовать TensorFlow для реализации CAE.


CoderPai — это платформа, ориентированная на алгоритмический бой, с дизайном от базовых алгоритмов до алгоритмов искусственного интеллекта. Если вы заинтересованы в алгоритмическом бою, пожалуйста, следуйте за нами быстро. Присоединяйтесь к группе WeChat для реальных боевых действий AI, группе QQ для реальных боевых действий AI, группе WeChat по алгоритму ACM, группе QQ по алгоритму ACM. Для получения подробной информации, пожалуйста, обратите внимание на учетную запись WeChat «CoderPai» (coderpai).