IVGCVSW-2993: Investigate TfLite Parser test output shape validation
authorNarumol Prangnawarat <narumol.prangnawarat@arm.com>
Mon, 29 Apr 2019 15:40:55 +0000 (16:40 +0100)
committerNarumol Prangnawarat <narumol.prangnawarat@arm.com>
Tue, 30 Apr 2019 09:50:57 +0000 (09:50 +0000)
 * Get outputTensorInfo from runtime outputs to ensure that
the results are from the running network

Signed-off-by: Narumol Prangnawarat <narumol.prangnawarat@arm.com>
Change-Id: Ib35afeaf5f6121df7f6379cfc557ae77e5214d69

src/armnnTfLiteParser/test/ParserFlatbuffersFixture.hpp

index 9b443c3..69c5ec1 100644 (file)
@@ -271,30 +271,25 @@ void ParserFlatbuffersFixture::RunTest(size_t subgraphId,
     armnn::OutputTensors outputTensors;
     for (auto&& it : expectedOutputData)
     {
-        BindingPointInfo bindingInfo = m_Parser->GetNetworkOutputBindingInfo(subgraphId, it.first);
-        armnn::VerifyTensorInfoDataType(bindingInfo.second, armnnType2);
-        outputStorage.emplace(it.first, MakeTensor<DataType2, NumOutputDimensions>(bindingInfo.second));
-        outputTensors.push_back(
-                { bindingInfo.first, armnn::Tensor(bindingInfo.second, outputStorage.at(it.first).data()) });
-    }
-
-    m_Runtime->EnqueueWorkload(m_NetworkIdentifier, inputTensors, outputTensors);
-
-    // Check that output tensors have correct number of dimensions (NumOutputDimensions specified in test)
-    // after running the workload
-    for (auto&& it : expectedOutputData)
-    {
         armnn::LayerBindingId outputBindingId = m_Parser->GetNetworkOutputBindingInfo(subgraphId, it.first).first;
-        auto outputNumDimensions = m_Runtime->GetOutputTensorInfo(
-            m_NetworkIdentifier, outputBindingId).GetNumDimensions();
+        armnn::TensorInfo outputTensorInfo = m_Runtime->GetOutputTensorInfo(m_NetworkIdentifier, outputBindingId);
 
+        // Check that output tensors have correct number of dimensions (NumOutputDimensions specified in test)
+        auto outputNumDimensions = outputTensorInfo.GetNumDimensions();
         BOOST_CHECK_MESSAGE((outputNumDimensions == NumOutputDimensions),
             boost::str(boost::format("Number of dimensions expected %1%, but got %2% for output layer %3%")
-                                     % NumOutputDimensions
-                                     % outputNumDimensions
-                                     % it.first));
+                                       % NumOutputDimensions
+                                       % outputNumDimensions
+                                       % it.first));
+
+        armnn::VerifyTensorInfoDataType(outputTensorInfo, armnnType2);
+        outputStorage.emplace(it.first, MakeTensor<DataType2, NumOutputDimensions>(outputTensorInfo));
+        outputTensors.push_back(
+                { outputBindingId, armnn::Tensor(outputTensorInfo, outputStorage.at(it.first).data()) });
     }
 
+    m_Runtime->EnqueueWorkload(m_NetworkIdentifier, inputTensors, outputTensors);
+
     // Compare each output tensor to the expected values
     for (auto&& it : expectedOutputData)
     {