Как исправить мою сеть декодера, которая выводит изображения в градациях серого, а не цвета? - PullRequest
0 голосов
/ 22 апреля 2019

Я пытаюсь реализовать переводную бумагу универсального стиля здесь .

Я все еще застрял на первом этапе, который заключается в обучении сетей декодера для различных уровней сети VGG. Когда моя потеря остановилась, я проверяю свою сеть декодеров, чтобы посмотреть, как она работает, но, похоже, она выводит только вид полутонового варианта входного изображения, а не полноцветное изображение.

Я попытался удалить слои ReLU в конце как декодера, так и кодера.

Я поиграл с функцией потерь без удачи.

Также я попытался использовать транспонированные слои конвоя, а не обычные слои конвона, но оба показывают один и тот же результат.

Это мой декодер, использующий транспонированные сверточные слои.

class decoder1_transp(torch.nn.Module):
    def __init__(self):
        super(decoder1_transp,self).__init__()
        self.conv5_1 = ConvTranspose2d(64,64, kernel_size=(3,3),stride=(1,1),padding=1)
        self.relu5_1 = ReLU(inplace=True)
        self.conv5_2 = ConvTranspose2d(64,3, kernel_size=(3,3),stride=(1,1),padding=1)
    def forward(self, x):
        x = self.conv5_1(x)
        x = self.relu5_1(x)
        x = self.conv5_2(x)
        return x

Как получить соответствующий кодер:

enc = vgg19().features[:3]

А вот и тренировка декодера:

epochs = 100
for epoch in range(epochs):
    running_loss = 0.0
    num_batches = 0
    for i, data in enumerate(data_loader,0):
        lr_sched.step()

        inp,_ = data
        inp = inp.cuda()
        enc_out = enc(inp)
        out = dec(enc_out)

        reconstruct_out = enc(out)
        loss_first = crit(out,inp)
        loss_second = crit(reconstruct_out, enc_out)
        loss = loss_first + loss_second

        opt.zero_grad()
        loss.backward()
        opt.step()
        num_batches+=1
        running_loss += loss.item()
    print('Epoch:\t', str(epoch), '\tAverage Loss:\t', str(running_loss/num_batches))

Пример ввода и вывода: https://imgur.com/a/15D8eZv

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...