[mir_tflite] Inherit tensor names (#6854)
authorСергей Баранников/AI Tools Lab /SRR/Engineer/삼성전자 <s.barannikov@samsung.com>
Thu, 22 Aug 2019 12:44:38 +0000 (21:44 +0900)
committerAlexander Efimov/AI Tools Lab/./Samsung Electronics <a.efimov@samsung.com>
Thu, 22 Aug 2019 12:44:38 +0000 (15:44 +0300)
Set `Operation::Output`s names based on model tensor names.

Signed-off-by: Sergei Barannikov <s.barannikov@samsung.com>
compiler/mir-tflite-importer/tflite_importer.cpp
compiler/mir-tflite-importer/tflite_importer.h

index 284db5a..66a80da 100644 (file)
@@ -158,7 +158,7 @@ void TfliteImporter::walkSubGraph(const SubGraph *s)
 
   for (auto i : *s->inputs())
   {
-    const Tensor *t = (*s->tensors())[i];
+    const Tensor *t = (*_tensors)[i];
 
     mir::Shape input_shape(t->shape()->size());
     for (int dim = 0; dim < t->shape()->size(); ++dim)
@@ -166,8 +166,11 @@ void TfliteImporter::walkSubGraph(const SubGraph *s)
       input_shape.dim(dim) = t->shape()->Get(dim);
     }
 
-    auto input = _graph->create<mir::ops::InputOp>(t->name()->c_str(), input_shape);
-    _tensorMap[i] = input->getOutput(0);
+    auto input = _graph->create<mir::ops::InputOp>(t->name()->c_str(), input_shape)->getOutput(0);
+
+    input->setName(t->name()->c_str());
+    assert(_tensorMap.find(i) == _tensorMap.cend());
+    _tensorMap[i] = input;
   }
 
   for (auto op : *(s->operators()))
@@ -282,7 +285,11 @@ void TfliteImporter::walkOperator(const Operator *op)
   assert(outputs.size() == op->outputs()->size());
   for (size_t i = 0; i < op->outputs()->size(); ++i)
   {
-    int32_t tensor_index = (*op->outputs())[i];
+    const int32_t tensor_index = (*op->outputs())[i];
+    const Tensor *tensor = (*_tensors)[tensor_index];
+
+    outputs[i]->setName(tensor->name()->c_str());
+    assert(_tensorMap.find(tensor_index) == _tensorMap.cend());
     _tensorMap[tensor_index] = outputs[i];
   }
 }
index 2df5e5f..e235096 100644 (file)
@@ -57,6 +57,7 @@ private:
   std::vector<int32_t> _graphOutputs;
 
   // Maps TFLite tensors indices to corresponding MIR operation outputs.
+  // FIXME Can the same id represent different tensors in different subgraphs?
   std::map<int, mir::Operation::Output *> _tensorMap;
 
   void import();