Основная проблема в том, что я не понимаю, как работает повышающая дискретизация. Архитектура 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
, но мне это не ясно из бумаги.