Какова архитектура сложного сверточного автоэнкодера?

23

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

Вопросов:

  • Я могу сделать так, чтобы за моим входом следовал слой шума, за которым следовал слой конвива, а затем слой объединения - там после этого - нужно ли удалять пул, прежде чем дать свой вывод (который является тем же самым моим входным изображением)?

    Скажем, у меня есть несколько (135,240) изображений. Если я использую 32, (12,21) ядра с последующим (2,2) пулированием, я получу 32 (62, 110) функциональных карты. Теперь я должен удалить из пула 32 (124, 220) карты объектов и затем сгладить их? прежде чем дать мой (135,240) выходной слой?

  • Если у меня есть несколько таких слоев конвул-пула, должен ли я тренировать их один за другим - как в пакетных автоэнкодерах? Или - я могу иметь что-то вроде input-conv-pool-conv-pool-conv-pool-output (выходные данные совпадают с input)? В таком случае, как предполагается управлять пулированием, удалением? Должен ли я де-пул только в последнем слое пула перед выводом? И снова - каким должен быть фактор изменения размера этого объединения? Является ли намерение вернуть карты объектов обратно в форму ввода?

  • Должен ли я вводить слои шума после каждого слоя conv-pool-depool?

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

  • Может ли кто-нибудь указать мне на URL / документ, в котором подробно описана архитектура такого сверточного сверточного автоматического кодера, чтобы выполнять предварительное обучение на изображениях?

RUN2
источник

Ответы:

12

В настоящее время я изучаю сложенные сверточные автоэнкодеры.

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

  1. Да, вам нужно «перевернуть» пул, а затем свернуть с набором фильтров для восстановления выходного изображения. Стандартная нейронная сеть (с учетом данных MNIST в качестве входных данных, т.е. входных размеров 28x28) будет иметь вид:

        28x28(input) -- convolve with 5 filters, each filter 5x5 -->  5 @ 28 x 28 maps -- maxPooling --> 5 @ 14 x 14 (Hidden layer) -- reverse-maxPool --> 5 @ 28 x 28 -- convolve with 5 filters, each filter 5x5 --> 28x28 (output)
    
  2. Насколько я понимаю, условно это то, что нужно делать, то есть тренировать каждый слой отдельно. После этого вы складываете слои и обучаете всю сеть еще раз, используя предварительно обученные веса. Тем не менее, Yohsua Bengio провел некоторое исследование (ссылка ускользает от моей памяти), демонстрирующее, что можно построить полностью сложенную сеть и тренироваться с нуля.

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

  4. Пока вы все еще «тренируете» предварительную подготовку или тонкую настройку, я думаю, что часть восстановления (т. Е. Обратное пул, деконволюция и т. Д.) Необходима. В противном случае, как следует выполнять обратное распространение ошибок для настройки весов?

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

user2979010
источник
Если вы закончили предварительную подготовку, вам больше не нужна часть декодера, и точная настройка все равно настроит кодер, на этот раз для лучшей классификации.
jwalker
2
Как возможно "reverse-maxPool"? Вы никогда не сможете восстановить набор чисел, учитывая только максимум ...?
Fequish
1
@Fequish, это примерный обратный макспул, например: если пул = 2x2, я сохраняю позицию максимума и вставляю максимум в эту конкретную позицию в 2x2, остальное
равно
1
@jwalker, моей конечной целью была не классификация, а значит, точная настройка развернутой сети
user2979010
@Fequish, для декодирования реверса это просто высококлассный ближайший сосед.
jwalker
2

Я также искал полностью объясненную модель свернутых сверточных автоэнкодеров.

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

  1. Упомянутый вами при использовании пула - unpooling.
  2. Слои (свертки) __x_times -> (деконволюции) __x_times,

    и получить тот же размер, что и вход.

  3. (свернуть -> пул) __x_times -> (пошаговая деконволюция) __y_times
    • отступы и шаги выбираются таким образом, чтобы конечный размер изображения совпадал с исходным изображением.
    • Ссылка
Ankitp
источник
2
Добро пожаловать на сайт. Было ли это предназначено как ответ на вопрос ОП, комментарий с просьбой дать разъяснения от ОП или одного из ответчиков, или как ваш новый вопрос? Пожалуйста, используйте только поле «Ваш ответ», чтобы ответить на исходный вопрос. Вы сможете комментировать в любом месте, когда ваша репутация> 50. Если у вас есть новый вопрос, нажмите на серый ASK QUESTION в верхней части страницы и задайте его там, тогда мы сможем вам помочь. Поскольку вы новичок здесь, вы можете посетить наш тур , в котором есть информация для новых пользователей.
gung - Восстановить Монику
1
Он был задуман как ответ на вопрос ФП, хотя он может и не быть полным ответом. Я отвечал на последнюю часть: «Я пробовал просматривать многочисленные статьи, но архитектура никогда не объясняется полностью. Если вы найдете что-нибудь, пожалуйста, дайте мне знать.
Анкитп
Хорошо спасибо. То, как это происходит, неоднозначно. Например, «Я также искал ...» и «Любые дальнейшие ссылки на статьи или реализации очень помогли бы». Помните, что CV - это чистый сайт вопросов и ответов, а не дискуссионный форум. Почему бы не взять наш тур и узнать больше о сайте?
gung - Восстановить Монику
-1

Я не думаю, что послойный метод обучения является правильным. Например, архитектура сверточного авто-кодера:

вход-> conv-> max_poo-> de_max_pool-> de_conv-> выход.

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

https://arxiv.org/pdf/1701.04949.pdf

Кевин Сан
источник