Я получаю разные результаты с этими двумя фрагментами и не могу понять почему. Я попытался изменить метод интерполяции при загрузке изображения для версии keras, но безуспешно (это должно быть правильно, потому что OpenCV по умолчанию использует билинейный режим для изменения размера). Используемая модель такая же, но была преобразована в caffe, поскольку OpenCV DNN не поддерживает веса H5, преобразование было выполнено с помощью этого инструмента . Результаты кажутся хорошими в обоих случаях (прогнозируемый класс - это проблема классификации), но значения сильно различаются (например, 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)