【问题标题】:Preprocessing test images using opencv for prediction使用opencv预处理测试图像进​​行预测
【发布时间】:2021-02-13 21:46:40
【问题描述】:

我正在处理以 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.

无论是否翻转图像,结果都是相同的。预处理步骤有什么问题? 谢谢

【问题讨论】:

    标签: tensorflow opencv keras conv-neural-network vgg-net


    【解决方案1】:

    错误在resize函数的插值参数中。它应该是cv2.INTER_NEAREST 而不是cv2.INTER_AREA

    【讨论】:

      猜你喜欢
      • 2015-05-10
      • 1970-01-01
      • 1970-01-01
      • 2017-01-12
      • 2014-07-09
      • 1970-01-01
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多