Как обновить Ale xNet для использования FCN? Запутался при повышении частоты дискретизации - PullRequest
0 голосов
/ 03 августа 2020

Основная проблема в том, что я не понимаю, как работает повышающая дискретизация. Архитектура Ale xNet имеет следующий классификатор

Dropout(),
Linear(in_features=9216, out_features=4096),
ReLU(),
Dropout(),
Linear(in_features=4096, out_features=4096),
ReLU(),
Linear(in_features=4096, out_features=1000)

Вышеуказанное используется в cifar, поэтому число классов равно 1000. Если мы изменим классификатор на использование FCN (после FCN для Semanti c Segmentation ) и используем VO C, у нас будет 20 классов (почему на рисунке показан 21 канал?). Размер изображения изменяется до 256x256. Архитектура из статьи показана ниже

фигура 1

Используя pytorch, у меня есть следующие

class AlexNetFCN(nn.Module):

    def __init__(self):
        super().__init__()
        self.features = AlexNet().features
        self.classifier = nn.Sequential(
                nn.Dropout(),
                nn.Conv2d(256, 4096, kernel_size=6),
                nn.ReLU(),
                nn.Dropout(),
                nn.Conv2d(4096, 4096, kernel_size=1),
                nn.ReLU(),
                nn.Conv2d(4096, 20, kernel_size=1),
                )

    def forward(self, x):
        x = self.features(x)
        x = self.classifier(x)
        return x

Я знаю, что после части функции мои изображения имеют размер 7x7. Как увеличить разрешение до 256x256? Может быть nn.Bilinear, но мне это не ясно из бумаги.

1 Ответ

0 голосов
/ 03 августа 2020

Вы можете использовать слой nn.Upsample, который является оболочкой для функции nn.functional.interpolate (старое название nn.functional.upsample)

Вот как это используется в рабочей реализации alexnetfcn:

https://github.com/monaj07/pytorch_semseg/blob/e93e96f811bcdb45c8c88380f561e87d0ccbf514/ptsemseg/models/fcn.py#L145

...