相关文章推荐
小胡子的沙发  ·  有没有可能Java ...·  6 月前    · 
稳重的豆腐  ·  25、Camunda Service ...·  2 年前    · 
追风的投影仪  ·  SpringBoot ...·  2 年前    · 

正常的损失加上感知损失,肯定需要自定义合适的loss function。在keras中,自定义loss function :
先考虑keras中的loss,如下:

def mean_squared_error(y_true, y_pred):
    return K.mean(K.square(y_pred - y_true), axis=-1)

如果要定义自己的感知损失:

def model_loss(y_true, y_pred):
    inp = Input(shape=(128, 128, 1))
    x = Dense(2)(inp)
    x = Flatten()(x)
    model = Model(inputs=[inp], outputs=[x])
    a = model(y_pred)
    b = model(y_true)
    # calculate MSE
    mse = K.mean(K.square(a - b))
    return mse

上面的代码只是一个概念展示,但是能够指导我们应该如何去做。

因为在做医疗影像,所以一般的医疗影像都不是正常的RGB三通道图像,往往是3D的影像或者是1通道影像,如下图所示:
在这里插入图片描述
脑部的失状图影像,图像大小是(182, 218,1),训练的神经网络输入是(160,200,1),那么如果要使用VGG16的感知损失的话,需要将其复制为3通道,具体细节代码如下:

def VGGloss(y_true, y_pred):  # Note the parameter order
    from keras.applications.vgg16 import VGG16
    mod = VGG16(include_top=False, weights='imagenet')
    pred = K.concatenate([y_pred, y_pred, y_pred])
    true = K.concatenate([y_true, y_true, y_true])
    vggmodel = mod 
    f_p = vggmodel(pred)  
    f_t = vggmodel(true)  
    return K.mean(K.square(f_p - f_t)) 
model.compile(optimizer=Adam, loss = losses.VGGloss) 
 

参考:https://stackoverflow.com/questions/43914931/vgg-perceptual-loss-in-keras

损失函数loss function)是用来估量模型的预测值f(x)与真实值Y的不一致程度,损失函数越小,一般就代表模型的鲁棒性越好,正是损失函数指导了模型的学习。 感知损失perceptual lossVGG损失) 对于图像风格化,图像超分辨率重建等任务来说,早期都使用了图像像素空间的L2 loss,但是L2 loss与人眼感知的图像质量并不匹配,恢复出来的图像往往细节表现不好。 现在的研究中,L2 loss逐步被人眼感知loss所取代。人眼感知loss也被称为perceptual loss感知损失感知损失通过一个固定的网络(VGG16,VGG19..),分别用prediction 和 groundtruth作为VGG16输入, 得到对应的输出特征,pre-vgg,gt-vgg。注:往往pre-loss感知损失)为正则项,需要配合其他损失函数进行指导,可以通过自定参数调节感知损失的惩罚(调节)力度。在提取特征时,通常不会只使用一层的特征,而是使用网络中浅层,中层,深层特征,进行组合。2.送入prediction和ground truth分别通过VGG前向,并得到pre-vgg,gt-vgg。 代码引自:https://github.com/bryandlee/stylegan2-encoder-pytorch/blob/master/train_encoder.py class VGGLoss(nn.Module): def __init__(self, device, n_layers=5): super().__init__() feature_layers = (2, 7, 12, 21, 30) self.weig 损失函数loss function)是用来估量模型的预测值f(x)与真实值Y的不一致程度,损失函数越小,一般就代表模型的鲁棒性越好,正是损失函数指导了模型的学习。 感知损失perceptual lossVGG损失) 对于图像风格化,图像超分辨率重建等任务来说,早期都使用了图像像素空间的L2 loss,但是L2 loss与人眼感知的图像质量并不匹配,恢复出来的图像往往细节表现不好。 现在的研究中,L2 loss逐步被人眼感知loss所取代。人眼感知loss也被称为perceptual loss感知 风格迁移VGG-Loss之Gram matrix定义计算和特征表示在风格迁移里的应用 source: https://www.cnblogs.com/yifanrensheng/p/12862174.html https://medium.com/@oleksandrsavsunenko/content-and-style-loss-using-vgg-network-e810a7afe5fc n维欧式空间中任意k个向量之间两两内积所组成的矩阵,称为这k个向量的格拉姆矩阵(Gram matrix),很 class Vgg19(nn.Module): def __init__(self, args, requires_grad=False): super(Vgg19, self).__init__() self.args = args self.vgg_pretr... 【1】https://github.com/walid0925/AI_Artistry 【2】A Neural Algorithm of Artistic Style Note: 本文主要是对论文及参考文献【1】中代码的理解 该算法的本质是利用深度卷积网络对图像输入的抽象,主要是三部分: 将风格图像输入卷积神经网络,将某些层输出作为风格特征(做一次); 将内容图像输入卷积神... 隔了一个季度之后,再次更新。之前停更并非是意志松懈,主要是身体抱恙,疫情期间过度用眼导致眼疲劳,加上中途打球崴脚卧床数周,拖着疲劳的眼睛勉强能应付网课和日常任务,那段时间也反思为什么以前在学校时长时间用眼也没有什么不适,细想发现眼睛日常通勤中得到了很好的休息,而在家几乎没有通勤时间。说这么多,总结感悟就是身体是革命的本钱,管理好身体才能更好地输出。 感知损失Perceptual Loss) 在生成网络中,为了使生成图像与源图像具有相同的特征,最先使用的主要是在像素层面上做正则化,即∣∣xsrc−xg