윤영준 윤영준 2023-06-27
Loss function for Autoencoder, also we may have to use other pretrained network for feature extractor for the loss function or even not using feature extractor. I ... honestly do not think using neural network for VGG is strictly nesccesary, and may have to be replaced with other image preprocessing like MSCN which was implimented before.
@744883d07d3d7028072d6a3fc46551eade5f2f87
model/Autoencoder.py
--- model/Autoencoder.py
+++ model/Autoencoder.py
@@ -39,6 +39,8 @@
         self.skip_output3 = nn.Conv2d(in_channels=32, out_channels=3, kernel_size=3, stride=1, padding=1, bias=False)
 
         # Loss specific definitions
+        # the paper uses vgg16 for features extraction,
+        # however, since vgg16 is not a light model, we may consider it to be replaced
         self.vgg = vgg16(pretrained=True).features
         self.vgg.eval()
         for param in self.vgg.parameters():
@@ -106,8 +108,8 @@
             lm_loss += mse_loss
 
         # Compute lp_loss
-        src_vgg_feats = self.extract_vgg_feats(label_tensor)
-        pred_vgg_feats = self.extract_vgg_feats(output_list[-1])
+        src_vgg_feats = self.vgg(label_tensor)
+        pred_vgg_feats = self.vgg(output_list[-1])
 
         lp_losses = []
         for index in range(len(src_vgg_feats)):
@@ -116,14 +118,4 @@
 
         loss = lm_loss + lp_loss
 
-        return loss, inference_ret['skip_3']
-
-    def extract_vgg_feats(self, input_tensor):
-        # Extract features from the input tensor using the VGG network
-        feats = []
-        x = input_tensor
-        for layer_num, layer in enumerate(self.vgg):
-            x = layer(x)
-            if layer_num in {3, 8, 15, 22, 29}:
-                feats.append(x)
-        return feats
(파일 끝에 줄바꿈 문자 없음)
+        return loss, inference_ret['skip_3']
(파일 끝에 줄바꿈 문자 없음)
Add a comment
List