【问题标题】:different result between Keras predict and Opencv DNN moduleKeras predict 和 Opencv DNN 模块之间的不同结果
【发布时间】:2020-10-06 08:14:04
【问题描述】:

我用这两个 sn-ps 得到不同的结果,不知道为什么。我尝试更改 keras 版本的图像加载插值方法,但没有任何运气(这应该是正确的,因为 OpenCV 默认使用双线性来调整大小)。使用的模型是一样的,但是由于OpenCV DNN不支持H5权重,已经转换为caffe,转换已经用这个tool进行了。在这两种情况下,结果似乎都不错(预测类别,是一个分类问题),但值非常不同(即图像中的顶级类别为 0.92 Keras 与 0.66 OpenCV)。任何想法 ?

Keras 版本

import argparse
import numpy as np
from keras.preprocessing import image
from keras.models import model_from_json


def load_image(img_path, show=False):

    img = image.load_img(img_path, target_size=(80, 80), interpolation='bilinear')
    img_tensor = image.img_to_array(img)                    
    img_tensor = np.expand_dims(img_tensor, axis=0)        
    img_tensor /= 255.

    return img_tensor


def predict(image):

    # load model
    with open('model.json', 'r') as json_file:
        model = model_from_json(json_file.read())
    model.load_weights('weights20-0.92.h5')
    new_image = load_image(image, True)

    pred = model.predict(new_image)

    print(pred)


def main():
    p = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, description="")
    p.add_argument('-image', dest='image', action='store', help='image to predict')

    args = p.parse_args()
    predict(args.image)

OpenCV 版本

import argparse
import cv2
import numpy as np


def predict(image):

    image32 = cv2.imread(image)
    new_image = cv2.dnn.blobFromImage(image32, scalefactor=(1.0/255.0), size=(80, 80), swapRB=True, crop=False)

    model = cv2.dnn.readNet('net.prototxt', 'net.caffemodel')

    model.setInput(new_image)
    pred = model.forward()

    print(pred)


p = argparse.ArgumentParser(formatter_class=argparse.RawDescriptionHelpFormatter, description="")
p.add_argument('-image', dest='image', action='store', help='image to predict')

args = p.parse_args()
predict(args.image)

【问题讨论】:

    标签: python opencv keras deep-learning


    【解决方案1】:

    事实证明,关键点位于 resize 函数中,正如here Pillow 所述(Keras 图像只是一个包装器)的行为与 OpenCV 不同,因此结果不同。答案是.. 如果没有必要,不要混合不同的图像处理库.. :)

    【讨论】:

      猜你喜欢
      • 2020-02-20
      • 2021-12-13
      • 1970-01-01
      • 1970-01-01
      • 2017-02-24
      • 2015-08-02
      • 1970-01-01
      • 2019-07-15
      • 2014-06-22
      相关资源
      最近更新 更多