From c48e3f7f3e66cc7b5a8ad26f8c2d4ef7702921c5 Mon Sep 17 00:00:00 2001 From: Abhishek Gola Date: Tue, 30 Jun 2026 19:28:19 +0530 Subject: [PATCH] changed OpData to LayerInfo --- modules/dnn/include/opencv2/dnn/dnn.hpp | 34 +++++----- .../dnn/include/opencv2/dnn/layer.details.hpp | 12 ++-- modules/dnn/include/opencv2/dnn/layer.hpp | 10 +-- modules/dnn/src/graph_block_layout.cpp | 2 +- modules/dnn/src/graph_buffer_allocator.cpp | 2 +- modules/dnn/src/graph_const_args.cpp | 6 +- modules/dnn/src/graph_const_fold.cpp | 8 +-- modules/dnn/src/graph_fusion_attention.cpp | 64 +++++++++---------- modules/dnn/src/graph_fusion_basic.cpp | 24 +++---- .../dnn/src/graph_fusion_matmul_to_gemm.cpp | 8 +-- modules/dnn/src/graph_fusion_qdq.cpp | 52 +++++++-------- .../src/graph_fusion_reshape_transpose.cpp | 12 ++-- .../dnn/src/graph_fusion_scale_softmax.cpp | 8 +-- modules/dnn/src/graph_fusion_shared_gemm.cpp | 22 +++---- .../dnn/src/graph_fusion_transpose_matmul.cpp | 8 +-- modules/dnn/src/layer.cpp | 40 ++++++------ modules/dnn/src/layer_factory.cpp | 6 +- modules/dnn/src/layers/conv2_layer.cpp | 2 +- modules/dnn/src/net_impl.cpp | 28 ++++---- modules/dnn/src/net_impl.hpp | 4 +- modules/dnn/src/net_impl2.cpp | 34 +++++----- modules/dnn/src/onnx/onnx_importer2.cpp | 8 +-- modules/dnn/src/op_cuda.cpp | 2 +- modules/dnn/src/tensorflow/tf_importer.cpp | 2 +- modules/dnn/src/tflite/tflite_importer.cpp | 2 +- modules/java/generator/gen_java.py | 3 +- 26 files changed, 201 insertions(+), 202 deletions(-) diff --git a/modules/dnn/include/opencv2/dnn/dnn.hpp b/modules/dnn/include/opencv2/dnn/dnn.hpp index d4a33a4199..4964eff494 100644 --- a/modules/dnn/include/opencv2/dnn/dnn.hpp +++ b/modules/dnn/include/opencv2/dnn/dnn.hpp @@ -264,22 +264,22 @@ CV__DNN_INLINE_NS_BEGIN /** @brief Backend-independent description of a graph operation (node). * - * %OpData carries everything needed to reason about an operation *without* executing it: + * %LayerInfo carries everything needed to reason about an operation *without* executing it: * its parameters (#blobs and type-specific fields of derived classes), graph wiring * (#inputs / #outputs as Arg indices) and shape/type/layout inference. The new DNN graph - * engine stores a topologically sorted sequence of %OpData nodes (see Graph::prog()); + * engine stores a topologically sorted sequence of %LayerInfo nodes (see Graph::prog()); * executable, backend-specific instances (Layer subclasses) are constructed from an - * %OpData during Net::finalizeNet(). + * %LayerInfo during Net::finalizeNet(). * - * Each operation type registers a `static Ptr create(const LayerParams&)` factory + * Each operation type registers a `static Ptr create(const LayerParams&)` factory * via @ref CV_DNN_REGISTER_OP_CLASS_STATIC. */ - class CV_EXPORTS_W OpData : public Algorithm + class CV_EXPORTS_W LayerInfo : public Algorithm { public: - OpData(); - explicit OpData(const LayerParams& params); - virtual ~OpData(); + LayerInfo(); + explicit LayerInfo(const LayerParams& params); + virtual ~LayerInfo(); void setParamsFrom(const LayerParams& params); @@ -335,19 +335,19 @@ CV__DNN_INLINE_NS_BEGIN /** @brief This interface class allows to build new Layers - are building blocks of networks. * - * A %Layer is the *executable*, backend-specific counterpart of an OpData node: it + * A %Layer is the *executable*, backend-specific counterpart of an LayerInfo node: it * implements forward() (and finalize()) for a particular backend/target. In the new graph - * engine a %Layer is created from an OpData (held in #data) by Net::finalizeNet(); its - * inference methods (getMemoryShapes() etc., inherited from OpData) delegate to #data. + * engine a %Layer is created from an LayerInfo (held in #data) by Net::finalizeNet(); its + * inference methods (getMemoryShapes() etc., inherited from LayerInfo) delegate to #data. * * Each class, derived from Layer, must implement forward() method to compute outputs. * Also before using the new layer into networks you must register your layer by using one of @ref dnnLayerFactory "LayerFactory" macros. */ - class CV_EXPORTS_W Layer : public OpData + class CV_EXPORTS_W Layer : public LayerInfo { public: - Ptr data; + Ptr data; /** @brief Computes and sets internal parameters according to inputs, outputs and blobs. * @deprecated Use Layer::finalize(InputArrayOfArrays, OutputArrayOfArrays) instead @@ -514,15 +514,15 @@ CV__DNN_INLINE_NS_BEGIN virtual bool empty() const = 0; virtual void clear() = 0; virtual std::string name() const = 0; - virtual const std::vector& append(Ptr& op, + virtual const std::vector& append(Ptr& op, const std::vector& outnames=std::vector()) = 0; - virtual Arg append(Ptr& op, const std::string& outname=std::string()) = 0; + virtual Arg append(Ptr& op, const std::string& outname=std::string()) = 0; virtual std::ostream& dump(std::ostream& strm, int indent, bool comma) = 0; virtual const std::vector& inputs() const = 0; virtual const std::vector& outputs() const = 0; virtual void setOutputs(const std::vector& outputs) = 0; - virtual const std::vector >& prog() const = 0; - virtual void setProg(const std::vector >& newprog) = 0; + virtual const std::vector >& prog() const = 0; + virtual void setProg(const std::vector >& newprog) = 0; virtual int opBackend(int opidx) const = 0; }; diff --git a/modules/dnn/include/opencv2/dnn/layer.details.hpp b/modules/dnn/include/opencv2/dnn/layer.details.hpp index 0fa36c1264..e1807c40fb 100644 --- a/modules/dnn/include/opencv2/dnn/layer.details.hpp +++ b/modules/dnn/include/opencv2/dnn/layer.details.hpp @@ -45,9 +45,9 @@ Ptr __LayerStaticRegisterer_func_##type(LayerParams ¶ms) \ { return Ptr(new class(params)); } \ static cv::dnn::details::_LayerStaticRegisterer __LayerStaticRegisterer_##type(#type, __LayerStaticRegisterer_func_##type); -/** @brief Registers an OpData (metadata node) class for the new graph engine. +/** @brief Registers an LayerInfo (metadata node) class for the new graph engine. * @param type string, containing the operation type name. - * @param class C++ class derived from OpData, providing `static Ptr create(const LayerParams&)`. + * @param class C++ class derived from LayerInfo, providing `static Ptr create(const LayerParams&)`. * @details This macro must be placed inside the function code (e.g. initializeLayerFactory()). */ #define CV_DNN_REGISTER_OP_CLASS(type, class) \ @@ -57,7 +57,7 @@ static cv::dnn::details::_LayerStaticRegisterer __LayerStaticRegisterer_##type(# * @param type string, containing the operation type name. * @param backendId backend id the executor targets (e.g. DNN_BACKEND_OPENCV, DNN_BACKEND_CUDA). * @param class C++ class derived from Layer, providing - * `static Ptr create(const Ptr&, void* backendCtx)` (null Ptr if unsupported). + * `static Ptr create(const Ptr&, void* backendCtx)` (null Ptr if unsupported). * @details This macro must be placed inside the function code. */ #define CV_DNN_REGISTER_EXEC_CLASS(type, backendId, class) \ @@ -72,13 +72,13 @@ Ptr _layerDynamicRegisterer(LayerParams ¶ms) } template -Ptr _opDynamicRegisterer(const LayerParams ¶ms) +Ptr _opDynamicRegisterer(const LayerParams ¶ms) { - return Ptr(OpClass::create(params)); + return Ptr(OpClass::create(params)); } template -Ptr _execDynamicRegisterer(const Ptr& data, void* backendCtx) +Ptr _execDynamicRegisterer(const Ptr& data, void* backendCtx) { return Ptr(ExecClass::create(data, backendCtx)); } diff --git a/modules/dnn/include/opencv2/dnn/layer.hpp b/modules/dnn/include/opencv2/dnn/layer.hpp index 196d86eb20..b66bb62e3c 100644 --- a/modules/dnn/include/opencv2/dnn/layer.hpp +++ b/modules/dnn/include/opencv2/dnn/layer.hpp @@ -78,16 +78,16 @@ public: // Builds the abstract (metadata) node for an operation type. - typedef Ptr(*OpConstructor)(const LayerParams& params); - //! Builds a backend-specific executor from an OpData; returns null Ptr if unsupported. - typedef Ptr(*ExecConstructor)(const Ptr& data, void* backendCtx); + typedef Ptr(*OpConstructor)(const LayerParams& params); + //! Builds a backend-specific executor from an LayerInfo; returns null Ptr if unsupported. + typedef Ptr(*ExecConstructor)(const Ptr& data, void* backendCtx); static void registerOp(const String& type, OpConstructor constructor); - static Ptr createOp(const String& type, const LayerParams& params); + static Ptr createOp(const String& type, const LayerParams& params); static void registerExec(const String& type, int backendId, ExecConstructor constructor); static Ptr createExec(const String& type, int backendId, - const Ptr& data, void* backendCtx); + const Ptr& data, void* backendCtx); private: LayerFactory(); diff --git a/modules/dnn/src/graph_block_layout.cpp b/modules/dnn/src/graph_block_layout.cpp index e109adc9a7..1a90dec1be 100644 --- a/modules/dnn/src/graph_block_layout.cpp +++ b/modules/dnn/src/graph_block_layout.cpp @@ -11,7 +11,7 @@ CV__DNN_INLINE_NS_BEGIN using std::vector; using std::string; -using PLayer = Ptr; +using PLayer = Ptr; using PGraph = Ptr; /* Inserts layout conversion operations (if needed) into the model graph and subgraphs. diff --git a/modules/dnn/src/graph_buffer_allocator.cpp b/modules/dnn/src/graph_buffer_allocator.cpp index 3a58d89556..7f6bb6f53b 100644 --- a/modules/dnn/src/graph_buffer_allocator.cpp +++ b/modules/dnn/src/graph_buffer_allocator.cpp @@ -226,7 +226,7 @@ struct BufferAllocator } } } - const std::vector >& prog = graph->prog(); + const std::vector >& prog = graph->prog(); for (const auto& layer: prog) { bool inplace = false; Arg reuseArg; diff --git a/modules/dnn/src/graph_const_args.cpp b/modules/dnn/src/graph_const_args.cpp index 1bb144b50f..fc88010762 100644 --- a/modules/dnn/src/graph_const_args.cpp +++ b/modules/dnn/src/graph_const_args.cpp @@ -36,14 +36,14 @@ struct ConstArgs void processGraph(Ptr& graph) { - const std::vector >& prog = graph->prog(); + const std::vector >& prog = graph->prog(); size_t i, nops = prog.size(); std::vector removed_args; std::vector saved_tail_inputs; for (i = 0; i < nops; i++) { - const Ptr& layer = prog[i]; - OpData* layer_ptr = const_cast(layer.get()); + const Ptr& layer = prog[i]; + LayerInfo* layer_ptr = const_cast(layer.get()); std::vector >* subgraphs = layer->subgraphs(); if (subgraphs) { for (Ptr& g: *subgraphs) { diff --git a/modules/dnn/src/graph_const_fold.cpp b/modules/dnn/src/graph_const_fold.cpp index 442e5f0df8..9979398bb2 100644 --- a/modules/dnn/src/graph_const_fold.cpp +++ b/modules/dnn/src/graph_const_fold.cpp @@ -30,7 +30,7 @@ struct ConstFolding netimpl->scratchBufs.clear(); } - OpData* getLayer(std::vector >& newprog, int op_idx) const + LayerInfo* getLayer(std::vector >& newprog, int op_idx) const { return op_idx >= 0 ? newprog.at(op_idx).get() : 0; } @@ -47,16 +47,16 @@ struct ConstFolding { netimpl->scratchBufs.clear(); bool modified = false; - const std::vector >& prog = graph->prog(); + const std::vector >& prog = graph->prog(); size_t i, nops = prog.size(); - std::vector > newprog; + std::vector > newprog; std::vector removed_args; std::vector inpMats, tempMats; std::vector inpTypes, outTypes, tempTypes; std::vector inpShapes, outShapes, tempShapes; for (i = 0; i < nops; i++) { - const Ptr& layer = prog[i]; + const Ptr& layer = prog[i]; std::vector >* subgraphs = layer->subgraphs(); if (subgraphs) { for (Ptr& g: *subgraphs) { diff --git a/modules/dnn/src/graph_fusion_attention.cpp b/modules/dnn/src/graph_fusion_attention.cpp index fc5ab02cd9..7c7c3a60d0 100644 --- a/modules/dnn/src/graph_fusion_attention.cpp +++ b/modules/dnn/src/graph_fusion_attention.cpp @@ -32,35 +32,35 @@ struct ModelFusionAttention return it->second[0]; } - bool isReshape(const vector>& prog, int idx) const + bool isReshape(const vector>& prog, int idx) const { if (idx < 0 || idx >= (int)prog.size() || !prog[idx]) return false; return dynamic_cast(prog[idx].get()) != nullptr; } - bool isTranspose(const vector>& prog, int idx) const + bool isTranspose(const vector>& prog, int idx) const { if (idx < 0 || idx >= (int)prog.size() || !prog[idx]) return false; return dynamic_cast(prog[idx].get()) != nullptr; } - bool isSoftmax(const vector>& prog, int idx) const + bool isSoftmax(const vector>& prog, int idx) const { if (idx < 0 || idx >= (int)prog.size() || !prog[idx]) return false; return prog[idx]->type == "Softmax"; } - bool isMatMul(const vector>& prog, int idx) const + bool isMatMul(const vector>& prog, int idx) const { if (idx < 0 || idx >= (int)prog.size() || !prog[idx]) return false; return dynamic_cast(prog[idx].get()) != nullptr; } - static bool isProjCandidate(const Ptr& l) + static bool isProjCandidate(const Ptr& l) { if (l->blobs.empty() || l->inputs.size() != 1) return false; if (dynamic_cast(l.get())) @@ -74,7 +74,7 @@ struct ModelFusionAttention // Returns the projection weight in [K, N] (input_hidden, output_hidden) // layout, transposing if the source is a Gemm with trans_b. - static Mat getProjWeight(const Ptr& l) + static Mat getProjWeight(const Ptr& l) { const Mat& W = l->blobs[0]; GemmLayer* g = dynamic_cast(l.get()); @@ -86,7 +86,7 @@ struct ModelFusionAttention return W; } - bool isScalarBinOp(const vector>& prog, int idx, + bool isScalarBinOp(const vector>& prog, int idx, NaryEltwiseLayer::OPERATION op, float* val) const { if (idx < 0 || idx >= (int)prog.size() || !prog[idx]) @@ -109,18 +109,18 @@ struct ModelFusionAttention return false; } - bool isScalarMul(const vector>& prog, int idx, float* val) const + bool isScalarMul(const vector>& prog, int idx, float* val) const { return isScalarBinOp(prog, idx, NaryEltwiseLayer::OPERATION::PROD, val); } - bool isScalarDiv(const vector>& prog, int idx, float* val) const + bool isScalarDiv(const vector>& prog, int idx, float* val) const { return isScalarBinOp(prog, idx, NaryEltwiseLayer::OPERATION::DIV, val); } // True if `arg` is produced by the dynamic scale chain Sqrt<-Cast<-Div(1,.)<-Sqrt<-Cast<-Slice<-Shape; visited ops are appended to `chain_ops`. - bool isRuntimeQKScaleChain(const vector>& prog, Arg arg, + bool isRuntimeQKScaleChain(const vector>& prog, Arg arg, std::set& chain_ops) const { const std::vector expected = { @@ -133,7 +133,7 @@ struct ModelFusionAttention if (it == producer_.end()) return false; int idx = it->second; if (idx < 0 || idx >= (int)prog.size() || !prog[idx]) return false; - const Ptr& l = prog[idx]; + const Ptr& l = prog[idx]; if (want == "NaryEltwise") { NaryEltwiseLayer* elt = dynamic_cast(l.get()); if (!elt || elt->op != NaryEltwiseLayer::OPERATION::DIV) return false; @@ -171,7 +171,7 @@ struct ModelFusionAttention // Accept Add op with exactly two inputs; identify the non-constant runtime // input (the mask tensor). Returns false if the Add doesn't match. - bool isMaskAdd(const vector>& prog, int idx, Arg* out_mask) const + bool isMaskAdd(const vector>& prog, int idx, Arg* out_mask) const { if (idx < 0 || idx >= (int)prog.size() || !prog[idx]) return false; @@ -186,7 +186,7 @@ struct ModelFusionAttention // Extract a scalar integer from a const-valued arg, possibly wrapped in an // Unsqueeze of a scalar const. Returns -1 if extraction fails. - int extractConstInt(const vector>& prog, Arg a) const + int extractConstInt(const vector>& prog, Arg a) const { auto readScalar = [&](Arg x) -> int { if (!netimpl->isConstArg(x)) return -1; @@ -207,7 +207,7 @@ struct ModelFusionAttention return -1; } - void collectShapeChain(const vector>& prog, int concat_idx, + void collectShapeChain(const vector>& prog, int concat_idx, std::set& chain) const { if (concat_idx < 0 || concat_idx >= (int)prog.size() || !prog[concat_idx]) @@ -238,7 +238,7 @@ struct ModelFusionAttention } template - int findMatchingConsumer(const vector>& prog, Arg out, + int findMatchingConsumer(const vector>& prog, Arg out, Pred pred, std::set* extra_shape_ops) const { auto it = consumers_.find(out.idx); @@ -258,7 +258,7 @@ struct ModelFusionAttention return matched; } - int followProjChain(const vector>& prog, + int followProjChain(const vector>& prog, int proj_matmul_idx, int* out_reshape_idx, int* out_num_heads, @@ -268,7 +268,7 @@ struct ModelFusionAttention if (proj_matmul_idx < 0) return -1; Arg proj_out = prog[proj_matmul_idx]->outputs[0]; int reshape_idx = findMatchingConsumer(prog, proj_out, - [](OpData* L){ return dynamic_cast(L) != nullptr; }, + [](LayerInfo* L){ return dynamic_cast(L) != nullptr; }, extra_ops_to_remove); if (!isReshape(prog, reshape_idx)) return -1; @@ -311,9 +311,9 @@ struct ModelFusionAttention // Combined-QKV attention: QKV proj -> Reshape -> // Transpose -> 3 Gathers -> QK^T -> Softmax(no mask) -> *V. - bool tryFuseCombinedQKV(const vector>& prog, int qkv_matmul_idx, + bool tryFuseCombinedQKV(const vector>& prog, int qkv_matmul_idx, std::set& removed_ops, - vector>>& replacements) + vector>>& replacements) { if (qkv_matmul_idx < 0 || qkv_matmul_idx >= (int)prog.size() || !prog[qkv_matmul_idx]) return false; @@ -456,7 +456,7 @@ struct ModelFusionAttention int out_trans_idx = singleConsumer(prog[av_matmul_idx]->outputs[0]); if (!isTranspose(prog, out_trans_idx)) return false; int out_reshape_idx = findMatchingConsumer(prog, prog[out_trans_idx]->outputs[0], - [](OpData* L){ return dynamic_cast(L) != nullptr; }, + [](LayerInfo* L){ return dynamic_cast(L) != nullptr; }, &extra_ops); if (!isReshape(prog, out_reshape_idx)) return false; @@ -487,7 +487,7 @@ struct ModelFusionAttention attn_params.blobs.push_back(W_qkv); if (has_bias) attn_params.blobs.push_back(bias_qkv); - Ptr attn_layer = LayerFactory::createLayerInstance(attn_params.type, attn_params); + Ptr attn_layer = LayerFactory::createLayerInstance(attn_params.type, attn_params); CV_Assert(attn_layer); Arg shared_input = prog[qkv_matmul_idx]->inputs[0]; attn_layer->inputs = { shared_input }; @@ -514,7 +514,7 @@ struct ModelFusionAttention // CLIP-branch trace: arg -> [Transpose3D(K^T)] -> Reshape3D -> Transpose -> // Reshape4D -> [Mul(Q scale)] -> [Add(bias)] -> proj_MatMul. - int traceClipBranch(const vector>& prog, Arg arg, + int traceClipBranch(const vector>& prog, Arg arg, bool is_q_branch, bool is_k_branch, Mat& out_W, Mat& out_bias, int& out_num_heads, float& out_q_scale, @@ -660,9 +660,9 @@ struct ModelFusionAttention // 3 separate q/k/v projections, Q scaled, K^T at // the QK^T matmul, output reshaped+transposed back to (B,S,H*D). - bool tryFuseClipAttention(const vector>& prog, int softmax_idx, + bool tryFuseClipAttention(const vector>& prog, int softmax_idx, std::set& removed_ops, - vector>>& replacements) + vector>>& replacements) { if (softmax_idx < 0 || softmax_idx >= (int)prog.size() || !prog[softmax_idx]) return false; @@ -782,7 +782,7 @@ struct ModelFusionAttention attn_params.blobs.push_back(W_qkv); if (!bias_qkv.empty()) attn_params.blobs.push_back(bias_qkv); - Ptr attn_layer = + Ptr attn_layer = LayerFactory::createLayerInstance(attn_params.type, attn_params); if (!attn_layer) return false; attn_layer->inputs = { shared_input }; @@ -804,7 +804,7 @@ struct ModelFusionAttention bool fuseGraph(Ptr& graph) { - const vector>& prog = graph->prog(); + const vector>& prog = graph->prog(); size_t nops = prog.size(); producer_.clear(); @@ -885,7 +885,7 @@ struct ModelFusionAttention Arg k_tr_out = prog[transpose_idx[k_slot]]->outputs[0]; // Tolerate a Shape consumer alongside the Mul/MatMul: the runtime-scale chain (Shape->Slice->Cast->Sqrt...) branches off the Q/K transpose. int k_next = findMatchingConsumer(prog, k_tr_out, - [](OpData* L) { + [](LayerInfo* L) { return dynamic_cast(L) != nullptr || dynamic_cast(L) != nullptr; }, @@ -939,7 +939,7 @@ struct ModelFusionAttention if (vit_style) { int q_next = findMatchingConsumer(prog, q_tr_out, - [](OpData* L) { + [](LayerInfo* L) { return dynamic_cast(L) != nullptr || dynamic_cast(L) != nullptr; }, @@ -1020,7 +1020,7 @@ struct ModelFusionAttention Arg out_tr_out = prog[out_transpose_idx]->outputs[0]; int out_reshape_idx = findMatchingConsumer(prog, out_tr_out, - [](OpData* L){ return dynamic_cast(L) != nullptr; }, + [](LayerInfo* L){ return dynamic_cast(L) != nullptr; }, &extra_ops); if (!isReshape(prog, out_reshape_idx)) continue; @@ -1094,7 +1094,7 @@ struct ModelFusionAttention if (has_bias) attn_params.blobs.push_back(bias_qkv); - Ptr attn_layer = LayerFactory::createLayerInstance( + Ptr attn_layer = LayerFactory::createLayerInstance( attn_params.type, attn_params); CV_Assert(attn_layer); @@ -1157,7 +1157,7 @@ struct ModelFusionAttention } if (modified) { - vector> newprog; + vector> newprog; std::sort(attention_replacements_.begin(), attention_replacements_.end(), [](auto& a, auto& b) { return a.first < b.first; }); @@ -1183,7 +1183,7 @@ struct ModelFusionAttention private: std::map producer_; std::map> consumers_; - vector>> attention_replacements_; + vector>> attention_replacements_; }; void Net::Impl::fuseAttention() diff --git a/modules/dnn/src/graph_fusion_basic.cpp b/modules/dnn/src/graph_fusion_basic.cpp index 7e32685b63..ef95b05d76 100644 --- a/modules/dnn/src/graph_fusion_basic.cpp +++ b/modules/dnn/src/graph_fusion_basic.cpp @@ -30,7 +30,7 @@ struct ModelFusionBasic } template _LayerType* - getLayer(std::vector >& newprog, int op_idx) const + getLayer(std::vector >& newprog, int op_idx) const { return op_idx >= 0 ? dynamic_cast<_LayerType*>(newprog.at(op_idx).get()) : 0; } @@ -39,14 +39,14 @@ struct ModelFusionBasic { vector removed_args; bool modified = false; - const std::vector >& prog = graph->prog(); + const std::vector >& prog = graph->prog(); size_t i, nargs = netimpl->args.size(), nops = prog.size(); std::vector producer_of(nargs, -1); - std::vector > newprog; + std::vector > newprog; std::vector fused_inputs; for (i = 0; i < nops; i++) { - const Ptr& layer = prog[i]; + const Ptr& layer = prog[i]; Layer* layer_ptr = (Layer*)layer.get(); int fused_layer_idx = -1; std::vector >* subgraphs = layer->subgraphs(); @@ -209,7 +209,7 @@ struct ModelFusionBasic gnparams.type = "GroupNormalization"; gnparams.set("epsilon", instnorm->epsilon); gnparams.set("num_groups", num_groups); - Ptr gnlayer = GroupNormLayer::create(gnparams); + Ptr gnlayer = GroupNormLayer::create(gnparams); gnlayer->netimpl = netimpl; gnlayer->inputs = {orig_inp, mul_scale_arg, add_bias_arg}; newprog[instnorm_idx] = gnlayer; @@ -219,9 +219,9 @@ struct ModelFusionBasic removed_args.push_back(reshape2_inp); removed_args.push_back(reshape2_out); removed_args.push_back(mul_out); - newprog[reshape1_idx] = Ptr(); - newprog[reshape2_idx] = Ptr(); - newprog[mul_idx] = Ptr(); + newprog[reshape1_idx] = Ptr(); + newprog[reshape2_idx] = Ptr(); + newprog[mul_idx] = Ptr(); break; } } @@ -293,15 +293,15 @@ struct FuseBNPass void fuseGraph(Ptr& graph) { - const std::vector >& prog = graph->prog(); + const std::vector >& prog = graph->prog(); size_t nops = prog.size(), nargs = netimpl->args.size(); - std::vector > newprog; + std::vector > newprog; newprog.reserve(nops); std::vector producer_of((int)nargs, -1); bool modified = false; for (size_t i = 0; i < nops; i++) { - const Ptr& layer = prog[i]; + const Ptr& layer = prog[i]; Layer* layer_ptr = (Layer*)layer.get(); std::vector >* subgraphs = layer->subgraphs(); @@ -324,7 +324,7 @@ struct FuseBNPass usecounts[conv_inp0.idx] = 0; if (bn_inp0.idx >= 0) usecounts[bn_inp0.idx]++; - newprog[bn_idx] = Ptr(); + newprog[bn_idx] = Ptr(); modified = true; } } diff --git a/modules/dnn/src/graph_fusion_matmul_to_gemm.cpp b/modules/dnn/src/graph_fusion_matmul_to_gemm.cpp index 7eac023f0e..059a69ff41 100644 --- a/modules/dnn/src/graph_fusion_matmul_to_gemm.cpp +++ b/modules/dnn/src/graph_fusion_matmul_to_gemm.cpp @@ -43,7 +43,7 @@ struct ModelFusionMatMulToGemm bool fuseGraph(Ptr& graph) { - const vector>& prog = graph->prog(); + const vector>& prog = graph->prog(); size_t nops = prog.size(); bool modified = false; @@ -56,11 +56,11 @@ struct ModelFusionMatMulToGemm } } - vector> newprog = prog; + vector> newprog = prog; bool changed = false; for (size_t i = 0; i < nops; i++) { - const Ptr& layer = newprog[i]; + const Ptr& layer = newprog[i]; if (!layer) continue; MatMulLayer* mm = dynamic_cast(layer.get()); @@ -120,7 +120,7 @@ struct ModelFusionMatMulToGemm gp.blobs.push_back(B); if (have_bias) gp.blobs.push_back(layer->blobs[1]); - Ptr gemm = LayerFactory::createLayerInstance("Gemm", gp); + Ptr gemm = LayerFactory::createLayerInstance("Gemm", gp); if (!gemm) continue; gemm->inputs = layer->inputs; gemm->outputs = layer->outputs; diff --git a/modules/dnn/src/graph_fusion_qdq.cpp b/modules/dnn/src/graph_fusion_qdq.cpp index 4c286b0817..454eccb5e2 100644 --- a/modules/dnn/src/graph_fusion_qdq.cpp +++ b/modules/dnn/src/graph_fusion_qdq.cpp @@ -32,7 +32,7 @@ struct ModelFusionQDQ } template _LayerType* - getLayer(std::vector >& newprog, int op_idx) const + getLayer(std::vector >& newprog, int op_idx) const { return op_idx >= 0 ? dynamic_cast<_LayerType*>(newprog.at(op_idx).get()) : 0; } @@ -48,10 +48,10 @@ struct ModelFusionQDQ return params; } - Ptr createFusedLayer(const LayerParams& src) const + Ptr createFusedLayer(const LayerParams& src) const { LayerParams params = src; - Ptr layer = LayerFactory::createLayerInstance(params.type, params); + Ptr layer = LayerFactory::createLayerInstance(params.type, params); if (!layer.empty()) layer->netimpl = netimpl; return layer; @@ -94,7 +94,7 @@ struct ModelFusionQDQ size_t ninputs, const std::vector& inputs, const std::vector& producer_of, - std::vector >& newprog, + std::vector >& newprog, Arg& q_data_in, Arg& out_scale, Arg& out_zp, @@ -118,10 +118,10 @@ struct ModelFusionQDQ { vector removed_args; bool modified = false; - const std::vector >& prog = graph->prog(); + const std::vector >& prog = graph->prog(); size_t i, nargs = netimpl->args.size(), nops = prog.size(); std::vector producer_of(nargs, -1); - std::vector > newprog; + std::vector > newprog; std::vector fused_inputs; std::set skip_indices; std::vector override_outputs; @@ -129,7 +129,7 @@ struct ModelFusionQDQ for (i = 0; i < nops; i++) { if (skip_indices.count((int)i)) continue; - const Ptr& layer = prog[i]; + const Ptr& layer = prog[i]; Layer* layer_ptr = (Layer*)layer.get(); int fused_layer_idx = -1; std::vector >* subgraphs = layer->subgraphs(); @@ -219,7 +219,7 @@ struct ModelFusionQDQ removed_args.push_back(add_inp); for (int dq_prog_idx : dq_prog_indices) - newprog[dq_prog_idx] = Ptr(); + newprog[dq_prog_idx] = Ptr(); break; } @@ -289,7 +289,7 @@ struct ModelFusionQDQ fused_inputs.assign(1, dq->inputs[0]); removed_args.push_back(q_data_in); removed_args.push_back(relu_in); - newprog[dq_idx] = Ptr(); + newprog[dq_idx] = Ptr(); break; } } @@ -363,7 +363,7 @@ struct ModelFusionQDQ fused_inputs.assign(1, dq->inputs[0]); removed_args.push_back(q_data_in); removed_args.push_back(sig_in); - newprog[dq_idx] = Ptr(); + newprog[dq_idx] = Ptr(); break; } } @@ -479,7 +479,7 @@ struct ModelFusionQDQ if (relu_out_uc <= 1) { fused_layer_idx = add_idx2; newprog[add_idx2] = eltInt8; - newprog[relu_layer_idx2] = Ptr(); + newprog[relu_layer_idx2] = Ptr(); removed_args.push_back(q_inp); // relu_out removed_args.push_back(relu_in2); // add_out for (size_t dk = 0; dk < add2->inputs.size(); dk++) { @@ -487,7 +487,7 @@ struct ModelFusionQDQ } for (int dq_prog_idx : dq_prog_indices2) { if (dq_prog_idx >= 0) - newprog[dq_prog_idx] = Ptr(); + newprog[dq_prog_idx] = Ptr(); } } else { int new_idx = (int)newprog.size(); @@ -665,13 +665,13 @@ struct ModelFusionQDQ if (conv->inputs.size() == 3) { removed_args.push_back(conv->inputs[2]); if (dq_bias_idx >= 0) - newprog[dq_bias_idx] = Ptr(); + newprog[dq_bias_idx] = Ptr(); } if (usecounts.at(conv_x.idx) == 1) { removed_args.push_back(conv_x); - newprog[dq_x_idx] = Ptr(); + newprog[dq_x_idx] = Ptr(); } - newprog[dq_w_idx] = Ptr(); + newprog[dq_w_idx] = Ptr(); break; } } @@ -770,8 +770,8 @@ struct ModelFusionQDQ removed_args.push_back(q_data_in); removed_args.push_back(mm_x); removed_args.push_back(mm_w); - newprog[dq_x_idx] = Ptr(); - newprog[dq_w_idx] = Ptr(); + newprog[dq_x_idx] = Ptr(); + newprog[dq_w_idx] = Ptr(); break; } } @@ -896,9 +896,9 @@ struct ModelFusionQDQ removed_args.push_back(add_bias->inputs[mm_inp_k]); // matmul out removed_args.push_back(mm_x); removed_args.push_back(mm_w); - newprog[mm2_idx] = Ptr(); - newprog[dq_x_idx] = Ptr(); - newprog[dq_w_idx] = Ptr(); + newprog[mm2_idx] = Ptr(); + newprog[dq_x_idx] = Ptr(); + newprog[dq_w_idx] = Ptr(); break; } } @@ -1026,8 +1026,8 @@ struct ModelFusionQDQ removed_args.push_back(q_data_in); removed_args.push_back(gemm_a); removed_args.push_back(gemm_b); - newprog[dq_a_idx] = Ptr(); - newprog[dq_b_idx] = Ptr(); + newprog[dq_a_idx] = Ptr(); + newprog[dq_b_idx] = Ptr(); break; } } @@ -1089,7 +1089,7 @@ struct ModelFusionQDQ fused_inputs.assign(1, dq->inputs[0]); removed_args.push_back(q_data_in); removed_args.push_back(pool_in); - newprog[dq_idx] = Ptr(); + newprog[dq_idx] = Ptr(); break; } } @@ -1142,7 +1142,7 @@ struct ModelFusionQDQ fused_inputs.push_back(shuffle_layer->inputs[si]); removed_args.push_back(ql_data); removed_args.push_back(shuffle_inp); - newprog[dq_idx] = Ptr(); + newprog[dq_idx] = Ptr(); break; } } @@ -1304,7 +1304,7 @@ struct ModelFusionQDQ conv->float_input = true; conv->inputs[0] = ql_data; - newprog[ql_idx] = Ptr(); + newprog[ql_idx] = Ptr(); modified = true; } @@ -1339,7 +1339,7 @@ struct ModelFusionQDQ if (inp.idx >= 0 && inp.idx < (int)nargs) uc[inp.idx]--; } - layer = Ptr(); + layer = Ptr(); changed = true; } } diff --git a/modules/dnn/src/graph_fusion_reshape_transpose.cpp b/modules/dnn/src/graph_fusion_reshape_transpose.cpp index 15446d222c..eb5d4e9672 100644 --- a/modules/dnn/src/graph_fusion_reshape_transpose.cpp +++ b/modules/dnn/src/graph_fusion_reshape_transpose.cpp @@ -46,7 +46,7 @@ struct ModelFusionReshapeTranspose bool fuseGraph(Ptr& graph) { - const vector>& prog = graph->prog(); + const vector>& prog = graph->prog(); size_t nops = prog.size(); bool modified = false; @@ -72,7 +72,7 @@ struct ModelFusionReshapeTranspose vector dropped(nops, false); for (size_t i = 0; i < nops; i++) { - const Ptr& layer = prog[i]; + const Ptr& layer = prog[i]; if (!layer || dropped[i]) continue; if (layer->inputs.empty() || layer->outputs.empty()) continue; @@ -95,7 +95,7 @@ struct ModelFusionReshapeTranspose if (it != producer.end()) { int prod_idx = it->second; if (prod_idx >= 0 && !dropped[prod_idx]) { - const Ptr& pl = prog[prod_idx]; + const Ptr& pl = prog[prod_idx]; TransposeLayer* prevTr = dynamic_cast(pl.get()); Arg prevOut = layer->inputs[0]; bool single_consumer = usecounts[prevOut.idx] == 1 @@ -135,7 +135,7 @@ struct ModelFusionReshapeTranspose if (it != producer.end()) { int prod_idx = it->second; if (prod_idx >= 0 && !dropped[prod_idx]) { - const Ptr& pl = prog[prod_idx]; + const Ptr& pl = prog[prod_idx]; Reshape2Layer* prevRs = dynamic_cast(pl.get()); Arg prevOut = layer->inputs[0]; bool single_consumer = usecounts[prevOut.idx] == 1 @@ -154,7 +154,7 @@ struct ModelFusionReshapeTranspose } if (modified) { - vector> newprog; + vector> newprog; newprog.reserve(nops); for (size_t i = 0; i < nops; i++) { if (!dropped[i] && prog[i]) @@ -166,7 +166,7 @@ struct ModelFusionReshapeTranspose return modified; } - void redirectConsumers(const vector>& prog, + void redirectConsumers(const vector>& prog, const vector& dropped, size_t start_idx, Arg from, Arg to) { diff --git a/modules/dnn/src/graph_fusion_scale_softmax.cpp b/modules/dnn/src/graph_fusion_scale_softmax.cpp index 6156f0573a..f0747e697b 100644 --- a/modules/dnn/src/graph_fusion_scale_softmax.cpp +++ b/modules/dnn/src/graph_fusion_scale_softmax.cpp @@ -40,7 +40,7 @@ struct ModelFusionScaleSoftmax bool fuseGraph(Ptr& graph) { - const vector>& prog = graph->prog(); + const vector>& prog = graph->prog(); size_t nops = prog.size(); bool modified = false; @@ -70,7 +70,7 @@ struct ModelFusionScaleSoftmax vector dropped(nops, false); for (size_t i = 0; i < nops; i++) { - const Ptr& layer = prog[i]; + const Ptr& layer = prog[i]; if (!layer || dropped[i]) continue; SoftmaxLayer* sm = dynamic_cast(layer.get()); @@ -83,7 +83,7 @@ struct ModelFusionScaleSoftmax int prod_idx = it->second; if (prod_idx < 0 || dropped[prod_idx]) continue; - const Ptr& pl = prog[prod_idx]; + const Ptr& pl = prog[prod_idx]; NaryEltwiseLayer* elt = dynamic_cast(pl.get()); if (!elt) continue; const auto op = elt->op; @@ -123,7 +123,7 @@ struct ModelFusionScaleSoftmax } if (modified) { - vector> newprog; + vector> newprog; newprog.reserve(nops); for (size_t i = 0; i < nops; i++) { if (!dropped[i] && prog[i]) diff --git a/modules/dnn/src/graph_fusion_shared_gemm.cpp b/modules/dnn/src/graph_fusion_shared_gemm.cpp index 62824a8dcd..bfbb52beab 100644 --- a/modules/dnn/src/graph_fusion_shared_gemm.cpp +++ b/modules/dnn/src/graph_fusion_shared_gemm.cpp @@ -35,7 +35,7 @@ using std::string; namespace { -static bool readGemmWeight(const Ptr& l, bool trans_b, Mat& W_out) +static bool readGemmWeight(const Ptr& l, bool trans_b, Mat& W_out) { if (l->blobs.empty()) return false; const Mat& W = l->blobs[0]; @@ -48,7 +48,7 @@ static bool readGemmWeight(const Ptr& l, bool trans_b, Mat& W_out) return true; } -static bool readGemmBias(const Ptr& l, Mat& b_out) +static bool readGemmBias(const Ptr& l, Mat& b_out) { if (l->blobs.size() < 2) { b_out.release(); return true; } const Mat& b = l->blobs[1]; @@ -76,10 +76,10 @@ struct ModelFusionSharedGemm bool flatten_a = true; }; - bool inspectGemm(const vector>& prog, int idx, GemmInfo& info) const + bool inspectGemm(const vector>& prog, int idx, GemmInfo& info) const { if (idx < 0 || idx >= (int)prog.size() || !prog[idx]) return false; - const Ptr& l = prog[idx]; + const Ptr& l = prog[idx]; GemmLayer* g = dynamic_cast(l.get()); if (!g) return false; @@ -125,7 +125,7 @@ struct ModelFusionSharedGemm bool fuseGraph(Ptr& graph) { - const vector>& prog = graph->prog(); + const vector>& prog = graph->prog(); size_t nops = prog.size(); struct Key { int input_idx; int trans_b; int K; }; @@ -145,7 +145,7 @@ struct ModelFusionSharedGemm bool modified = false; std::set removed_ops; - vector>>> insertions; // (insert_pos, fused-and-slice layers) + vector>>> insertions; // (insert_pos, fused-and-slice layers) for (auto& group : groups) { auto infos = group.second; @@ -226,7 +226,7 @@ struct ModelFusionSharedGemm fp.blobs.push_back(W_concat); if (all_have_bias) fp.blobs.push_back(b_concat); - Ptr fused = LayerFactory::createLayerInstance("Gemm", fp); + Ptr fused = LayerFactory::createLayerInstance("Gemm", fp); if (!fused) continue; string fused_out_name = fp.name + "_out"; @@ -235,7 +235,7 @@ struct ModelFusionSharedGemm fused->outputs = { fused_out_arg }; fused->netimpl = netimpl; - vector> slices; + vector> slices; int col_cursor = 0; for (size_t s = 0; s < infos.size(); s++) { int N_s = infos[s].N; @@ -257,7 +257,7 @@ struct ModelFusionSharedGemm Arg axes_arg = netimpl->newConstArg(sp.name + "_axes", axes); Arg steps_arg = netimpl->newConstArg(sp.name + "_steps", steps); - Ptr slice = LayerFactory::createLayerInstance("Slice2", sp); + Ptr slice = LayerFactory::createLayerInstance("Slice2", sp); if (!slice) { uniform = false; break; } slice->inputs = { fused_out_arg, starts_arg, ends_arg, axes_arg, steps_arg }; slice->outputs = prog[infos[s].layer_idx]->outputs; @@ -267,7 +267,7 @@ struct ModelFusionSharedGemm if (!uniform) continue; for (auto& info : infos) removed_ops.insert(info.layer_idx); - vector> bundle; + vector> bundle; bundle.push_back(fused); for (auto& s : slices) bundle.push_back(s); insertions.emplace_back(insert_pos, std::move(bundle)); @@ -279,7 +279,7 @@ struct ModelFusionSharedGemm std::sort(insertions.begin(), insertions.end(), [](auto& a, auto& b) { return a.first < b.first; }); - vector> newprog; + vector> newprog; size_t ins_idx = 0; for (size_t i = 0; i < nops; i++) { while (ins_idx < insertions.size() && diff --git a/modules/dnn/src/graph_fusion_transpose_matmul.cpp b/modules/dnn/src/graph_fusion_transpose_matmul.cpp index 1c6ded90f2..12ec3f207c 100644 --- a/modules/dnn/src/graph_fusion_transpose_matmul.cpp +++ b/modules/dnn/src/graph_fusion_transpose_matmul.cpp @@ -38,7 +38,7 @@ struct ModelFusionTransposeMatMul bool fuseGraph(Ptr& graph) { - const vector>& prog = graph->prog(); + const vector>& prog = graph->prog(); size_t nops = prog.size(); bool modified = false; @@ -68,7 +68,7 @@ struct ModelFusionTransposeMatMul vector dropped(nops, false); for (size_t i = 0; i < nops; i++) { - const Ptr& layer = prog[i]; + const Ptr& layer = prog[i]; if (!layer || dropped[i]) continue; MatMulLayer* mm = dynamic_cast(layer.get()); @@ -83,7 +83,7 @@ struct ModelFusionTransposeMatMul int prod_idx = it->second; if (prod_idx < 0 || dropped[prod_idx]) continue; - const Ptr& pl = prog[prod_idx]; + const Ptr& pl = prog[prod_idx]; TransposeLayer* tr = dynamic_cast(pl.get()); if (!tr || pl->outputs.size() != 1) continue; if (!isLastTwoSwap(tr->perm)) continue; @@ -103,7 +103,7 @@ struct ModelFusionTransposeMatMul } if (modified) { - vector> newprog; + vector> newprog; newprog.reserve(nops); for (size_t i = 0; i < nops; i++) { if (!dropped[i] && prog[i]) diff --git a/modules/dnn/src/layer.cpp b/modules/dnn/src/layer.cpp index 461344efbd..aa44e2fc39 100644 --- a/modules/dnn/src/layer.cpp +++ b/modules/dnn/src/layer.cpp @@ -10,11 +10,11 @@ namespace dnn { CV__DNN_INLINE_NS_BEGIN -OpData::OpData() { +LayerInfo::LayerInfo() { netimpl = nullptr; } -OpData::OpData(const LayerParams& params) +LayerInfo::LayerInfo(const LayerParams& params) : blobs(params.blobs) , name(params.name) , type(params.type) @@ -22,21 +22,21 @@ OpData::OpData(const LayerParams& params) netimpl = nullptr; } -OpData::~OpData() {} +LayerInfo::~LayerInfo() {} -void OpData::setParamsFrom(const LayerParams& params) +void LayerInfo::setParamsFrom(const LayerParams& params) { blobs = params.blobs; name = params.name; type = params.type; } -int OpData::inputNameToIndex(String) +int LayerInfo::inputNameToIndex(String) { return -1; } -int OpData::outputNameToIndex(const String&) +int LayerInfo::outputNameToIndex(const String&) { return 0; } @@ -47,7 +47,7 @@ Layer::Layer() { } Layer::Layer(const LayerParams& params) - : OpData(params) + : LayerInfo(params) { preferableTarget = DNN_TARGET_CPU; } @@ -113,13 +113,13 @@ void Layer::forwardCUDA(const std::vector >&, CV_Error(Error::StsNotImplemented, "CUDA forward of " + type + " layers is not defined."); } -void OpData::getScaleShift(Mat& scale, Mat& shift) const +void LayerInfo::getScaleShift(Mat& scale, Mat& shift) const { scale = Mat(); shift = Mat(); } -void OpData::getScaleZeropoint(float& scale, int& zeropoint) const +void LayerInfo::getScaleZeropoint(float& scale, int& zeropoint) const { scale = 1.f; zeropoint = 0; @@ -266,7 +266,7 @@ void Layer::run(const std::vector& inputs, std::vector& outputs, std:: Layer::~Layer() {} -bool OpData::getMemoryShapes(const std::vector& inputs, +bool LayerInfo::getMemoryShapes(const std::vector& inputs, const int requiredOutputs, std::vector& outputs, std::vector& internals) const @@ -276,7 +276,7 @@ bool OpData::getMemoryShapes(const std::vector& inputs, return false; } -void OpData::getTypes(const std::vector&inputs, +void LayerInfo::getTypes(const std::vector&inputs, const int requiredOutputs, const int requiredInternals, std::vector&outputs, @@ -290,7 +290,7 @@ void OpData::getTypes(const std::vector&inputs, internals.assign(requiredInternals, inputs[0]); } -int OpData::getLayouts(const std::vector& actualInputs, +int LayerInfo::getLayouts(const std::vector& actualInputs, std::vector& desiredInputs, const int requiredOutputs, std::vector& outputs) const @@ -300,43 +300,43 @@ int OpData::getLayouts(const std::vector& actualInputs, return 0; } -int64 OpData::getFLOPS(const std::vector&, +int64 LayerInfo::getFLOPS(const std::vector&, const std::vector&) const { return 0; } -bool OpData::updateMemoryShapes(const std::vector& inputs) +bool LayerInfo::updateMemoryShapes(const std::vector& inputs) { return true; } -std::vector >* OpData::subgraphs() const +std::vector >* LayerInfo::subgraphs() const { return nullptr; } -bool OpData::alwaysSupportInplace() const +bool LayerInfo::alwaysSupportInplace() const { return false; } -bool OpData::dynamicOutputShapes() const +bool LayerInfo::dynamicOutputShapes() const { return false; } -bool OpData::isDataShuffling() const +bool LayerInfo::isDataShuffling() const { return false; } -std::ostream& OpData::dumpAttrs(std::ostream& strm, int) const +std::ostream& LayerInfo::dumpAttrs(std::ostream& strm, int) const { return strm; } -std::ostream& OpData::dump(std::ostream& strm, int indent, bool comma) const +std::ostream& LayerInfo::dump(std::ostream& strm, int indent, bool comma) const { CV_Assert(netimpl); size_t ninputs = inputs.size(); diff --git a/modules/dnn/src/layer_factory.cpp b/modules/dnn/src/layer_factory.cpp index 01e46ed4f7..7b070998f6 100644 --- a/modules/dnn/src/layer_factory.cpp +++ b/modules/dnn/src/layer_factory.cpp @@ -128,7 +128,7 @@ void LayerFactory::registerOp(const String& type, OpConstructor constructor) getOpFactoryImpl()[type] = constructor; // last registration wins } -Ptr LayerFactory::createOp(const String& type, const LayerParams& params) +Ptr LayerFactory::createOp(const String& type, const LayerParams& params) { CV_TRACE_FUNCTION(); CV_TRACE_ARG_VALUE(type, "type", type.c_str()); @@ -137,7 +137,7 @@ Ptr LayerFactory::createOp(const String& type, const LayerParams& params OpFactory_Impl::const_iterator it = impl.find(type); if (it != impl.end()) return it->second(params); - return Ptr(); // NULL: no OpData constructor for this type yet + return Ptr(); // NULL: no LayerInfo constructor for this type yet } void LayerFactory::registerExec(const String& type, int backendId, ExecConstructor constructor) @@ -150,7 +150,7 @@ void LayerFactory::registerExec(const String& type, int backendId, ExecConstruct } Ptr LayerFactory::createExec(const String& type, int backendId, - const Ptr& data, void* backendCtx) + const Ptr& data, void* backendCtx) { CV_TRACE_FUNCTION(); CV_TRACE_ARG_VALUE(type, "type", type.c_str()); diff --git a/modules/dnn/src/layers/conv2_layer.cpp b/modules/dnn/src/layers/conv2_layer.cpp index 123c407741..8f2991a409 100644 --- a/modules/dnn/src/layers/conv2_layer.cpp +++ b/modules/dnn/src/layers/conv2_layer.cpp @@ -788,7 +788,7 @@ class CUDAConv2Layer : public Layer public: CUDAConv2Layer(const Ptr& conv_, void* ctx_) : conv(conv_), ctx(ctx_) {} - static Ptr create(const Ptr& data, void* backendCtx) + static Ptr create(const Ptr& data, void* backendCtx) { Ptr conv = data.dynamicCast(); if (!conv || !backendCtx || !conv->cudaSupported()) diff --git a/modules/dnn/src/net_impl.cpp b/modules/dnn/src/net_impl.cpp index fc6f9404f2..b2c07c6584 100644 --- a/modules/dnn/src/net_impl.cpp +++ b/modules/dnn/src/net_impl.cpp @@ -274,7 +274,7 @@ Ptr Net::Impl::getLayer(int layerId) const CV_Assert(0 <= layerId && layerId < totalLayers); int graph_ofs = 0; for (const Ptr& graph : allgraphs) { - const std::vector >& prog = graph->prog(); + const std::vector >& prog = graph->prog(); int nops = (int)prog.size(); CV_Assert(layerId >= graph_ofs); if (layerId < graph_ofs + nops) @@ -1679,7 +1679,7 @@ void Net::Impl::setParam(const std::string& outputTensorName, int numParam, cons } int targetIdx = (int)it->second; - const std::vector>& prog = mainGraph->prog(); + const std::vector>& prog = mainGraph->prog(); for (const auto& layer : prog) { bool produces = false; for (const Arg& out : layer->outputs) @@ -2385,8 +2385,8 @@ std::vector Net::Impl::getLayerNames() const if (mainGraph) { res.reserve(totalLayers); for (const Ptr& graph: allgraphs) { - const std::vector >& prog = graph->prog(); - for (const Ptr& layer: prog) + const std::vector >& prog = graph->prog(); + for (const Ptr& layer: prog) res.push_back(layer->name); } } else { @@ -2416,7 +2416,7 @@ std::vector Net::Impl::getUnconnectedOutLayers() const int graph_ofs = 0; for (const auto& graph : allgraphs) { - const std::vector>& prog = graph->prog(); + const std::vector>& prog = graph->prog(); for (int i = 0; i < (int)prog.size(); i++) { for (const auto& layerOut : prog[i]->outputs) { if (outArgIdxs.count(layerOut.idx)) { @@ -2501,9 +2501,9 @@ int64 Net::Impl::getFLOPSGraph(const Ptr& graph, return 0; int64 flops = 0; - const std::vector>& prog = graph->prog(); + const std::vector>& prog = graph->prog(); - for (const Ptr& layer : prog) { + for (const Ptr& layer : prog) { if (!layer) continue; @@ -2595,7 +2595,7 @@ int64 Net::Impl::getFLOPS( for (const Ptr& graph : allgraphs) { int progSize = (int)graph->prog().size(); if (localIdx < progSize) { - const Ptr& layer = graph->prog()[localIdx]; + const Ptr& layer = graph->prog()[localIdx]; if (!layer) return 0; @@ -2694,8 +2694,8 @@ void Net::Impl::collectLayerInfo(std::vector& names, std::vector names.reserve(totalLayers); types.reserve(totalLayers); for (const Ptr& graph : allgraphs) { - const std::vector>& prog = graph->prog(); - for (const Ptr& layer : prog) { + const std::vector>& prog = graph->prog(); + for (const Ptr& layer : prog) { names.push_back(layer ? layer->name : "null"); types.push_back(layer ? layer->type : "null"); } @@ -3009,8 +3009,8 @@ void Net::Impl::getLayerTypes(std::vector& layersTypes) const if (mainGraph) { std::set layersTypesSet; for (const Ptr& g: allgraphs) { - const std::vector >& prog = g->prog(); - for (const Ptr& layer: prog) { + const std::vector >& prog = g->prog(); + for (const Ptr& layer: prog) { if (!layer) continue; layersTypesSet.insert(layer->type); @@ -3042,8 +3042,8 @@ int Net::Impl::getLayersCount(const String& layerType) const if (mainGraph) { int count = 0; for (const Ptr& g: allgraphs) { - const std::vector >& prog = g->prog(); - for (const Ptr& layer: prog) { + const std::vector >& prog = g->prog(); + for (const Ptr& layer: prog) { if (!layer) continue; if (layer->type == layerType) diff --git a/modules/dnn/src/net_impl.hpp b/modules/dnn/src/net_impl.hpp index 57655ed153..2deee06458 100644 --- a/modules/dnn/src/net_impl.hpp +++ b/modules/dnn/src/net_impl.hpp @@ -434,7 +434,7 @@ struct Net::Impl : public detail::NetImplBase // if useBufferPool==true, the method uses 'buffers' // for outputs (according to bufidxs) // instead of allocating fresh outputs - void allocateLayerOutputs(const Ptr& layer, + void allocateLayerOutputs(const Ptr& layer, const std::vector& inpTypes, const std::vector& inpShapes, std::vector& outTypes, @@ -532,7 +532,7 @@ struct Net::Impl : public detail::NetImplBase }; // Net::Impl -inline Net::Impl* getNetImpl(const OpData* op) +inline Net::Impl* getNetImpl(const LayerInfo* op) { return reinterpret_cast(op->netimpl); } diff --git a/modules/dnn/src/net_impl2.cpp b/modules/dnn/src/net_impl2.cpp index 2c751058c7..b0b66017b9 100644 --- a/modules/dnn/src/net_impl2.cpp +++ b/modules/dnn/src/net_impl2.cpp @@ -316,7 +316,7 @@ public: return g; }*/ - virtual const std::vector& append(Ptr& op, + virtual const std::vector& append(Ptr& op, const std::vector& outnames) override { CV_Assert(op); @@ -335,7 +335,7 @@ public: return op->outputs; } - virtual Arg append(Ptr& op, + virtual Arg append(Ptr& op, const std::string& outname) override { std::vector outnames = {outname}; @@ -378,7 +378,7 @@ public: for (size_t i = 0; i < nlayers; i++) { prindent(strm, argindent); strm << "// op #" << i << "\n"; - const Ptr& op = prog_[i]; + const Ptr& op = prog_[i]; op->dump(strm, argindent, i+1 < nlayers); } prindent(strm, subindent); @@ -400,13 +400,13 @@ public: netimpl_->checkArgs(outputs); outputs_ = outputs; } - virtual const std::vector >& prog() const override { return prog_; } + virtual const std::vector >& prog() const override { return prog_; } virtual int opBackend(int opidx) const override { return (opidx >= 0 && opidx < (int)execBackend_.size()) ? execBackend_[opidx] : DNN_BACKEND_OPENCV; } - virtual void setProg(const std::vector >& newprog) override + virtual void setProg(const std::vector >& newprog) override { prog_ = newprog; exec_.clear(); @@ -419,7 +419,7 @@ public: std::string name_; std::vector inputs_; std::vector outputs_; - std::vector > prog_; + std::vector > prog_; std::vector > exec_; std::vector execBackend_; std::vector > inH2D_; @@ -580,13 +580,13 @@ void Net::Impl::prepareForInference() void Net::Impl::finalizeGraph(const Ptr& graph, bool useCUDA) { GraphImpl* g = static_cast(graph.get()); - const std::vector >& prog = g->prog_; + const std::vector >& prog = g->prog_; size_t i, nops = prog.size(); g->exec_.assign(nops, Ptr()); g->execBackend_.assign(nops, DNN_BACKEND_OPENCV); for (i = 0; i < nops; i++) { - const Ptr& op = prog[i]; + const Ptr& op = prog[i]; if (!op) continue; @@ -670,7 +670,7 @@ void Net::Impl::finalize() } void Net::Impl::allocateLayerOutputs( - const Ptr& layer, + const Ptr& layer, const std::vector& inpTypes, const std::vector& inpShapes, std::vector& outTypes, @@ -1324,7 +1324,7 @@ void Net::Impl::forwardGraph(Ptr& graph, InputArrayOfArrays inputs_, } std::ostream& strm_ = dump_strm ? *dump_strm : std::cout; GraphImpl* gimpl = static_cast(graph.get()); - const std::vector >& prog = graph->prog(); + const std::vector >& prog = graph->prog(); size_t i, nops = prog.size(); const std::vector& gr_inputs = graph->inputs(); const std::vector& gr_outputs = graph->outputs(); @@ -1357,7 +1357,7 @@ void Net::Impl::forwardGraph(Ptr& graph, InputArrayOfArrays inputs_, } for (size_t opidx = 0; opidx < nops; opidx++) { - const Ptr& op = prog.at(opidx); + const Ptr& op = prog.at(opidx); if (!op) // in theory we shouldn't have any 'nops' at this stage, but just in case we skip them. continue; Ptr layer = (opidx < gimpl->exec_.size()) ? gimpl->exec_[opidx] : Ptr(); @@ -1720,8 +1720,8 @@ void Net::Impl::updateUseCounts(const Ptr& graph, std::vector& useco CV_Assert(output.idx < (int)usecounts.size()); usecounts[output.idx]++; } - const std::vector >& prog = graph->prog(); - for (const Ptr& layer: prog) { + const std::vector >& prog = graph->prog(); + for (const Ptr& layer: prog) { const std::vector& inputs = layer->inputs; for (const Arg& input: inputs) { CV_Assert(input.idx < (int)usecounts.size()); @@ -1752,14 +1752,14 @@ int Net::Impl::updateGraphOfs(const Ptr& graph, int currofs, bool ismain) allgraphs.clear(); layerNameToId.clear(); } - const std::vector >& prog = graph->prog(); + const std::vector >& prog = graph->prog(); size_t i, nops = prog.size(); int subgraph_ofs = currofs + (int)nops; std::string name = graph->name(); graphofs.insert(std::make_pair(name, currofs)); allgraphs.push_back(graph); for (i = 0; i < nops; i++) { - const Ptr& layer = prog[i]; + const Ptr& layer = prog[i]; layerNameToId.insert(std::make_pair(layer->name, currofs + (int)i)); const std::vector >* subgraphs = layer->subgraphs(); if (subgraphs) { @@ -1906,12 +1906,12 @@ bool Net::Impl::tryInferGraphShapes(const Ptr& graph, if (!graph) return true; - const std::vector >& prog = graph->prog(); + const std::vector >& prog = graph->prog(); std::vector inpShapes, outShapes, tempShapes; std::vector inpTypes, outTypes, tempTypes; - for (const Ptr& layer: prog) { + for (const Ptr& layer: prog) { if (!layer) continue; diff --git a/modules/dnn/src/onnx/onnx_importer2.cpp b/modules/dnn/src/onnx/onnx_importer2.cpp index df5c671979..719e1ba55d 100644 --- a/modules/dnn/src/onnx/onnx_importer2.cpp +++ b/modules/dnn/src/onnx/onnx_importer2.cpp @@ -167,7 +167,7 @@ protected: std::string onnxBasePath; Ptr curr_graph; opencv_onnx::GraphProto* curr_graph_proto; - std::vector > curr_prog; + std::vector > curr_prog; std::vector node_inputs, node_outputs; std::string framework_name; @@ -892,7 +892,7 @@ Ptr ONNXImporter2::parseGraph(opencv_onnx::GraphProto* graph_proto, bool opencv_onnx::GraphProto* saved_graph_proto = curr_graph_proto; Ptr saved_graph = curr_graph; - std::vector > saved_prog; + std::vector > saved_prog; curr_graph_proto = graph_proto; std::vector inputs, outputs; @@ -1724,7 +1724,7 @@ void ONNXImporter2::parseLoop(LayerParams& layerParams, CV_Assert(!subgraphs[0].empty()); - Ptr& loopLayer = curr_prog.back(); + Ptr& loopLayer = curr_prog.back(); *loopLayer->subgraphs() = subgraphs; } @@ -1789,7 +1789,7 @@ void ONNXImporter2::parseIf(LayerParams& layerParams, CV_Assert_N(!thenelse[0].empty(), !thenelse[1].empty()); - Ptr& ifLayer = curr_prog.back(); + Ptr& ifLayer = curr_prog.back(); *ifLayer->subgraphs() = thenelse; } diff --git a/modules/dnn/src/op_cuda.cpp b/modules/dnn/src/op_cuda.cpp index 0f2b6263ec..12901c00b5 100644 --- a/modules/dnn/src/op_cuda.cpp +++ b/modules/dnn/src/op_cuda.cpp @@ -18,7 +18,7 @@ class CUDALegacyExec : public Layer public: CUDALegacyExec(const Ptr& impl_, void* ctx_) : impl(impl_), ctx(ctx_) {} - static Ptr create(const Ptr& data, void* backendCtx) + static Ptr create(const Ptr& data, void* backendCtx) { Ptr impl = data.dynamicCast(); if (!impl || !backendCtx || !impl->supportBackend(DNN_BACKEND_CUDA)) diff --git a/modules/dnn/src/tensorflow/tf_importer.cpp b/modules/dnn/src/tensorflow/tf_importer.cpp index 720bc855c7..b9aa890207 100644 --- a/modules/dnn/src/tensorflow/tf_importer.cpp +++ b/modules/dnn/src/tensorflow/tf_importer.cpp @@ -576,7 +576,7 @@ protected: std::map layer_id; bool newEngine; - std::vector> curProg; + std::vector> curProg; std::vector> layersOutputs; std::vector modelInputs; std::unordered_map tensorsShape; diff --git a/modules/dnn/src/tflite/tflite_importer.cpp b/modules/dnn/src/tflite/tflite_importer.cpp index 8195c5f87c..0f286e83af 100644 --- a/modules/dnn/src/tflite/tflite_importer.cpp +++ b/modules/dnn/src/tflite/tflite_importer.cpp @@ -34,7 +34,7 @@ private: const flatbuffers::Vector >* modelTensors; std::map allTensors; Net& dstNet; - std::vector> curProg; + std::vector> curProg; // This is a vector of pairs (layerId, outputId) where we iterate over // indices from TFLite notation and get created OpenCV layers. diff --git a/modules/java/generator/gen_java.py b/modules/java/generator/gen_java.py index 99aa1a868b..eca3cc37f9 100755 --- a/modules/java/generator/gen_java.py +++ b/modules/java/generator/gen_java.py @@ -297,9 +297,8 @@ class ClassInfo(GeneralInfo): base_class = re.sub(r"^cv::", "", base_class) base_class = base_class.replace('::', '.') base_info = ClassInfo(('class {}'.format(base_class), '', [], [], None, None), [self.namespace]) + # Use resolved base name; don't strip this class's own name. base_type_name = base_info.name - if not base_type_name in type_dict: - base_type_name = re.sub(r"^.*:", "", decl[1].split(",")[0]).strip().replace(self.jname, "") self.base = base_type_name self.addImports(self.base)