From 8c1701a2d9c1da0e1decb2afdc2093aa88810242 Mon Sep 17 00:00:00 2001 From: Mike Kelly Date: Mon, 11 Feb 2019 17:01:27 +0000 Subject: IVGCVSW-2531 Serialize a simple ArmNN Network Change-Id: I68cf5072aca6e3a8b3b8c57e19b6d417cd5813fc Signed-off-by: Mike Kelly --- src/armnn/Layer.cpp | 6 +- src/armnn/Layer.hpp | 4 +- src/armnn/LayerVisitorBase.hpp | 175 -------------------------------- src/armnn/Network.cpp | 8 ++ src/armnn/Network.hpp | 2 + src/armnn/OverrideInputRangeVisitor.hpp | 2 +- src/armnn/QuantizerVisitor.hpp | 2 +- src/armnn/StaticRangeVisitor.hpp | 2 +- src/armnn/test/QuantizerTest.cpp | 2 +- 9 files changed, 22 insertions(+), 181 deletions(-) delete mode 100644 src/armnn/LayerVisitorBase.hpp (limited to 'src/armnn') diff --git a/src/armnn/Layer.cpp b/src/armnn/Layer.cpp index c49dd61786..0a6328ba3d 100644 --- a/src/armnn/Layer.cpp +++ b/src/armnn/Layer.cpp @@ -143,6 +143,11 @@ void OutputSlot::ValidateConnectionIndex(unsigned int index) const } } +LayerGuid OutputSlot::GetOwningLayerGuid() const +{ + return GetOwningLayer().GetGuid(); +} + namespace { LayerGuid GenerateLayerGuid() { @@ -335,5 +340,4 @@ std::vector Layer::InferOutputShapes(const std::vector } return inputShapes; } - } // namespace armnn diff --git a/src/armnn/Layer.hpp b/src/armnn/Layer.hpp index c08c6b0631..507b37bf95 100644 --- a/src/armnn/Layer.hpp +++ b/src/armnn/Layer.hpp @@ -105,6 +105,8 @@ public: Layer& GetOwningLayer() const { return m_OwningLayer; } + LayerGuid GetOwningLayerGuid() const override; + const OutputHandler& GetOutputHandler() const { return m_OutputHandler; } OutputHandler& GetOutputHandler() { return m_OutputHandler; } @@ -141,7 +143,7 @@ public: return Disconnect(*boost::polymorphic_downcast(&slot)); } - unsigned int CalculateIndexOnOwner() const; + unsigned int CalculateIndexOnOwner() const override; bool operator==(const OutputSlot& other) const; diff --git a/src/armnn/LayerVisitorBase.hpp b/src/armnn/LayerVisitorBase.hpp deleted file mode 100644 index 2c37a21786..0000000000 --- a/src/armnn/LayerVisitorBase.hpp +++ /dev/null @@ -1,175 +0,0 @@ -// -// Copyright © 2017 Arm Ltd. All rights reserved. -// SPDX-License-Identifier: MIT -// - -#pragma once - -#include - -namespace armnn -{ - -struct VisitorThrowingPolicy -{ - static void Apply() { throw UnimplementedException(); } -}; - -struct VisitorNoThrowPolicy -{ - static void Apply() {} -}; - -// Visitor base class with empty implementations. -template -class LayerVisitorBase : public ILayerVisitor -{ -protected: - LayerVisitorBase() {} - virtual ~LayerVisitorBase() {} - -public: - void VisitInputLayer(const IConnectableLayer*, - LayerBindingId, - const char*) override { DefaultPolicy::Apply(); } - - void VisitConvolution2dLayer(const IConnectableLayer*, - const Convolution2dDescriptor&, - const ConstTensor&, - const Optional&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitDepthwiseConvolution2dLayer(const IConnectableLayer*, - const DepthwiseConvolution2dDescriptor&, - const ConstTensor&, - const Optional&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitDetectionPostProcessLayer(const IConnectableLayer*, - const DetectionPostProcessDescriptor&, - const ConstTensor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitFullyConnectedLayer(const IConnectableLayer*, - const FullyConnectedDescriptor&, - const ConstTensor&, - const Optional&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitPermuteLayer(const IConnectableLayer*, - const PermuteDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitBatchToSpaceNdLayer(const IConnectableLayer*, - const BatchToSpaceNdDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitPooling2dLayer(const IConnectableLayer*, - const Pooling2dDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitActivationLayer(const IConnectableLayer*, - const ActivationDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitNormalizationLayer(const IConnectableLayer*, - const NormalizationDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitSoftmaxLayer(const IConnectableLayer*, - const SoftmaxDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitSplitterLayer(const IConnectableLayer*, - const ViewsDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitMergerLayer(const IConnectableLayer*, - const OriginsDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitAdditionLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } - - void VisitMultiplicationLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } - - void VisitBatchNormalizationLayer(const IConnectableLayer*, - const BatchNormalizationDescriptor&, - const ConstTensor&, - const ConstTensor&, - const ConstTensor&, - const ConstTensor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitResizeBilinearLayer(const IConnectableLayer*, - const ResizeBilinearDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitL2NormalizationLayer(const IConnectableLayer*, - const L2NormalizationDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitConstantLayer(const IConnectableLayer*, - const ConstTensor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitReshapeLayer(const IConnectableLayer*, - const ReshapeDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitSpaceToBatchNdLayer(const IConnectableLayer*, - const SpaceToBatchNdDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitFloorLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } - - void VisitOutputLayer(const IConnectableLayer*, - LayerBindingId id, - const char*) override { DefaultPolicy::Apply(); } - - void VisitLstmLayer(const IConnectableLayer*, - const LstmDescriptor&, - const LstmInputParams&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitDivisionLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } - - void VisitSubtractionLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } - - void VisitMaximumLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } - - void VisitMeanLayer(const IConnectableLayer*, - const MeanDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitPadLayer(const IConnectableLayer*, - const PadDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitStridedSliceLayer(const IConnectableLayer*, - const StridedSliceDescriptor&, - const char*) override { DefaultPolicy::Apply(); } - - void VisitMinimumLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } - - void VisitGreaterLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } - - void VisitEqualLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } - - void VisitRsqrtLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } - - void VisitGatherLayer(const IConnectableLayer*, - const char*) override { DefaultPolicy::Apply(); } -}; - -} //namespace armnn - diff --git a/src/armnn/Network.cpp b/src/armnn/Network.cpp index 5c70003785..cad1690cbd 100644 --- a/src/armnn/Network.cpp +++ b/src/armnn/Network.cpp @@ -917,6 +917,14 @@ IConnectableLayer* Network::AddGatherLayer(const char* name) return m_Graph->AddLayer(name); } +void Network::Accept(ILayerVisitor& visitor) const +{ + for (auto layer : GetGraph()) + { + layer->Accept(visitor); + }; +} + OptimizedNetwork::OptimizedNetwork(std::unique_ptr graph) : m_Graph(std::move(graph)) { diff --git a/src/armnn/Network.hpp b/src/armnn/Network.hpp index 66fb240979..3754c2e6d1 100644 --- a/src/armnn/Network.hpp +++ b/src/armnn/Network.hpp @@ -148,6 +148,8 @@ public: IConnectableLayer* AddRsqrtLayer(const char* name = nullptr) override; + void Accept(ILayerVisitor& visitor) const override; + private: IConnectableLayer* AddFullyConnectedLayerImpl(const FullyConnectedDescriptor& fullyConnectedDescriptor, const ConstTensor& weights, diff --git a/src/armnn/OverrideInputRangeVisitor.hpp b/src/armnn/OverrideInputRangeVisitor.hpp index 0b1999f1f8..72396b4652 100644 --- a/src/armnn/OverrideInputRangeVisitor.hpp +++ b/src/armnn/OverrideInputRangeVisitor.hpp @@ -6,7 +6,7 @@ #pragma once #include "NetworkQuantizer.hpp" -#include "LayerVisitorBase.hpp" +#include "armnn/LayerVisitorBase.hpp" #include diff --git a/src/armnn/QuantizerVisitor.hpp b/src/armnn/QuantizerVisitor.hpp index 44ebc052b6..cf151baf3c 100644 --- a/src/armnn/QuantizerVisitor.hpp +++ b/src/armnn/QuantizerVisitor.hpp @@ -5,7 +5,7 @@ #pragma once -#include "LayerVisitorBase.hpp" +#include "armnn/LayerVisitorBase.hpp" #include "StaticRangeVisitor.hpp" #include diff --git a/src/armnn/StaticRangeVisitor.hpp b/src/armnn/StaticRangeVisitor.hpp index 9c3a4f32c1..d834d0449d 100644 --- a/src/armnn/StaticRangeVisitor.hpp +++ b/src/armnn/StaticRangeVisitor.hpp @@ -5,7 +5,7 @@ #pragma once -#include "LayerVisitorBase.hpp" +#include "armnn/LayerVisitorBase.hpp" #include #include diff --git a/src/armnn/test/QuantizerTest.cpp b/src/armnn/test/QuantizerTest.cpp index c83d179961..24c130c372 100644 --- a/src/armnn/test/QuantizerTest.cpp +++ b/src/armnn/test/QuantizerTest.cpp @@ -8,7 +8,7 @@ #include #include -#include "../LayerVisitorBase.hpp" +#include "armnn/LayerVisitorBase.hpp" #include "../Network.hpp" #include "../Graph.hpp" #include "../NetworkQuantizerUtils.hpp" -- cgit v1.2.1