Matplotlib 为什么Keras.InceptionV3.preprocess_输入和plt.imshow(img)会使图片变得如此黑暗

Matplotlib 为什么Keras.InceptionV3.preprocess_输入和plt.imshow(img)会使图片变得如此黑暗,matplotlib,keras,Matplotlib,Keras,为什么Keras和/或matplotlib使图片如此黑暗 预处理的较暗图像会降低我的AI模型预测精度吗 这是原始图像: 这是经过处理的图像 代码如下: import matplotlib.pyplot as plt from keras.preprocessing import image from keras.applications.inception_v3 import preprocess_input load_image(self, img_path, show=False):

为什么Keras和/或matplotlib使图片如此黑暗

预处理的较暗图像会降低我的AI模型预测精度吗

这是原始图像:

这是经过处理的图像

代码如下:

import matplotlib.pyplot as plt
from keras.preprocessing import image
from keras.applications.inception_v3 import preprocess_input
load_image(self, img_path, show=False):
        img = image.load_img(img_path, target_size=(299,299))
        img_tensor = image.img_to_array(img)                    # (height, width, channels)
        img_tensor = np.expand_dims(img, axis=0)         # (1, height, width, channels), add a dimension because the model expects this shape: (batch_size, height, width, channels)
        img_tensor = preprocess_input(img_tensor)

        if show:
            plt.imshow(img_tensor[0])
            plt.axis('off')
            plt.show()

        return img_tensor

预处理应该是用来训练初始模型的。因此,如果要使用预训练的Inception,必须进行预处理,否则Inception模型的性能会很差

通过caffe预处理对大量的Keras模型进行训练,该预处理基于每个通道的平均值来集中图像数据

因此,如果原始图像具有0到255个通道,则使用该通道预处理的图像将具有大约-127到128个通道。每个通道的精确值略有不同。这就是为什么你的图像越来越暗。事实上,对于预期为0到255的绘图仪,您会使许多像素变暗,并降低可见像素的强度

但对于你自己的模式,或者一个未经训练的开端,这不会有很大的不同

这可能会改变训练速度、梯度等,但一般来说,这不会是一个大问题。当然,最好的方法可能是进行实验,并且与权重的初始化、优化器等有很大关系

我通常使用从0到1的图像

最重要的是:

如果要使用任何预训练模型,则需要使用与训练该模型相同的预处理 这包括您自己的模型。如果您使用特定的预处理(例如,从0到1进行规格化)来训练模型,那么您的模型将仅适用于遵循相同预处理的图像。
预处理应该是用来训练初始模型的。因此,如果要使用预训练的Inception,必须进行预处理,否则Inception模型的性能会很差

通过caffe预处理对大量的Keras模型进行训练,该预处理基于每个通道的平均值来集中图像数据

因此,如果原始图像具有0到255个通道,则使用该通道预处理的图像将具有大约-127到128个通道。每个通道的精确值略有不同。这就是为什么你的图像越来越暗。事实上,对于预期为0到255的绘图仪,您会使许多像素变暗,并降低可见像素的强度

但对于你自己的模式,或者一个未经训练的开端,这不会有很大的不同

这可能会改变训练速度、梯度等,但一般来说,这不会是一个大问题。当然,最好的方法可能是进行实验,并且与权重的初始化、优化器等有很大关系

我通常使用从0到1的图像

最重要的是:

如果要使用任何预训练模型,则需要使用与训练该模型相同的预处理 这包括您自己的模型。如果您使用特定的预处理(例如,从0到1进行规格化)来训练模型,那么您的模型将仅适用于遵循相同预处理的图像。