I appreciate the feedback, ptrblck, and I’m sorry for my delay. After some research, I decided to implement VGG based on this gist: https://gist.github.com/alper111/8233cdb0414b4cb5853f2f730ab95a49 8
So I have modified mine to something similar to the following:
class VGG(nn.Module):
    def __init__(self, bn=False, loss_config='VGG54', pretrained=True):
        super(VGG, self).__init__()
        blocks = []
        if loss_config == 'VGG54':
            if not bn:
                blocks.append(models.vgg19(pretrained=pretrained).features[:4].eval())
                blocks.append(models.vgg19(pretrained=pretrained).features[4:9].eval())
                blocks.append(models.vgg19(pretrained=pretrained).features[9:18].eval())
                blocks.append(models.vgg19(pretrained=pretrained).features[18:27].eval())
                blocks.append(models.vgg19(pretrained=pretrained).features[27:36].eval())
            else:
                blocks.append(models.vgg19(pretrained=pretrained).features[:6].eval())
                blocks.append(models.vgg19(pretrained=pretrained).features[6:13].eval())
                blocks.append(models.vgg19(pretrained=pretrained).features[13:26].eval())
                blocks.append(models.vgg19(pretrained=pretrained).features[26:39].eval())
                blocks.append(models.vgg19(pretrained=pretrained).features[39:52].eval())

        elif loss_config == 'VGG22':
            if not bn:
                blocks.append(models.vgg19(pretrained=pretrained).features[:4].eval())
                blocks.append(models.vgg19(pretrained=pretrained).features[4:9].eval())
            else:
                blocks.append(models.vgg19(pretrained=pretrained).features[:6].eval())
                blocks.append(models.vgg19(pretrained=pretrained).features[6:13].eval())
        
        blocks = nn.ModuleList(blocks)

        if pretrained:
            for param in blocks.parameters():
                param.requires_grad = False        

        self.blocks = blocks

        mean = torch.Tensor([0.485, 0.456, 0.406]).view(1,3,1,1)
        std = torch.Tensor([0.229, 0.224, 0.225]).view(1,3,1,1)
        self.register_buffer('mean', mean)
        self.register_buffer('std', std)

    def forward(self, x):
        output = []
        x = (x - self.mean) / self.std
        for block in self.blocks:
            x = block(x).div(12.75)
            output.append(x)
        return output

In this class I’m able to output a list of feature maps from the selected VGG architecture, each feature map output comes from after activation of convolution block and before maxpooling layer, as the paper states. Differently from the gist I linked, I chose to generate the feature maps in this class and calculating the loss separately, which works best in my code.
I think this goes accordingly to what you said and to some other information related to perceptual losses papers, am I right? I’ll briefly train the network and share the results as soon as I can.