【问题标题】:How to numerically evaluate results of an unet-like CNN?如何对类似 unet 的 CNN 的结果进行数值评估?
【发布时间】:2017-10-10 11:02:51
【问题描述】:

我正在寻找一种方法来对我的类似 unet 的 CNN 的结果进行数值评估。

CNN 经过训练可以从灰度图像中去除伪影。因此,CNN 得到一个“9 通道”灰度图像,每个通道中都包含伪影(9 个灰度图像具有部分冗余数据,但不同的伪影连接在一起 --> 维度 [numTrainInputs, 512, 512, 9])作为输入,并且应该输出单个没有伪影的灰度图像 [numTrainInputs, 512, 512, 1]。 CNN 使用 MSE 作为损失函数,Adam 作为优化器和 Keras 进行训练。到目前为止,一切顺利。

在视觉上,与无伪影的“ground truth”图像相比,CNN 提供了良好的结果 --> 维度 [numTrainInputs, 512, 512, 1] 但训练期间的准确度保持在 0%。我认为这是因为没有一个结果图像完全符合基本事实,对吧!?

但是我怎样才能对结果进行数值评估呢?我在自动编码器领域搜索了一些数值评估,但找不到合适的方法。谁能给我一个提示?

CNN 看起来像这样:

input_1 = Input((X_train.shape[1],X_train.shape[2], X_train.shape[3]))

conv1 = Conv2D(16, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(input_1)
conv2 = Conv2D(32, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(conv1)
conv3 = Conv2D(64, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(conv2)
conv4 = Conv2D(128, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(conv3)
conv5 = Conv2D(256, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(conv4)
conv6 = Conv2D(512, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(conv5)

upconv1 = Conv2DTranspose(256, (3,3), strides=(1,1), activation='elu',  use_bias=True, padding='same')(conv6)
upconv2 = Conv2DTranspose(128, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(upconv1)
upconv3 = Conv2DTranspose(64, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(upconv2)
upconv3_1 = concatenate([upconv3, conv4], axis=3)

upconv4 = Conv2DTranspose(32, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(upconv3_1)
upconv4_1 = concatenate([upconv4, conv3], axis=3)

upconv5 = Conv2DTranspose(16, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(upconv4_1)
upconv5_1 = concatenate([upconv5,conv2], axis=3)

upconv6 = Conv2DTranspose(8, (3,3), strides=(2,2), activation='elu',  use_bias=True, padding='same')(upconv5_1)
upconv6_1 = concatenate([upconv6,conv1], axis=3)

upconv7 = Conv2DTranspose(1, (3,3), strides=(2,2), activation='linear',  use_bias=True, padding='same')(upconv6_1)

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



model.compile(loss='mean_squared_error', optimizer='adam', metrics=['accuracy'])
model.fit(X_train, Y_train, batch_size=1, epochs=100, shuffle=True, validation_split=0.01, callbacks=[tbCallback])

非常感谢您的帮助!

【问题讨论】:

    标签: deep-learning keras conv-neural-network evaluation


    【解决方案1】:

    您针对此问题使用了错误的指标。 在回归中,将“准确性”作为度量是没有意义的。 例如将其更改为 MSE:

    model.compile(loss='mean_squared_error', optimizer='adam', metrics=['mean_squared_error']))
    

    【讨论】:

    • 使用 MSE 作为损失函数和误差度量是否有意义?不是说同一件事两次吗?
    • 在回归中这很好。如果您想要不同的度量,您可以尝试使用 SSIM 来进一步评估过滤后的图像与无噪声图像的相似程度。
    猜你喜欢
    • 2022-08-04
    • 1970-01-01
    • 2020-03-16
    • 2021-06-12
    • 1970-01-01
    • 2019-07-23
    • 2014-10-13
    • 2020-10-09
    • 1970-01-01
    相关资源
    最近更新 更多