Я пытаюсь лучше понять рецептивные поля CNN. Для этого я хотел бы рассчитать рецептивное поле каждого нейрона в LeNet. Для обычного MLP это довольно просто (см. Http://deeplearning.net/tutorial/lenet.html#sparse-connectivity ), но сложнее рассчитать рецептивное поле нейрона в слое, следующем за одним или несколькими сверточными слоями, и объединяя слои.
Что такое рецептивное поле нейрона в 2. сверточном слое? Насколько он больше в следующем слое субсэмплинга / пула? И какова формула для их расчета?
Ответы:
Если вы думаете о сверточной сети как об экземпляре стандартного MLP, вы можете определить рецептивные поля точно так же, как в примере, который вы связали.
Напомним, что сверточный слой по сути является сокращением для слоя со многими повторяющимися узорами, как на этом изображении (из этого ответа , первоначально отсюда ):
Каждый из «пикселей назначения» этого изображения соответствует нейрону, чьи входные данные - синий квадрат в исходном изображении. В зависимости от архитектуры вашей сети свертки могут не совсем соответствовать таким пикселям, но это та же идея. Веса, используемые в качестве входных данных для всех этих сверточных нейронов, привязаны, но это не имеет отношения к тому, что вы думаете здесь.
Об объединении нейронов можно думать одинаково, комбинируя рецептивные поля каждого из их входов.
источник
В Faster-rcnn эффективное рецептивное поле может быть рассчитано следующим образом (VGG16):
Img->
Conv1 (3) -> Conv1 (3) -> Pool1 (2) ==>
Conv2 (3) -> Conv2 (3) -> Pool2 (2) ==>
Conv3 (3) -> Conv3 (3) ) -> Conv3 (3) -> Pool3 (2) ==>
Conv4 (3) -> Conv4 (3) -> Conv4 (3) -> Pool4 (2) ==>
Conv5 (3) -> Conv5 (3) ) -> Conv5 (3) ====>
окно 3 * 3 на карте объектов.
Давайте возьмем одно измерение для простоты. Если мы получим обратно из размера 3, исходное поле восприятия:
1). в начале Conv5: 3 + 2 + 2 + 2 = 9
2). в начале Conv4: 9 * 2 + 2 + 2 + 2 = 24
3). в начале Conv3: 24 * 2 + 2 + 2 + 2 = 54
4). в начале Conv2: 54 * 2 + 2 + 2 = 112
5). в начале Conv1 (исходный ввод): 112 * 2 + 2 + 2 = 228
источник