[nnc] Fix broken ConstantOp (#2671)
authorСергей Баранников/AI Tools Lab /SRR/Engineer/삼성전자 <s.barannikov@samsung.com>
Thu, 13 Dec 2018 15:42:49 +0000 (18:42 +0300)
committerРоман Михайлович Русяев/AI Tools Lab /SRR/Staff Engineer/삼성전자 <r.rusyaev@samsung.com>
Thu, 13 Dec 2018 15:42:49 +0000 (18:42 +0300)
Revert recent changes made to ConstantOp that broke it.

Signed-off-by: Sergei Barannikov <s.barannikov@samsung.com>
contrib/nnc/include/core/modelIR/operations/ConstantOp.h
contrib/nnc/passes/caffe_frontend/caffe_op_creator.cpp
contrib/nnc/passes/interpreter/Interpreter.cpp
contrib/nnc/passes/onnx_frontend/ONNXImporterImpl.cpp
contrib/nnc/passes/soft_backend/SBSerializer.cpp

index 46d4125..075ccad 100644 (file)
@@ -25,15 +25,14 @@ namespace ops {
 
 class ConstantOp : public Operation {
 public:
-  ConstantOp(const std::shared_ptr<mir::TensorVariant>& value)
-      : Operation(Type::constant, {}), _value(value) {
-    setOutputShape(0, _value->getShape());
+  ConstantOp(const TensorVariant& value) : Operation(Type::constant, {}), _value(value) {
+    setOutputShape(0, _value.getShape());
   }
 
-  const std::shared_ptr<mir::TensorVariant>& getValue() const { return _value; }
+  const TensorVariant& getValue() const { return _value; }
 
 private:
-  const std::shared_ptr<mir::TensorVariant>& _value;
+  TensorVariant _value;
 };
 
 } // namespace ops
index e149d53..6657ec9 100644 (file)
@@ -547,7 +547,7 @@ std::vector<mir::IODescriptor>
 CaffeOpCreator::convertEmbed(const caffe::LayerParameter& layer,
                              const std::vector<mir::IODescriptor>& inputs) {
   const auto& params = layer.embed_param();
-  auto data = createOp<ops::ConstantOp>(layer.name() + ".weights", convertBlob(layer.blobs(0)));
+  auto data = createOp<ops::ConstantOp>(layer.name() + ".weights", *convertBlob(layer.blobs(0)));
   // FIXME Indices in Caffe have floating type, while in ModelIR they are integral.
   auto result = createOp<ops::GatherOp>(layer.name(), data->getOutput(0), inputs[0], 0);
 
index a8cf131..341f0a7 100644 (file)
@@ -82,7 +82,7 @@ void NNInterpreter::visit(ops::VariableOp& op) {
 }
 
 void NNInterpreter::visit(ops::ConstantOp& op) {
-  var(op.getId()) = {*op.getValue()};
+  var(op.getId()) = {op.getValue()};
 }
 
 std::vector<TensorVariant> &NNInterpreter::getResult(Operation* op) {
index 98f68b8..6c1ffea 100644 (file)
@@ -150,7 +150,7 @@ void ONNXImporterImpl::createGraphInputs() {
       mir::Shape input_shape = ShapeHelper::createShape(onnx_tensor->dims(),
                                                    static_cast<size_t>(onnx_tensor->dims_size()));
       _inputTensors[name] = createTensor(onnx_tensor, input_shape);
-      auto constant = _graph->create<mir::ops::ConstantOp>(name, _inputTensors[name]);
+      auto constant = _graph->create<mir::ops::ConstantOp>(name, *_inputTensors[name]);
       _tensorNameToPrevMirOp[name] = constant;
       constants.insert(constant);
     } else {
index 29bbe5a..e287105 100644 (file)
@@ -250,7 +250,7 @@ void Serializer::visit(ops::VariableOp& op) {
 
 void Serializer::visit(ops::ConstantOp& op) {
   _curOp->_paramStartOffset = _buffer.size();
-  serializeTensor(*op.getValue());
+  serializeTensor(op.getValue());
 }
 
 void Serializer::visit(ops::ReluOp& op) {