簡體   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