Шаг конкатенации U-Net для неравного количества каналов

Я пытаюсь реализовать архитектуру U-NET для сегментации изображений, реализуя этап обрезки и объединения на расширенном пути, я не могу понять, как объединяется неравное количество каналов.

Унет

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

def crop_and_concat(self, upsampled, bypass, crop=False):
    if crop:
        c = (bypass.size()[2] - upsampled.size()[2]) // 2
        bypass = F.pad(bypass, (-c, -c, -c, -c))
    return torch.cat((upsampled, bypass), 1)

Ошибка, которую я получаю- RuntimeError: Given groups=1, weight of size 128 256 5 5, expected input[4, 384, 64, 64] to have 256 channels, but got 384 channels instead
Где я делаю неправильно?


person Beginner    schedule 16.08.2019    source источник
comment
Я не уверен в точной архитектуре, но обычно после конкатенации происходит свертка 1x1, которая уменьшает количество каналов.   -  person Ali250    schedule 17.08.2019


Ответы (1)


Прежде всего, вам не нужно быть столь строгим, когда речь идет об U-Net-подобных архитектурах, впоследствии было много производных (см., например, быстрый вариант с PixelShuffle).

В случае с энкодером в базовой версии идут ваши каналы (за блок):

1 - 64 - 128 - 256 - 512

Стандартный сверточный энкодер. После этого общий слой 1024.

В декодере он идет вниз, но имеет больше каналов, так как вы объединяете состояния кодировщика из каждого блока.

Это было бы:

1024 -> 512 -> 512 (декодер) + 512 (энкодер), всего 1024 -> 512

512 -> 256 -> 256 (декодер) + 256 (энкодер), всего 512 -> 256

и так далее.

Вы были в случае, когда 256 из декодера было принято в учете, а 128 добавленное из энкодера - нет. Просто увеличьте количество каналов до 256 + 128 и следуйте приведенной выше схеме для каждого блока вашей UNet.

person Szymon Maszke    schedule 17.08.2019