使用 opencv 预处理测试图像进行预测
Preprocessing test images using opencv for prediction
我正在处理以 RGB 格式保存的灰色图像数据集。我在这个数据集上训练了 VGG16,并以这种方式对其进行了预处理:
train_data_gen = ImageDataGenerator(rescale=1./255,rotation_range = 20,
width_shift_range = 0.2,
height_shift_range = 0.2,
horizontal_flip = True)
validation_data_gen = ImageDataGenerator(rescale=1./255)
train_gen= train_data_gen.flow_from_directory(trainPath,
target_size=(224, 224),
batch_size = 64,
class_mode='categorical' )
validation_gen= validation_data_gen.flow_from_directory(validationPath, target_size=(224, 224),
batch_size = 64, class_mode='categorical' )
训练完成后,训练和验证准确率都很高 (92%)。
在预测阶段,我首先尝试按照https://keras.io/applications/中的说明对图像进行预处理:
img = image.load_img(img_path, target_size=(image_size,image_size))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
但是,测试准确率很低!约 50%。我再次尝试在训练样本和验证样本上进行预测,得到的准确率很低,也在 50% 左右,这意味着问题在预测阶段。
相反,我使用OpenCV库对图像进行了预处理,精度更好,但仍然不如预期。我尝试对训练样本进行预测(训练期间的准确率为 92%),在预测期间我得到了 82%。这是代码:
img = cv2.imread(imagePath)
#np.flip(img, axis=-1)
img= cv2.resize(img, (224, 224),
interpolation = cv2.INTER_AREA)
img = np.reshape(img,
(1, img.shape[0], img.shape[1], img.shape[2]))
img = img/255.
结果与 with/without 翻转图像相同。预处理步骤有什么问题?
谢谢
错误在调整大小函数的插值参数中。它应该是 cv2.INTER_NEAREST
而不是 cv2.INTER_AREA
.
我正在处理以 RGB 格式保存的灰色图像数据集。我在这个数据集上训练了 VGG16,并以这种方式对其进行了预处理:
train_data_gen = ImageDataGenerator(rescale=1./255,rotation_range = 20,
width_shift_range = 0.2,
height_shift_range = 0.2,
horizontal_flip = True)
validation_data_gen = ImageDataGenerator(rescale=1./255)
train_gen= train_data_gen.flow_from_directory(trainPath,
target_size=(224, 224),
batch_size = 64,
class_mode='categorical' )
validation_gen= validation_data_gen.flow_from_directory(validationPath, target_size=(224, 224),
batch_size = 64, class_mode='categorical' )
训练完成后,训练和验证准确率都很高 (92%)。
在预测阶段,我首先尝试按照https://keras.io/applications/中的说明对图像进行预处理:
img = image.load_img(img_path, target_size=(image_size,image_size))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)
但是,测试准确率很低!约 50%。我再次尝试在训练样本和验证样本上进行预测,得到的准确率很低,也在 50% 左右,这意味着问题在预测阶段。
相反,我使用OpenCV库对图像进行了预处理,精度更好,但仍然不如预期。我尝试对训练样本进行预测(训练期间的准确率为 92%),在预测期间我得到了 82%。这是代码:
img = cv2.imread(imagePath)
#np.flip(img, axis=-1)
img= cv2.resize(img, (224, 224),
interpolation = cv2.INTER_AREA)
img = np.reshape(img,
(1, img.shape[0], img.shape[1], img.shape[2]))
img = img/255.
结果与 with/without 翻转图像相同。预处理步骤有什么问题? 谢谢
错误在调整大小函数的插值参数中。它应该是 cv2.INTER_NEAREST
而不是 cv2.INTER_AREA
.