【问题标题】:Correct way to compute VGG features for Perceptual loss为感知损失计算 VGG 特征的正确方法
【发布时间】:2021-11-30 23:16:45
【问题描述】:

在计算VGG Perceptual loss的时候,虽然没见过,但是感觉可以把GT图像的VGG特征的计算封装在torch.no_grad()里面。

所以基本上我觉得以下就可以了,

with torch.no_grad():
    gt_vgg_features = self.vgg_features(gt)

nw_op_vgg_features = self.vgg_features(nw_op)

# Now compute L1 loss

或者应该使用,

gt_vgg_features = self.vgg_features(gt)
nw_op_vgg_features = self.vgg_features(nw_op)

在这两种方法中,VGG 参数的requires_grad 设置为False,VGG 进入eval() 模式。

第一种方法将节省大量 GPU 资源,并且感觉应该在数值上等于第二种方法,因为不需要通过 GT 图像进行反向传播。但在大多数实现中,我发现第二种方法用于计算 VGG 感知损失。

那么,在 PyTorch 中实现 VGG 感知损失我们应该采用哪个选项?

【问题讨论】:

    标签: python deep-learning pytorch conv-neural-network vgg-net


    【解决方案1】:

    第一种方式:

    with torch.no_grad():
        gt_vgg_features = self.vgg_features(gt)
    
    nw_op_vgg_features = self.vgg_features(nw_op)
    

    尽管 VGG 处于 eval 模式并且其参数保持固定,但您仍然需要通过它将梯度从特征损失传播到输出 nw_op。 但是,没有理由计算这些梯度 w.r.t gt

    【讨论】:

      猜你喜欢
      • 2017-10-10
      • 2020-04-11
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2016-12-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多