MLCE-545 INT8 TFLite model execution abnormal
* Fix for Debug mode in ExNet does not work with ConstTensorsAsInputs
* Remove unnecessary assertion with ambiguous message in LoadedNetwork
Signed-off-by: Keith Davis <keith.davis@arm.com>
Change-Id: I9cd5d1f811dbbc89072d1190c510bf1b22e3069c
diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp
index d55b99e..40fbde8 100644
--- a/src/armnn/LoadedNetwork.cpp
+++ b/src/armnn/LoadedNetwork.cpp
@@ -740,13 +740,6 @@
ARMNN_ASSERT_MSG(workloadFactory, "No workload factory");
- std::string reasonIfUnsupported;
- ARMNN_ASSERT_MSG(IWorkloadFactory::IsLayerSupported(layer,
- {},
- reasonIfUnsupported,
- m_OptimizedNetwork->pOptimizedNetworkImpl->GetModelOptions()),
- "Factory does not support layer");
- IgnoreUnused(reasonIfUnsupported);
return *workloadFactory;
}
diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp
index 3508ee8..5930805 100644
--- a/src/armnn/Network.cpp
+++ b/src/armnn/Network.cpp
@@ -1797,6 +1797,17 @@
throw InvalidArgumentException("Failed to apply the backend-specific optimizations");
}
+ // Convert constants
+ {
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_ConvertConstants");
+ Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsFloatToHalf()));
+ Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsHalfToFloat()));
+
+ // Once the constants are converted we can now safely call RedirectMembersToConstantInputs
+ Optimizer::Pass(optGraph, MakeOptimizations(RedirectMembersToConstantInputs()));
+ }
+
+ // This must occur after all topological changes to the graph and any redirection of variables
// If the debug flag is set, then insert a DebugLayer after each layer
// Doing this after applying the backend optimizations as they might have changed some layers
if (options.m_Debug)
@@ -1824,15 +1835,6 @@
optGraph.AddCompatibilityLayers(backends, tensorHandleFactoryRegistry);
}
- // Convert constants
- {
- ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "Optimizer_ConvertConstants");
- Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsFloatToHalf()));
- Optimizer::Pass(optGraph, MakeOptimizations(ConvertConstantsHalfToFloat()));
-
- // Once the constants are converted we can now safely call RedirectMembersToConstantInputs
- Optimizer::Pass(optGraph, MakeOptimizations(RedirectMembersToConstantInputs()));
- }
return optNet;
}
diff --git a/src/armnn/layers/DebugLayer.cpp b/src/armnn/layers/DebugLayer.cpp
index 57cf3b7..8342c53 100644
--- a/src/armnn/layers/DebugLayer.cpp
+++ b/src/armnn/layers/DebugLayer.cpp
@@ -8,7 +8,6 @@
#include <armnn/backends/WorkloadData.hpp>
#include <armnn/backends/WorkloadFactory.hpp>
-#include <armnn/utility/IgnoreUnused.hpp>
namespace armnn
{
@@ -54,9 +53,7 @@
void DebugLayer::ExecuteStrategy(IStrategy& strategy) const
{
- // by design debug layers are never in input graphs
- IgnoreUnused(strategy);
- throw armnn::Exception("DebugLayer should never appear in an input graph");
+ strategy.ExecuteStrategy(this, GetParameters(), {}, GetName());
}
} // namespace armnn
diff --git a/src/armnn/optimizations/RedirectMembersToConstantInputs.hpp b/src/armnn/optimizations/RedirectMembersToConstantInputs.hpp
index 4833774..a2bad71 100644
--- a/src/armnn/optimizations/RedirectMembersToConstantInputs.hpp
+++ b/src/armnn/optimizations/RedirectMembersToConstantInputs.hpp
@@ -63,6 +63,8 @@
for (unsigned int inputSlotIndex = 1; inputSlotIndex != layerPtr->GetNumInputSlots(); ++inputSlotIndex)
{
OutputSlot* outputSlot = layerPtr->GetInputSlot(inputSlotIndex).GetConnectedOutputSlot();
+ // Debug layers should not be inserted in optimize process yet
+ ARMNN_ASSERT(outputSlot->GetOwningLayer().GetType() != LayerType::Debug);
if (outputSlot->GetOwningLayer().GetType() == LayerType::Constant)
{
// Get constant layer and redirect base layer member variables.