I have a yolov3 network trained on custom dataset and i am using opencv's dnn module for inference. Up until now i was passing a single image to the network for inference and was able to get detection outputs using code from opencv dnn detection sample.
But now i want to process a batch of images at a time so i change the code to use cv::dnn::blobFromImages
for creating network input blob and forward it through the network and it works fine.
cv::Mat inputBlob = cv::dnn::blobFromImages(input_images_vec, scalefactor, netInputSize, meanToSubtract, swapRB, crop);
net.setInput(inputBlob);
std::vector<std::vector<cv::Mat>> outs;
net.forward(outs, outNames);
Now i am unable to process the output of the network to get detections from it because in case of batch size > 1 the rows and cols of output are -1, -1 and the output processing code needs to know rows and cols.
std::cout << "Input blob size: " << std::endl;
std::cout << inputBlob.size << std::endl;
for (size_t i = 0; i < outs.size(); i++)
{
std::vector<cv::Mat> o = outs.at(i);
for (size_t j = 0; j < o.size(); j++)
{
cv::Mat blob = o.at(j);
std::cout << "blob size: " << blob.size << std::endl;
std::cout << "dims: " << blob.size.dims() << std::endl;
std::cout << "rows: " << blob.rows << " cols: " << blob.cols << " channels: " << blob.channels() << std::endl;
}
}
when batch size is 1
when batch size is 2