正常的损失加上感知损失,肯定需要自定义合适的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)
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):
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 loss(VGG损失)
对于图像风格化,图像超分辨率重建等任务来说,早期都使用了图像像素空间的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 loss(VGG损失)
对于图像风格化,图像超分辨率重建等任务来说,早期都使用了图像像素空间的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