我正在通过这个 repo尝试这个 SSIM loss 实现来进行图像恢复。
为了参考作者GitHub上的原始示例代码,我尝试了:
model.train()
for epo in range(epoch):
for i, data in enumerate(trainloader, 0):
inputs = data
inputs = Variable(inputs)
optimizer.zero_grad()
inputs = inputs.view(bs, 1, 128, 128)
top = model.upward(inputs)
outputs = model.downward(top, shortcut = True)
outputs = outputs.view(bs, 1, 128, 128)
if i % 20 == 0:
out = outputs[0].view(128, 128).detach().numpy() * 255
cv2.imwrite("/home/tk/Documents/recover/SSIM/" + str(epo) + "_" + str(i) + "_re.png", out)
loss = - criterion(inputs, outputs)
ssim_value = - loss.data.item()
print (ssim_value)
loss.backward()
optimizer.step()
然而,结果并没有像我预期的那样出来。在前 10 个 epoch 之后,打印的结果图像都是黑色的。
loss = - criterion(inputs, outputs)
是作者提出的,但是,对于经典的 Pytorch 训练代码,这将是loss = criterion(y_pred, target)
,因此应该在loss = criterion(inputs, outputs)
这里。
但是,我尝试loss = criterion(inputs, outputs)
了但结果仍然相同。
谁能分享一些关于如何正确利用 SSIM 损失的想法?谢谢。