Example #1
0
 def compute_vgg_loss(self, vgg, img, target):
     img_vgg = vgg_preprocess(img)
     target_vgg = vgg_preprocess(target)
     img_fea = vgg(img_vgg)
     target_fea = vgg(target_vgg)
     return torch.mean(
         (self.instancenorm(img_fea) - self.instancenorm(target_fea))**2)
 def forward(self, x, out_keys, preprocess=True):
     ''' 
     NOTE: input tensor should range in [0,1]
     '''
     out = {}
     if preprocess:
         x = vgg_preprocess(x, vgg_normal_correct=self.vgg_normal_correct)
     out['r11'] = F.relu(self.conv1_1(x))
     out['r12'] = F.relu(self.conv1_2(out['r11']))
     out['p1'] = self.pool1(out['r12'])
     out['r21'] = F.relu(self.conv2_1(out['p1']))
     out['r22'] = F.relu(self.conv2_2(out['r21']))
     out['p2'] = self.pool2(out['r22'])
     out['r31'] = F.relu(self.conv3_1(out['p2']))
     out['r32'] = F.relu(self.conv3_2(out['r31']))
     out['r33'] = F.relu(self.conv3_3(out['r32']))
     out['r34'] = F.relu(self.conv3_4(out['r33']))
     out['p3'] = self.pool3(out['r34'])
     out['r41'] = F.relu(self.conv4_1(out['p3']))
     out['r42'] = F.relu(self.conv4_2(out['r41']))
     out['r43'] = F.relu(self.conv4_3(out['r42']))
     out['r44'] = F.relu(self.conv4_4(out['r43']))
     out['p4'] = self.pool4(out['r44'])
     out['r51'] = F.relu(self.conv5_1(out['p4']))
     out['r52'] = F.relu(self.conv5_2(out['r51']))
     out['r53'] = F.relu(self.conv5_3(out['r52']))
     out['r54'] = F.relu(self.conv5_4(out['r53']))
     out['p5'] = self.pool5(out['r54'])
     return [out[key] for key in out_keys]