如何将keras H5转换后的模型的输入预处理为pb文件

时间:2020-09-15 11:55:56

标签: python c++ tensorflow keras neural-network

我成功地将Keras H5模型转换为Tensorflow pb文件,但是进行预测时却得到了完全不同的结果。

在Python中,我使用2个Keras模块在馈入网络之前对数据进行预处理:

from tensorflow.keras.applications.mobilenet_v2 import preprocess_input
from tensorflow.keras.preprocessing.image import img_to_array

这是我预处理Python代码中数据的方式:

# extract the object ROI, convert it from BGR to RGB channel
# ordering, resize it to 224x224, and preprocess it
moving_object = img_orig[startY:endY, startX:endX]
moving_object = cv2.cvtColor(moving_object, cv2.COLOR_BGR2RGB)
moving_object = cv2.resize(moving_object, (224, 224))
moving_object = img_to_array(moving_object)
moving_object = preprocess_input(moving_object)
    
objects.append(moving_object)

然后我通过Keras预测方法进行批量预测:

# only make a predictions if at least one object was detected
if len(objects) > 0:
objects = np.array(objects, dtype="float32")
preds = wine_plant_model.predict(objects)

这是我在C ++中预处理数据的方式:

vector<Mat> detected_objects;

//extract the object ROI
Mat image_roi = img_orig(roi);

detected_objects.push_back(image_roi);

以及如何在C ++中进行批量预测:

if (detected_objects.size() > 0) {

vector<Mat> preds;
    
Mat inputBlobs = cv::dnn::blobFromImages(detected_objects, 1.0, Size(224, 224));
    
net.setInput(inputBlobs);
Mat outputs = net.forward();

} 

似乎我没有在C ++中以正确的方式预处理图像,因此无法获得相同的结果。但是我找不到C ++中Keras preprocess_input()方法的等效项。

查看Keras文档,python preprocess_input()方法在1到-1之间缩放数据。因此,我不知道是否应该使用cv :: normalize方法来规范化数据,或者使用blobFromImages缩放因子来进行某些操作。我在这里有点困惑。

能否请您告诉我,即使不是通过Keras(在C ++中似乎不可用),也应该以相同的方式在C ++中对数据进行预处理。

0 个答案:

没有答案