Что означает Conv4_x, Conv8_x в SSD

В модели SSD , представленной в документе , говорится, что базовая сеть рассматривается как VGG16, а в конце нее добавляются дополнительные слои объектов, которые позволяют создавать карты объектов на разных уровнях. масштабы и пропорции.

Мой вопрос заключается в том, что в архитектуре, показанной на рис. 2 (показанной ниже) в документе SSD, слои свертки имеют обозначения, показанные как Conv5_3, Conv4_3, для базовой сети Conv8_2, Conv9_2, Conv10_2 для слоев добавленных функций.

Что означает это обозначение _2, _3 в представлении слоев свертки?

Я видел, что те же обозначения используются на странице описания модели SSD , где базовая сеть VGG16 меняется на ResNET50 и используются такие обозначения, как Conv5_x, Conv4_x.

Что означает этот _x для обозначения слоя свертки?

(примечание): модель SSD и модель VGG16 (до тех пор, пока она не считается базовой сетью в SSD) имеют одинаковые слои (см. ниже), но в результате получаются разные карты выходных характеристик (используются torchinfo.summary(model,(1, 3, 300, 300))) VGG16 на выходе каждого слоя карта объектов , карта объектов вывода каждого слоя SSD

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

Если мы посмотрим, например, ssd_pascal.py, то увидим, где создаются слои с таким именем (начиная со строки 23):

    out_layer = "conv6_1"
    ConvBNLayer(net, from_layer, out_layer, use_batchnorm, use_relu, 256, 1, 0, 1,
        lr_mult=lr_mult)

    from_layer = out_layer
    out_layer = "conv6_2"
    ConvBNLayer(net, from_layer, out_layer, use_batchnorm, use_relu, 512, 3, 1, 2,
        lr_mult=lr_mult)

Теперь нам также следует взглянуть на определение ConvBNLayer в model_libs.py (начиная со строки 30):

def ConvBNLayer(net, from_layer, out_layer, use_bn, use_relu, num_output,
    kernel_size, pad, stride, dilation=1, use_scale=True, lr_mult=1,
    conv_prefix='', conv_postfix='', bn_prefix='', bn_postfix='_bn',
    scale_prefix='', scale_postfix='_scale', bias_prefix='', bias_postfix='_bias',
    **bn_params):

Затем мы можем собрать эту информацию воедино и добавить немного догадок:

  • Технически conv#_1 и conv#_2 (где # — это заполнитель для фактического номера слоя) всегда представляют собой два слоя сверточной сети, созданные вызовом ConvBNLayer, которые следуют друг за другом в сетевой архитектуре (таким образом, выход conv#_1 является входом conv#_2). Они различаются количеством выходных каналов (например, 256 против 512 выше), размером ядра (например, 1 против 3 выше), величиной заполнения (например, 0 против 1 выше) и шагом (например, 1 против 2 выше). выше).

  • Логично, что авторам эти два слоя кажутся подслоями одного и того же сетевого уровня, отсюда и суффиксы _1 и _2. Итак, conv6_1 будет сверточным слоем 6, подслоем 1 и conv6_2 будет сверточным слоем 6, подслоем 2. Это становится ясно, если посмотреть на рисунок, например на иллюстрацию Conv8_2 и то, что написано под ним:

    • Проиллюстрировано то, что авторы считают выходными данными 8-го уровня своей сети: представление входного изображения в пространстве признаков 10x10x512.
    • «Conv: 1x1x256» означает, что сначала у нас есть подуровень (который должен называться Conv8_1) с размером ядра 1 и 256 выходными каналами, за которым следует…
    • «Conv: 3x3x512-s2», то есть подуровень (Conv8_2) с размером ядра 3, 512 выходными каналами и шагом 2.

Обратите внимание, что имена и номера слоев рисунка не совпадают с именами и номерами ssd_pascal.py (последний заканчивается после conv9_2, шаг которого отличается от Conv9_2 на рисунке), но схема должна быть такой же, если предположить, что авторы работали с определенной последовательностью.

Что касается вашего последнего вопроса: на странице описания SSD, где они пишут, например.

  • Слои conv5_x, avgpool, fc и softmax были удалены из исходной модели классификации.
  • Все шаги в conv4_x установлены на 1x1.

Я предполагаю, что «x» просто служит заполнителем для суффиксов _1, _2 и, следовательно, его следует читать следующим образом: conv5_1 и conv5_2 были удалены, все шаги в conv4_1 и conv4_2 установлены на 1x1.

Большое спасибо @Simon. Это был четкий ответ.

Palguna Gopireddy 30.04.2024 15:41

одно сомнение, прежде чем принять ответ. Это связано с base network, который обозначается как Conv4_3, through Conv5_3. Распечатал модели SSD, VGG16 на google colab, использовал torchinfo пакет (отредактированный в вопросе. см.). Оба привели к одной и той же сети. Всего он имеет 10 конв-слоев, за каждым из которых следует ReLU, за 3 из них следуют слои maxpool. Я думаю, что _3 здесь означает 3 maxpools. Вы думаете так же? Кроме того, что означает Conv4–Conv5?

Palguna Gopireddy 30.04.2024 16:18

Причина для вышеуказанного сомнения заключается в том, что в этом документе MobileNet рассматривается как базовая сеть и берутся выходные данные слоев Conv4_3, Conv5_3 MobileNet.

Palguna Gopireddy 30.04.2024 16:23

Я думаю, что новые цифры вписываются в схему именования: глядя на последнюю картинку, которую мы имеем (скобки сделаны мною): (conv conv maxpool) (conv conv maxpool) (conv conv maxpool) (conv conv maxpool) (conv conv maxpool). В этой схеме я не вижу «Conv5», но выходные данные «Conf4_3», как на первом опубликованном вами рисунке архитектуры (38x38x512), будут точно соответствовать тому, что напечатано как размер после последнего слоя конв в последняя цифра, которую вы выложили ([1, 512, 38, 38]). Он не соответствует последнему слою пула ([1, 256, 38, 38]). Опять же, это всего лишь догадки. Лучшим вариантом будет письмо авторам по электронной почте.

simon 30.04.2024 17:18

Спасибо за обновление, в любом случае!

simon 30.04.2024 17:20

Другие вопросы по теме