Image processing Keras:灰度图像的哪个损失函数作为标签

Image processing Keras:灰度图像的哪个损失函数作为标签,image-processing,deep-learning,keras,loss-function,Image Processing,Deep Learning,Keras,Loss Function,我对深度学习、Keras和图像处理是新手。我正在做一个项目,我试图用CNN来补偿灰度图像中的运动伪影。因此,我有一个灰度图像作为标签,没有运动伪影 但现在我不确定使用哪种损失函数和哪种误差度量。也许我需要某种二维互相关损失函数?或者像均方误差这样的损失函数有意义吗?使用“均方对数误差”进行的第一次训练在视觉上产生了良好的结果(预测看起来很像标签图像),但CNN的准确率为0% 是否有人在该领域有经验,可以推荐一些文献或建议合适的损失函数和误差度量 如果我需要提供更详细的信息,请告诉我,我非常乐意这

我对深度学习、Keras和图像处理是新手。我正在做一个项目,我试图用CNN来补偿灰度图像中的运动伪影。因此,我有一个灰度图像作为标签,没有运动伪影

但现在我不确定使用哪种损失函数和哪种误差度量。也许我需要某种二维互相关损失函数?或者像均方误差这样的损失函数有意义吗?使用“均方对数误差”进行的第一次训练在视觉上产生了良好的结果(预测看起来很像标签图像),但CNN的准确率为0%

是否有人在该领域有经验,可以推荐一些文献或建议合适的损失函数和误差度量

如果我需要提供更详细的信息,请告诉我,我非常乐意这样做

使用的CNN(有点像Unet):


谢谢你的帮助

只是想看看我是否明白。您的输入是运动模糊的灰度图像,而输出是运动伪影的图像。您使用的cnn模型是什么?你的损失是一个像素一个像素的损失吗?@AmitayNachmani:没错!输入图像是运动模糊的灰度图像。预测输出应该是没有伪影的灰度图像。相应的训练标签是没有任何运动伪影的“完美”灰度图像。这是问题的一部分。每像素损耗是一个好选择吗?还是应该是其他损失?对我来说,这看起来像一个自动编码器。也许看看他们使用的自动编码器的损耗,然后使用相同的东西。具体到卷积自动编码器和图像示例denosing@AmitayNachmani非常感谢你!我来看看。这似乎很有帮助!:-)
input_1 = Input((X_train.shape[1],X_train.shape[2], X_train.shape[3]))

conv1 = Conv2D(16, (3,3), strides=(2,2), activation='relu', padding='same')(input_1)
batch1 = BatchNormalization(axis=3)(conv1)
conv2 = Conv2D(32, (3,3), strides=(2,2), activation='relu', padding='same')(batch1)
batch2 = BatchNormalization(axis=3)(conv2)
conv3 = Conv2D(64, (3,3), strides=(2,2), activation='relu', padding='same')(batch2)
batch3 = BatchNormalization(axis=3)(conv3)
conv4 = Conv2D(128, (3,3), strides=(2,2), activation='relu', padding='same')(batch3)
batch4 = BatchNormalization(axis=3)(conv4)
conv5 = Conv2D(256, (3,3), strides=(2,2), activation='relu', padding='same')(batch4)
batch5 = BatchNormalization(axis=3)(conv5)
conv6 = Conv2D(512, (3,3), strides=(2,2), activation='relu', padding='same')(batch5)
drop1 = Dropout(0.25)(conv6)

upconv1 = Conv2DTranspose(256, (3,3), strides=(1,1), padding='same')(drop1)
upconv2 = Conv2DTranspose(128, (3,3), strides=(2,2), padding='same')(upconv1)
upconv3 = Conv2DTranspose(64, (3,3), strides=(2,2), padding='same')(upconv2)
upconv4 = Conv2DTranspose(32, (3,3), strides=(2,2), padding='same')(upconv3)
upconv5 = Conv2DTranspose(16, (3,3), strides=(2,2), padding='same')(upconv4)
upconv5_1 = concatenate([upconv5,conv2], axis=3)
upconv6 = Conv2DTranspose(8, (3,3), strides=(2,2), padding='same')(upconv5_1)
upconv6_1 = concatenate([upconv6,conv1], axis=3)
upconv7 = Conv2DTranspose(1, (3,3), strides=(2,2), activation='linear', padding='same')(upconv6_1)

model = Model(outputs=upconv7, inputs=input_1)