Сбой процесса пересылки в модели ONNX - PullRequest
0 голосов
/ 28 мая 2020

Я хочу использовать FER + Emotion Recognition в моем проекте:

string modelPath = "../data/model.onnx";
Mat frame = imread("../data/Smile-Mood.jpg");

Mat gray;
cvtColor(frame, gray, COLOR_BGR2GRAY);

float scale = 1.0;
int inHeight = 64;
int inWidth = 64;
bool swapRB = false;

//Read and initialize network
cv::dnn::Net net = cv::dnn::readNetFromONNX(modelPath);

Mat blob;
//Create a 4D blob from a frame
cv::dnn::blobFromImage(gray, blob, scale, Size(inWidth, inHeight), swapRB, false);

//Set input blob
net.setInput(blob);

//Make forward pass
Mat prob = net.forward();

У меня эта ошибка в последней строке:

Unhandled exception at 0x00007FFDA25AA799 in FERPlusDNNOpenCV.exe: Microsoft C++ exception: cv::Exception at memory location 0x00000063839BE050. occurred

OpenCV(4.1.0) Error: Assertion failed (ngroups > 0 && inpCn % ngroups == 0 && outCn % ngroups == 0) in cv::dnn::ConvolutionLayerImpl::getMemoryShapes

как это исправить?

ОБНОВЛЕНИЕ СОГЛАСНО @Micka КОММЕНТАРИЙ :

Mat dstImg = Mat(64, 64, CV_32FC1);

resize(gray, dstImg, Size(64, 64));

std::vector<float> array;
if (dstImg.isContinuous())
    array.assign(dstImg.data, dstImg.data + dstImg.total());
else{
    for (int i = 0; i < dstImg.rows; ++i) {
        array.insert(array.end(), dstImg.ptr<float>(i), dstImg.ptr<float>(i) + dstImg.cols);
    }
}

//Set input blob
net.setInput(array);

//Make forward pass
Mat prob = net.forward();

У меня такая ошибка: vector subscript out of range.

Следует ли мне использовать другую функцию вместо setInput?

...