【发布时间】: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