我正在尝试在iOS应用中使用Apple提供的Squeezenet ML模型。当我传递图像进行分类时,预测就会消失。我怀疑这个问题是由于提供给Squeezenet进行分类的图像的典型预处理尚未在iOS应用程序中实现。特别是,在Python中实现时,图像需要以下预处理步骤:
model = SqueezeNet()
img = image.load_img('cat.jpeg', target_size=(227, 227))
x = image.img_to_array(img) #Preprocess Step 1
x = np.expand_dims(x, axis=0) #Preprocess Step 2
x = preprocess_input(x) #Preprocess Step 3
preds = model.predict(x)
print('Predicted:', decode_predictions(preds))
有谁知道如何在iOS中重新创建这三个预处理步骤?
更新以下来自Matthijs的评论:
Matthijs,我已经看过你的博客文章,并了解执行相同预处理的必要性。我已经对提交给模型的图像的代码进行了更改,并且获得了更好的结果。但是,我仍然不清楚是否按照博客文章的模型处理预处理,或者我传递给Apple Squeezenet模型的图像数据的格式是否不正确。
例如,以下是Python中Squeezenet与我在应用程序中从Apple的Squeezenet模式获得的一些比较结果(除非另有说明,否则两种模型都正确地对图像进行分类):
Image Confidence value
Samoyed dog 0.899 (Python model with preprocess_input applied)
Samoyed dog 0.994 (Python model without preprocess_input applied)
Samoyed dog 0.837 (Apple model)
Beagle dog 0.962 (Python model with preprocess_input applied)
Beagle dog 0.975 (Python model without preprocess_input applied)
Beagle dog* 0.626 (Apple model)
* Apple model incorrectly classified as Labrador Retriever
Tabby cat 0.863 (Python model with preprocess_input applied)
Tabby cat 0.986 (Python model without preprocess_input applied)
Tabby cat 0.995 (Apple model)
是否这是一个预处理问题还是别的什么?可能是提交给模型的图像格式不正确吗?有没有办法看看CoreML模型执行了哪些预处理步骤(如果有的话)?