Keras 以不正确的格式加载图像

数据挖掘 喀拉斯 图像分类 预处理 计算机视觉
2022-02-20 19:51:34

因此,我正在使用用于狗与猫分类的 vgg16 模型,我注意到 keras 没有以正确的颜色格式加载图像。代码如下:

import cv2
import matplotlib.pyplot as plt
import numpy as np
from PIL import Image
from keras.preprocessing import image

path='data/dogscats/sample/train/dogs/dog.1402.jpg'

imgkeras=image.load_img(path)
imgkeras=image.img_to_array(imgkeras)

plt.imshow(imgkeras)
plt.show()

以下代码的输出是 在此处输入图像描述

原始图像在哪里

在此处输入图像描述

有人可以解释为什么会这样吗?,当图像通过opencv加载并输入vgg16时,对于这个特定图像的预测标签比通过keras加载时更准确,不正确的颜色格式会影响吗?

2个回答

这是由于将图像转换为 float32 数组的 img_to_array 方法引起的。

x = np.asarray(img, dtype=K.floatx())

Matplotlib 将 NxMx3 uint8 数组解释为标准图像(0..255 个分量),在这种情况下没有预处理。否则像素乘以 255(不检查范围)然后转换为 uint8,我猜这会导致这种行为。

检查这个:https ://stackoverflow.com/questions/39925420/bizzare-matplotlib-behaviour-in-displaying-images-cast-as-floats

为了回答你问题的第二部分,我猜 imagenet 的竞争对手使用 OpenCV 加载 BGR 格式的图像来训练 vgg16,因此预训练的权重可以很好地处理以 BGR 格式打开的图像。

Keras 可能不是问题所在。问题可能与 matplotlib 完成的显示有关。matplotlib 图像教程涵盖了显示图像的不同方式。