【问题标题】:Individual image prediciton in Tensorflow different than batch evaluateTensorflow 中的单个图像预测与批量评估不同
【发布时间】:2021-02-24 06:13:03
【问题描述】:

我正在使用 Tensorflow v2.4.1 来尝试训练 CNN。这是我的训练的(简化)版本:

train_datagen = ImageDataGenerator(
      rescale=1./255,
      zca_epsilon=1e-06,
      rotation_range=20,
      width_shift_range=.2,
      height_shift_range=.2,
      shear_range=0.2,
      zoom_range=.2,
      fill_mode='nearest',
      cval=0.,  # value used for fill_mode = "constant")


train_generator = train_datagen.flow_from_directory(
  data_dir + '/train',
  target_size=(256,256),
  batch_size=64,
  class_mode='categorical'
)

model.fit(train_generator)

现在,我正在尝试编写一些代码,这些代码将在类似结构的图像目录上逐一测试模型。我这样做是这样的:

class_list = ['a','b','c','d']
count_total = 0
count_right = 0
for c in class_list:
    test_dir = data_dir + '/test/', + c + '/'
    for imagepath in os.listdir(test_dir):
        image = cv2.imread(test_dir+imagepath)
        image_from_array = Image.fromarray(image, "RGB")
        size_image = image_from_array.resize((256,256))
        p = np.expand_dims(size_image, 0)
        img = tf.cast(p, tf.float32)/255
        pred = class_list[np.argmax(model.predict(img))]
        count_total += 1
        if pred == c:
            count_right += 1
acc = count_right/count_total

我的准确率 (acc) 将达到 0.20。但是,我认为这是代码的问题,而不是正确的准确性,因为如果我运行以下代码:

test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory(
    data_dir + '/test',
    target_size=(256,256),
    batch_size=64,
    class_mode='categorical'
  )

model.evaluate(test_generator)

然后model.evaluate() 报告精度为 0.53

那么,逐一预测图像的代码有什么问题?

【问题讨论】:

    标签: python tensorflow conv-neural-network prediction


    【解决方案1】:

    Opencv 默认在 BGR 中加载图像,而 TensorFlow 使用 RGB。您预测的图像与您训练网络时使用的图像显着不同,从而导致准确性下降。

    用opencv加载你的图片后,你应该把它转换成RGB,或者直接用pillow来加载RGB的图片。

    在opencv中从BGR转换为RGB:

    img_bgr = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    

    使用 Pillow 直接读取 RGB 图像

    img = Image.open("/path/to/the/image")
    

    【讨论】:

    • 非常感谢,我没有意识到我还没有这样做
    猜你喜欢
    • 2017-06-16
    • 1970-01-01
    • 2021-09-11
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多