28 dataroot::freeze(doit);
31 backend::freeze(doit);
33 intensors::freeze(doit);
34 outtensors::freeze(doit);
54 if (itsNet.empty() ==
false) itsNet = cv::dnn::Net();
59 if (
config::get().empty())
LINFO(
"Loading " << m <<
" ...");
else LINFO(
"Loading " << m <<
" / " << c <<
" ...");
62 itsNet = cv::dnn::readNet(m, c);
67 case network::Backend::OpenCV: itsNet.setPreferableBackend(cv::dnn::DNN_BACKEND_OPENCV);
break;
68 case network::Backend::InferenceEngine: itsNet.setPreferableBackend(cv::dnn::DNN_BACKEND_INFERENCE_ENGINE);
break;
69 case network::Backend::TimVX: itsNet.setPreferableBackend(cv::dnn::DNN_BACKEND_TIMVX);
break;
71 case network::Backend::Default: itsNet.setPreferableBackend(cv::dnn::DNN_BACKEND_DEFAULT);
break;
77 case network::Target::CPU: itsNet.setPreferableTarget(cv::dnn::DNN_TARGET_CPU);
break;
79 case network::Target::OpenCL: itsNet.setPreferableTarget(cv::dnn::DNN_TARGET_OPENCL);
break;
80 case network::Target::OpenCL_FP16: itsNet.setPreferableTarget(cv::dnn::DNN_TARGET_OPENCL_FP16);
break;
81 case network::Target::Myriad: itsNet.setPreferableTarget(cv::dnn::DNN_TARGET_MYRIAD);
break;
82 case network::Target::NPU: itsNet.setPreferableTarget(cv::dnn::DNN_TARGET_NPU);
break;
88 itsOutNames = itsNet.getUnconnectedOutLayersNames();
90 for (
auto const & s : itsOutNames)
LINFO(
"Output layer " << i++ <<
": " << s);
95 std::vector<std::string> & info)
97 if (blobs.size() != 1)
LFATAL(
"Expecting exactly one input blob");
99 if (itsNet.empty())
LFATAL(
"Internal inconsistency");
101 itsNet.setInput(blobs[0]);
102 std::vector<cv::Mat> outs;
103 itsNet.forward(outs, itsOutNames);
106 if (itsFLOPS.empty())
108 std::vector<cv::dnn::MatShape> inshapes;
109 for (
size_t i = 0; i < blobs.size(); ++i)
111 cv::dnn::MatShape s; cv::MatSize
const & ms = blobs[i].size;
112 for (
int k = 0; k < ms.dims(); ++k) s.emplace_back(ms[k]);
113 inshapes.emplace_back(s);
118 info.emplace_back(
"Forward Network: " + itsFLOPS);