【发布时间】:2021-07-23 11:39:35
【问题描述】:
我有一个用于分类的 onnx 模型。我正在尝试用 c++ 对一些图像进行分类。我正在阅读 onnx 文件并尝试使用 opencv dnn 库进行预测。
在使用 python 时,我正在使用 numpy 预处理图像。我正在创建 4d 维 numpy 数组并用图像填充它。代码如下。
blob = np.full((1, imgHeight, imgWidth, 3), 0)
blob[0, :, :, :] = img
通过这种方式,blob 的维度顺序将是 NHWC,我可以将其用于将模型提供给分类。但是当我使用 blobfromimage 函数时,它给了我不同的输出,比如 NCWH。我不能用这种方式喂模型。当我使用 reshape 函数改变维度顺序时,模型预测始终是同一类。
blobfromimage 函数代码如下。
blob = cv2.dnn.blobFromImage(img,1.0, dsize, (0,0,0), False, False, cv2.CV_32F)
我正在尝试执行此过程,该过程在 C++ 中取得了积极的结果,但我不能将 numpy 数组库用于 C++。经过长时间的解释,我的问题是,如何预处理图像并创建 NHWC cv::Mat 对象以将模型提供给分类。我为这个问题浪费了将近 1 周的时间。
【问题讨论】:
-
我认为你应该创建一个原始数组并在那里复制图像数据。
-
你能告诉我怎么做吗?