28 dataroot::freeze(doit);
31 backend::freeze(doit);
33 intensors::freeze(doit);
34 outtensors::freeze(doit);
53 if (itsNet.empty() ==
false) itsNet = cv::dnn::Net();
57 LINFO(
"Loading " << m <<
" / " << c <<
" ...");
60 itsNet = cv::dnn::readNet(m, c);
65 case network::Backend::OpenCV: itsNet.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
break;
66 case network::Backend::InferenceEngine: itsNet.setPreferableBackend(cv::dnn::DNN_BACKEND_INFERENCE_ENGINE);
break;
68 case network::Backend::Default: itsNet.setPreferableBackend(cv::dnn::DNN_BACKEND_DEFAULT);
break;
74 case network::Target::CPU: itsNet.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);
break;
76 case network::Target::OpenCL: itsNet.setPreferableTarget(cv::dnn::DNN_TARGET_OPENCL);
break;
77 case network::Target::OpenCL_FP16: itsNet.setPreferableTarget(cv::dnn::DNN_TARGET_OPENCL_FP16);
break;
78 case network::Target::Myriad: itsNet.setPreferableTarget(cv::dnn::DNN_TARGET_MYRIAD);
break;
84 itsOutNames = itsNet.getUnconnectedOutLayersNames();
85 for (
auto const & s : itsOutNames)
LINFO(
"Output layer: " << s);
90 std::vector<std::string> & info)
92 if (blobs.size() != 1)
LFATAL(
"Expecting exactly one input blob");
94 if (itsNet.empty())
LFATAL(
"Internal inconsistency");
96 itsNet.setInput(blobs[0]);
97 std::vector<cv::Mat> outs;
98 itsNet.forward(outs, itsOutNames);
101 std::vector<cv::dnn::MatShape> inshapes;
102 for (
size_t i = 0; i < blobs.size(); ++i)
104 cv::dnn::MatShape s; cv::MatSize
const & ms = blobs[i].size;
105 for (
int k = 0; k < ms.dims(); ++k) s.emplace_back(ms[k]);
106 inshapes.emplace_back(s);
108 info.emplace_back(
"Forward Network FLOPS: " +
std::to_string(itsNet.getFLOPS(inshapes)));