From 01d9ebf115a15ba2e2cc7cfe7bfe1f31e70ae426 Mon Sep 17 00:00:00 2001 From: nihuini Date: Tue, 28 Jul 2020 10:50:37 +0800 Subject: [PATCH] sometimes mxnet use either scalar or array in one attribute value, #1976 --- tools/mxnet/mxnet2ncnn.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/tools/mxnet/mxnet2ncnn.cpp b/tools/mxnet/mxnet2ncnn.cpp index ac76b64d2..1a868ea1e 100644 --- a/tools/mxnet/mxnet2ncnn.cpp +++ b/tools/mxnet/mxnet2ncnn.cpp @@ -26,6 +26,7 @@ class MXNetNode { public: bool has_attr(const char* key) const; + bool is_attr_scalar(const char* key) const; class AttrProxy { @@ -102,6 +103,18 @@ bool MXNetNode::has_attr(const char* key) const return it != attrs.end(); } +bool MXNetNode::is_attr_scalar(const char* key) const +{ + const std::map::const_iterator it = attrs.find(key); + if (it == attrs.end()) + return false; + + if (it->second.empty()) + return false; + + return it->second[0] != '('; +} + int MXNetNode::attr_i(const char* key) const { const std::map::const_iterator it = attrs.find(key); @@ -154,6 +167,12 @@ std::vector MXNetNode::attr_ai(const char* key) const // (1,2,3) std::vector list; + if (is_attr_scalar(key)) + { + list.push_back(attr_i(key)); + return list; + } + int i = 0; int c = 0; int nconsumed = 0; @@ -200,6 +219,12 @@ std::vector MXNetNode::attr_af(const char* key) const // (0.1,0.2,0.3) std::vector list; + if (is_attr_scalar(key)) + { + list.push_back(attr_f(key)); + return list; + } + float i = 0.f; int c = 0; int nconsumed = 0;