def __init__(self, m_feat, layer_ids, layer_wgts): super().__init__() self.m_feat = m_feat self.loss_features = [self.m_feat[i] for i in layer_ids] self.hooks = callbacks.hook_outputs(self.loss_features, detach=False) self.wgts = layer_wgts self.metric_names = [ 'pixel', ] + [f'feat_{i}' for i in range(len(layer_ids)) ] + [f'gram_{i}' for i in range(len(layer_ids))]
def __init__(self, m_feat, layer_ids, layer_wgts, base_loss=F.l1_loss): super().__init__() self.m_feat = m_feat self.base_loss = base_loss self.loss_features = [self.m_feat[i] for i in layer_ids] self.hooks = hook_outputs(self.loss_features, detach=False) self.wgts = layer_wgts self.metric_names = [ 'pixel', ]
def __init__(self, layer_wgts=[20,70,10]): super().__init__() self.m_feat = models.vgg16_bn(True).features.cuda().eval() requires_grad(self.m_feat, False) blocks = [i-1 for i,o in enumerate(children(self.m_feat)) if isinstance(o,nn.MaxPool2d)] layer_ids = blocks[2:5] self.loss_features = [self.m_feat[i] for i in layer_ids] self.hooks = hook_outputs(self.loss_features, detach=False) self.wgts = layer_wgts self.metric_names = ['pixel',] + [f'feat_{i}' for i in range(len(layer_ids))] self.base_loss = F.l1_loss
def __init__(self, model, layer_ids, layer_wgts, base_loss=F.l1_loss): super().__init__() self.model = nn.Sequential(*list(model.children())[:layer_ids[-1] + 1]) self.loss_features = [self.model[i] for i in layer_ids] self.hooks = hook_outputs(self.loss_features, detach=False) self.wgts = layer_wgts self.metric_names = [ 'pixel', ] + [f'feat_{i}' for i in range(len(layer_ids)) ] + [f'gram_{i}' for i in range(len(layer_ids))] + ['PSNR', 'SSIM', 'pEPs'] self.base_loss = base_loss self.mse = nn.MSELoss() self.ssim = SSIM(window_size=11)
from fastai.callbacks import hook_outputs from fastai.basic_data import DatasetType from fastai.torch_core import * # In[92]: [children(children(learner.model[1])[0])[-2]] # In[93]: # register a hook to grab features hook = hook_outputs([children(children(learner.model[1])[0])[-2]]) # In[94]: xb, yb = data.one_batch(ds_type=DatasetType.Valid) # In[95]: model = learner.model.eval() outb = model(xb.cuda())
def __init__(self, model, layer_ids, weights): super().__init__() self.model = model self.important_layers = [self.model[i] for i in layer_ids] self.hooks = hook_outputs(self.important_layers, detach=False) self.weights = weights