繁体   English   中英

如何将多个输入输入 opencv dnn

[英]How to feed multiple input into opencv dnn

我有一个.pb model 文件。 我使用 opencv 的 readnetfromtensorflow() 加载了 model。 现在我想使用 model 来生成预测。 model 输入有 4 种类型。

输入数据

  1. 256x256 图像
  2. 64x64 图像
  3. 64x64 图像
  4. 数组(大小为 4)

output数据

  1. 数组(大小为 2)

为了生成模型的预测,我首先必须将输入转换为 blobFromImages。 但是,我无法使用它,因为需要转换的每个图像都有不同的大小。 我还尝试将每个图像插入到 setInput() 中的向量中,但失败了。 这种情况下有多个输入怎么办?

这是我尝试过的代码。

cv::dnn::Net net = cv::dnn::readNetFromTensorflow("model/mfg.pb”);
cv::Mat input_face = cv::dnn::blobFromImage(face, 1, cv::Size(256,256), cv::Scalar(104,177,123), true, false);
cv::Mat input_leye = cv::dnn::blobFromImage(leye, 1, cv::Size(64,64), cv::Scalar(104,177,123), true, false);
cv::Mat input_reye = cv::dnn::blobFromImage(reye, 1, cv::Size(64,64), cv::Scalar(104,177,123), true, false);
cv::Mat input_bbox = (cv::Mat1d(1,4) << face_bbox[0]., face_bbox[1]., face_bbox[2]., face_bbox[3].);

std::vector<cv::Mat> input_image = {input_face, input_leye, input_reye, input_bbox};
net.setInput(input_image);
net.forward();

但是,它失败了,并且出现了一条错误消息。

错误 libc++abi:以 cv::Exception 类型的未捕获异常终止:OpenCV(4.5.5) /tmp/opencv-20220714-27380-1eyun69/opencv-4.5.5/modules/core/src/matrix_wrap.cpp: 81:错误:(-215:断言失败)0 <= i && i < (int)v.size() 在 function 'getMat_'

您不能在cv::dnn::Net上设置多个输入。(不支持。)

我建议两种选择。

  1. 您可以使用 Tensorflow 进行 DNN 计算,并使用 OpenCV 进行其他图像/视频任务。 您可以将tensorflow::Tensor的数据包装为cv::Mat (请参阅纪尧姆在这个问题中的回答。)

  2. 将功能 model 重新设计为顺序 model。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM