python - 使用 keras 预训练 vgg16 的感知损失,输出图像颜色不正确
问题描述
我是深度学习和 keras 的新手。我正在尝试使用 keras 训练具有感知损失的 Unet。我的输出图像颜色有问题。我的输入图像是彩色图像(RGB)。
如果我不对输入图像进行预处理,这意味着输入是 0~255 的 RGB。输出如下: output image(RGB with 0~255) 它比标签图像暗。
而且我发现预训练的 vgg16 模型使用的是“caffe”权重。并且函数keras.applications.vgg16.preprocess_input会将 RGB 更改为 BGR 并减去平均值。所以我尝试使用keras.applications.vgg16.preprocess_input然后通过添加平均值然后变回 RGB 来处理输出图像。但是输出图像太白了: output image(vgg16.preprocess_input)
然后我以比率添加 MSE 损失 -> 10:1(感知损失:MSE)输出与 输出图像没有什么不同(vgg16.preprocess_input)
我想知道这是感知损失的常见问题还是我的代码有问题?
这是我的代码
预处理图像:
img = load_img(datapath, grayscale = False)
img = img.resize( (resize_size, resize_size), Image.BILINEAR )
img = img_to_array(img)
img = preprocess_input(img)
处理图像:
mean = [103.939, 116.779, 123.68]
img[..., 0] += mean[0]
img[..., 1] += mean[1]
img[..., 2] += mean[2]
img = img[..., ::-1]
知觉损失:
def perceptual_loss(y_true, y_pred):
vgg = VGG16(include_top=False, weights='imagenet', input_shape=(resize_size, resize_size, 3))
loss_model = Model(inputs=vgg.input,
outputs=vgg.get_layer('block3_conv3').output)
loss_model.trainable = False
return K.mean(K.square(loss_model(y_true) - loss_model(y_pred)))
如果您有任何想法,请告诉我。非常感谢!!!
解决方案
“你的”模型的输出与任何关于 VGG、caffe 等的东西都没有关系。
当您创建模型时,是“您”定义它。
因此,如果您的模型的输出必须介于 0 和 255 之间,一种可能性是将其最后一层设置为:
Activation('sigmoid')
Lambda(lambda x: x*255)
然后,您需要preprocess_input
在感知损失中使用该函数:
def perceptual_loss(y_true, y_pred):
y_true = preprocess_input(y_true)
y_pred = preprocess_input(y_pred)
vgg = VGG16(include_top=False, weights='imagenet', input_shape=(resize_size, resize_size, 3))
loss_model = Model(inputs=vgg.input,
outputs=vgg.get_layer('block3_conv3').output)
loss_model.trainable = False
return K.mean(K.square(loss_model(y_true) - loss_model(y_pred)))
另一种可能性是对模型的输出进行后处理。(但同样,输出的范围完全由您定义)。
推荐阅读
- node.js - 我如何以编程方式使用 tor
- javascript - 有没有办法将原始 Sequelize 查询的字段转换为驼峰式?
- html - css 背景 url 中不会显示本地图像路径
- paypal - CyberSource:从 PayPal 交易详情中检索捕获令牌
- coq - Coq 中的“下一个级别”?
- python - 使用 python pandas 将 JSON 文件转换为正确的格式
- php - 在 Windows 服务器上将 PHP 与 SQLSERVER 连接时出错
- pdf - 如何将加密的 PDF 与非加密的 PDF 结合起来?
- php - 如何使 npm start IP 地址与 php artisan serve 同步以在移动设备上使用后端功能?
- swift - 如何使用 SwiftUI 中的 documentID 删除特定的 Cloud Firestore 文档?