diff options
Diffstat (limited to 'src/armnn')
82 files changed, 321 insertions, 0 deletions
diff --git a/src/armnn/layers/ActivationLayer.cpp b/src/armnn/layers/ActivationLayer.cpp index 401ab299c3..6f80cce968 100644 --- a/src/armnn/layers/ActivationLayer.cpp +++ b/src/armnn/layers/ActivationLayer.cpp @@ -42,4 +42,9 @@ void ActivationLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void ActivationLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitActivationLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/ActivationLayer.hpp b/src/armnn/layers/ActivationLayer.hpp index 390955a35d..aac05f3e32 100644 --- a/src/armnn/layers/ActivationLayer.hpp +++ b/src/armnn/layers/ActivationLayer.hpp @@ -26,6 +26,9 @@ public: /// Check if the input tensor shape(s) will lead to a valid configuration of @ref ActivationLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + + protected: /// Constructor to create an ActivationLayer. /// @param [in] param ActivationDescriptor to configure the activation operation. diff --git a/src/armnn/layers/AdditionLayer.cpp b/src/armnn/layers/AdditionLayer.cpp index 27622664d5..02ee306033 100644 --- a/src/armnn/layers/AdditionLayer.cpp +++ b/src/armnn/layers/AdditionLayer.cpp @@ -31,4 +31,9 @@ AdditionLayer* AdditionLayer::Clone(Graph& graph) const return CloneBase<AdditionLayer>(graph, GetName()); } +void AdditionLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitAdditionLayer(this, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/AdditionLayer.hpp b/src/armnn/layers/AdditionLayer.hpp index 4a6b8d9f1a..1c2acabbb2 100644 --- a/src/armnn/layers/AdditionLayer.hpp +++ b/src/armnn/layers/AdditionLayer.hpp @@ -23,6 +23,8 @@ public: /// Creates a dynamically-allocated copy of this layer. /// @param [in] graph The graph into which this layer is being cloned. AdditionLayer* Clone(Graph& graph) const override; + + void Accept(ILayerVisitor& visitor) const override; protected: /// Constructor to create an AdditionLayer. diff --git a/src/armnn/layers/BatchNormalizationLayer.cpp b/src/armnn/layers/BatchNormalizationLayer.cpp index f461c8061b..dfba2d7942 100644 --- a/src/armnn/layers/BatchNormalizationLayer.cpp +++ b/src/armnn/layers/BatchNormalizationLayer.cpp @@ -69,4 +69,10 @@ Layer::ConstantTensors BatchNormalizationLayer::GetConstantTensorsByRef() return {m_Mean, m_Variance, m_Beta, m_Gamma}; } +void BatchNormalizationLayer::Accept(ILayerVisitor& visitor) const +{ + ConstTensor dummy; + visitor.VisitBatchNormalizationLayer(this, GetParameters(), dummy, dummy, dummy, dummy); +} + } // namespace armnn diff --git a/src/armnn/layers/BatchNormalizationLayer.hpp b/src/armnn/layers/BatchNormalizationLayer.hpp index 02d8456a67..55390b7da5 100644 --- a/src/armnn/layers/BatchNormalizationLayer.hpp +++ b/src/armnn/layers/BatchNormalizationLayer.hpp @@ -39,6 +39,8 @@ public: /// will lead to a valid configuration of @ref BatchNormalizationLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a BatchNormalizationLayer. /// @param [in] param BatchNormalizationDescriptor to configure the batch normalization operation. diff --git a/src/armnn/layers/BatchToSpaceNdLayer.cpp b/src/armnn/layers/BatchToSpaceNdLayer.cpp index 8ac4cb95bb..9accf28137 100644 --- a/src/armnn/layers/BatchToSpaceNdLayer.cpp +++ b/src/armnn/layers/BatchToSpaceNdLayer.cpp @@ -118,4 +118,10 @@ std::vector<TensorShape> BatchToSpaceNdLayer::InferOutputShapes(const std::vecto return std::vector<TensorShape>({ TensorShape({ outputBatchSize, channelSize, outputHeight, outputWidth }) }); } } + +void BatchToSpaceNdLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitBatchToSpaceNdLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/BatchToSpaceNdLayer.hpp b/src/armnn/layers/BatchToSpaceNdLayer.hpp index fc4dd71955..21ed616a9e 100644 --- a/src/armnn/layers/BatchToSpaceNdLayer.hpp +++ b/src/armnn/layers/BatchToSpaceNdLayer.hpp @@ -34,6 +34,8 @@ public: /// @return A vector to the inferred output shape. std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a BatchToSpaceNdLayer. /// @param [in] param BatchToSpaceNdDescriptor to configure the BatchToSpaceNd operation. diff --git a/src/armnn/layers/ConstantLayer.cpp b/src/armnn/layers/ConstantLayer.cpp index d8f265babb..8b94fdb6e8 100644 --- a/src/armnn/layers/ConstantLayer.cpp +++ b/src/armnn/layers/ConstantLayer.cpp @@ -51,4 +51,10 @@ void ConstantLayer::ValidateTensorShapesFromInputs() outShape); } +void ConstantLayer::Accept(ILayerVisitor& visitor) const +{ + ConstTensor dummy; + visitor.VisitConstantLayer(this, dummy, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/ConstantLayer.hpp b/src/armnn/layers/ConstantLayer.hpp index c3316b78b1..d045952e7e 100644 --- a/src/armnn/layers/ConstantLayer.hpp +++ b/src/armnn/layers/ConstantLayer.hpp @@ -39,6 +39,8 @@ public: /// Free up the constant source data stored by the layer. void ReleaseConstantData() override {}; + void Accept(ILayerVisitor& visitor) const override; + std::unique_ptr<ScopedCpuTensorHandle> m_LayerOutput; protected: /// Constructor to create a ConstantLayer. diff --git a/src/armnn/layers/ConvertFp16ToFp32Layer.cpp b/src/armnn/layers/ConvertFp16ToFp32Layer.cpp index 10c4ba4b4f..d3c2462bf1 100644 --- a/src/armnn/layers/ConvertFp16ToFp32Layer.cpp +++ b/src/armnn/layers/ConvertFp16ToFp32Layer.cpp @@ -45,4 +45,11 @@ void ConvertFp16ToFp32Layer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void ConvertFp16ToFp32Layer::Accept(ILayerVisitor& visitor) const +{ + // these conversion layers are only inserted by the + // optimizer and so will never be in an input graph. + throw armnn::Exception("ConvertFp16ToFp32Layer should never appear in an input graph"); +} + } // namespace armnn diff --git a/src/armnn/layers/ConvertFp16ToFp32Layer.hpp b/src/armnn/layers/ConvertFp16ToFp32Layer.hpp index bdfc9814fd..89046fc85e 100644 --- a/src/armnn/layers/ConvertFp16ToFp32Layer.hpp +++ b/src/armnn/layers/ConvertFp16ToFp32Layer.hpp @@ -29,6 +29,8 @@ public: /// will lead to a valid configuration of @ref ConvertFp16ToFp32Layer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a ConvertFp16ToFp32Layer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/ConvertFp32ToFp16Layer.cpp b/src/armnn/layers/ConvertFp32ToFp16Layer.cpp index 2bcc4e1917..068594bf99 100644 --- a/src/armnn/layers/ConvertFp32ToFp16Layer.cpp +++ b/src/armnn/layers/ConvertFp32ToFp16Layer.cpp @@ -44,4 +44,11 @@ void ConvertFp32ToFp16Layer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void ConvertFp32ToFp16Layer::Accept(ILayerVisitor& visitor) const +{ + // These conversion layers are only inserted by the + // optimizer and so will never be in an input graph. + throw armnn::Exception("ConvertFp32ToFp16Layer should never appear in an input graph"); +} + } // namespace armnn diff --git a/src/armnn/layers/ConvertFp32ToFp16Layer.hpp b/src/armnn/layers/ConvertFp32ToFp16Layer.hpp index 524f974d77..9f8b09bd5a 100644 --- a/src/armnn/layers/ConvertFp32ToFp16Layer.hpp +++ b/src/armnn/layers/ConvertFp32ToFp16Layer.hpp @@ -28,6 +28,8 @@ public: /// will lead to a valid configuration of @ref ConvertFp32ToFp16Layer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a ConvertFp32ToFp16Layer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/Convolution2dLayer.cpp b/src/armnn/layers/Convolution2dLayer.cpp index 4756e1daae..86eb71d61a 100644 --- a/src/armnn/layers/Convolution2dLayer.cpp +++ b/src/armnn/layers/Convolution2dLayer.cpp @@ -110,4 +110,17 @@ Layer::ConstantTensors Convolution2dLayer::GetConstantTensorsByRef() return {m_Weight, m_Bias}; } +void Convolution2dLayer::Accept(ILayerVisitor& visitor) const +{ + ConstTensor dummy; + if (GetParameters().m_BiasEnabled) + { + visitor.VisitConvolution2dLayer(this, GetParameters(), dummy, dummy, GetName()); + } + else + { + visitor.VisitConvolution2dLayer(this, GetParameters(), dummy, GetName()); + } +} + } // namespace armnn diff --git a/src/armnn/layers/Convolution2dLayer.hpp b/src/armnn/layers/Convolution2dLayer.hpp index b812b1bece..05a26da82a 100644 --- a/src/armnn/layers/Convolution2dLayer.hpp +++ b/src/armnn/layers/Convolution2dLayer.hpp @@ -41,6 +41,8 @@ public: /// @return A vector to the inferred output shape. std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a Convolution2dLayer. /// @param [in] param Convolution2dDescriptor to configure the convolution2d operation. diff --git a/src/armnn/layers/DebugLayer.cpp b/src/armnn/layers/DebugLayer.cpp index e83b17ee64..6fccca677f 100644 --- a/src/armnn/layers/DebugLayer.cpp +++ b/src/armnn/layers/DebugLayer.cpp @@ -46,4 +46,10 @@ void DebugLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void DebugLayer::Accept(ILayerVisitor& visitor) const +{ + // by design debug layers are never in input graphs + throw armnn::Exception("DebugLayer should never appear in an input graph"); +} + } // namespace armnn diff --git a/src/armnn/layers/DebugLayer.hpp b/src/armnn/layers/DebugLayer.hpp index fc777a8bad..bc64541cbe 100644 --- a/src/armnn/layers/DebugLayer.hpp +++ b/src/armnn/layers/DebugLayer.hpp @@ -28,6 +28,8 @@ public: /// will lead to a valid configuration of @ref DebugLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a DebugLayer. /// @param [in] param DebugDescriptor to configure the debug layer. diff --git a/src/armnn/layers/DepthwiseConvolution2dLayer.cpp b/src/armnn/layers/DepthwiseConvolution2dLayer.cpp index c4edc2022f..b2d981445d 100644 --- a/src/armnn/layers/DepthwiseConvolution2dLayer.cpp +++ b/src/armnn/layers/DepthwiseConvolution2dLayer.cpp @@ -120,4 +120,17 @@ Layer::ConstantTensors DepthwiseConvolution2dLayer::GetConstantTensorsByRef() return {m_Weight, m_Bias}; } +void DepthwiseConvolution2dLayer::Accept(ILayerVisitor& visitor) const +{ + ConstTensor dummy; + if (GetParameters().m_BiasEnabled) + { + visitor.VisitDepthwiseConvolution2dLayer(this, GetParameters(), dummy, dummy, GetName()); + } + else + { + visitor.VisitDepthwiseConvolution2dLayer(this, GetParameters(), dummy, GetName()); + } +} + } // namespace armnn diff --git a/src/armnn/layers/DepthwiseConvolution2dLayer.hpp b/src/armnn/layers/DepthwiseConvolution2dLayer.hpp index 9d5b658ec7..065ba6cec2 100644 --- a/src/armnn/layers/DepthwiseConvolution2dLayer.hpp +++ b/src/armnn/layers/DepthwiseConvolution2dLayer.hpp @@ -41,6 +41,8 @@ public: /// @return A vector to the inferred output shape. std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a DepthwiseConvolution2dLayer. /// @param [in] param DepthwiseConvolution2dDescriptor to configure the depthwise convolution2d. diff --git a/src/armnn/layers/DetectionPostProcessLayer.cpp b/src/armnn/layers/DetectionPostProcessLayer.cpp index 99aaac7b9f..78589229e6 100644 --- a/src/armnn/layers/DetectionPostProcessLayer.cpp +++ b/src/armnn/layers/DetectionPostProcessLayer.cpp @@ -36,4 +36,9 @@ void DetectionPostProcessLayer::ValidateTensorShapesFromInputs() VerifyLayerConnections(2, CHECK_LOCATION()); } +void DetectionPostProcessLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitDetectionPostProcessLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/DetectionPostProcessLayer.hpp b/src/armnn/layers/DetectionPostProcessLayer.hpp index b5a1cf17fb..629e3864b3 100644 --- a/src/armnn/layers/DetectionPostProcessLayer.hpp +++ b/src/armnn/layers/DetectionPostProcessLayer.hpp @@ -29,6 +29,8 @@ public: /// will lead to a valid configuration of @ref DetectionPostProcessLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a DetectionPostProcessLayer. /// @param [in] param DetectionPostProcessDescriptor to configure the detection postprocess. diff --git a/src/armnn/layers/DivisionLayer.cpp b/src/armnn/layers/DivisionLayer.cpp index 03164993bc..aa54ef664f 100644 --- a/src/armnn/layers/DivisionLayer.cpp +++ b/src/armnn/layers/DivisionLayer.cpp @@ -31,4 +31,9 @@ DivisionLayer* DivisionLayer::Clone(Graph& graph) const return CloneBase<DivisionLayer>(graph, GetName()); } +void DivisionLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitDivisionLayer(this, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/DivisionLayer.hpp b/src/armnn/layers/DivisionLayer.hpp index e1dca2f9af..fdeadba78e 100644 --- a/src/armnn/layers/DivisionLayer.hpp +++ b/src/armnn/layers/DivisionLayer.hpp @@ -25,6 +25,8 @@ public: /// @param [in] graph The graph into which this layer is being cloned. DivisionLayer* Clone(Graph& graph) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a DivisionLayer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/EqualLayer.cpp b/src/armnn/layers/EqualLayer.cpp index e0d2e65309..7d16668b06 100644 --- a/src/armnn/layers/EqualLayer.cpp +++ b/src/armnn/layers/EqualLayer.cpp @@ -31,4 +31,9 @@ EqualLayer* EqualLayer::Clone(Graph& graph) const return CloneBase<EqualLayer>(graph, GetName()); } +void EqualLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitEqualLayer(this, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/EqualLayer.hpp b/src/armnn/layers/EqualLayer.hpp index 198bae7f43..b6a01eff2d 100644 --- a/src/armnn/layers/EqualLayer.hpp +++ b/src/armnn/layers/EqualLayer.hpp @@ -24,6 +24,8 @@ public: /// @param [in] graph The graph into which this layer is being cloned. EqualLayer* Clone(Graph& graph) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a EqualLayer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/FakeQuantizationLayer.cpp b/src/armnn/layers/FakeQuantizationLayer.cpp index 15f862ecac..d61a80f748 100644 --- a/src/armnn/layers/FakeQuantizationLayer.cpp +++ b/src/armnn/layers/FakeQuantizationLayer.cpp @@ -44,4 +44,9 @@ void FakeQuantizationLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void FakeQuantizationLayer::Accept(ILayerVisitor& visitor) const +{ + throw armnn::Exception("FakeQuantizationLayer should not appear in an input graph"); +} + } // namespace armnn diff --git a/src/armnn/layers/FakeQuantizationLayer.hpp b/src/armnn/layers/FakeQuantizationLayer.hpp index 5e7b5cbe7b..81e5444d88 100644 --- a/src/armnn/layers/FakeQuantizationLayer.hpp +++ b/src/armnn/layers/FakeQuantizationLayer.hpp @@ -28,6 +28,8 @@ public: /// will lead to a valid configuration of @ref FakeQuantizationLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a FakeQuantizationLayer. /// @param [in] param FakeQuantizationDescriptor to configure the fake quantization operation. diff --git a/src/armnn/layers/FloorLayer.cpp b/src/armnn/layers/FloorLayer.cpp index ddf1294139..34ad7f628e 100644 --- a/src/armnn/layers/FloorLayer.cpp +++ b/src/armnn/layers/FloorLayer.cpp @@ -44,4 +44,9 @@ void FloorLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void FloorLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitFloorLayer(this, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/FloorLayer.hpp b/src/armnn/layers/FloorLayer.hpp index 546d1362f9..9bc6de7bf3 100644 --- a/src/armnn/layers/FloorLayer.hpp +++ b/src/armnn/layers/FloorLayer.hpp @@ -28,6 +28,8 @@ public: /// will lead to a valid configuration of @ref FloorLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a FloorLayer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/FullyConnectedLayer.cpp b/src/armnn/layers/FullyConnectedLayer.cpp index e003c7350a..977c2769df 100644 --- a/src/armnn/layers/FullyConnectedLayer.cpp +++ b/src/armnn/layers/FullyConnectedLayer.cpp @@ -86,4 +86,17 @@ Layer::ConstantTensors FullyConnectedLayer::GetConstantTensorsByRef() return {m_Weight, m_Bias}; } +void FullyConnectedLayer::Accept(ILayerVisitor& visitor) const +{ + ConstTensor dummy; + if (GetParameters().m_BiasEnabled) + { + visitor.VisitFullyConnectedLayer(this, GetParameters(), dummy, dummy, GetName()); + } + else + { + visitor.VisitFullyConnectedLayer(this, GetParameters(), dummy, GetName()); + } +} + } // namespace armnn diff --git a/src/armnn/layers/FullyConnectedLayer.hpp b/src/armnn/layers/FullyConnectedLayer.hpp index 0a404b7e49..d756d433c1 100644 --- a/src/armnn/layers/FullyConnectedLayer.hpp +++ b/src/armnn/layers/FullyConnectedLayer.hpp @@ -41,6 +41,8 @@ public: /// @return A vector to the inferred output shape. std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a FullyConnectedLayer. /// @param [in] param FullyConnectedDescriptor to configure the fully connected operation. diff --git a/src/armnn/layers/GatherLayer.cpp b/src/armnn/layers/GatherLayer.cpp index d7ed4b2542..e3ce6b3dad 100644 --- a/src/armnn/layers/GatherLayer.cpp +++ b/src/armnn/layers/GatherLayer.cpp @@ -60,4 +60,9 @@ void GatherLayer::ValidateTensorShapesFromInputs() inferredShape); } +void GatherLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitGatherLayer(this, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/GatherLayer.hpp b/src/armnn/layers/GatherLayer.hpp index 7b3aebe77e..9acec528d8 100644 --- a/src/armnn/layers/GatherLayer.hpp +++ b/src/armnn/layers/GatherLayer.hpp @@ -29,6 +29,8 @@ public: /// will lead to a valid configuration of @ref GatherLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a GatherLayer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/GreaterLayer.cpp b/src/armnn/layers/GreaterLayer.cpp index d40c17c71b..a9fe5e0d8c 100644 --- a/src/armnn/layers/GreaterLayer.cpp +++ b/src/armnn/layers/GreaterLayer.cpp @@ -31,4 +31,9 @@ GreaterLayer* GreaterLayer::Clone(Graph& graph) const return CloneBase<GreaterLayer>(graph, GetName()); } +void GreaterLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitGreaterLayer(this, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/GreaterLayer.hpp b/src/armnn/layers/GreaterLayer.hpp index 8b33f419b9..bdee948d6e 100644 --- a/src/armnn/layers/GreaterLayer.hpp +++ b/src/armnn/layers/GreaterLayer.hpp @@ -25,6 +25,8 @@ public: /// @param [in] graph The graph into which this layer is being cloned. GreaterLayer* Clone(Graph& graph) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a GreaterLayer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/InputLayer.cpp b/src/armnn/layers/InputLayer.cpp index 0b6d5d2a0b..f56c5b47f0 100644 --- a/src/armnn/layers/InputLayer.cpp +++ b/src/armnn/layers/InputLayer.cpp @@ -34,4 +34,9 @@ void InputLayer::ValidateTensorShapesFromInputs() "InputLayer should already have the TensorInfo set."); } +void InputLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitInputLayer(this, this->GetBindingId(), GetName()); +} + } // namespace diff --git a/src/armnn/layers/InputLayer.hpp b/src/armnn/layers/InputLayer.hpp index 1f6f245932..faa48fb2e9 100644 --- a/src/armnn/layers/InputLayer.hpp +++ b/src/armnn/layers/InputLayer.hpp @@ -28,6 +28,8 @@ public: /// will lead to a valid configuration of @ref InputLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create an InputLayer. /// @param id The layer binding id number. diff --git a/src/armnn/layers/L2NormalizationLayer.cpp b/src/armnn/layers/L2NormalizationLayer.cpp index 2a9fde91ee..88c3992d42 100644 --- a/src/armnn/layers/L2NormalizationLayer.cpp +++ b/src/armnn/layers/L2NormalizationLayer.cpp @@ -44,4 +44,9 @@ void L2NormalizationLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void L2NormalizationLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitL2NormalizationLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/L2NormalizationLayer.hpp b/src/armnn/layers/L2NormalizationLayer.hpp index bae3d820ba..0c4b24394d 100644 --- a/src/armnn/layers/L2NormalizationLayer.hpp +++ b/src/armnn/layers/L2NormalizationLayer.hpp @@ -28,6 +28,8 @@ public: /// will lead to a valid configuration of @ref L2NormalizationLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a L2NormalizationLayer. /// @param [in] param L2NormalizationDescriptor to configure the L2 normalization operation. diff --git a/src/armnn/layers/LstmLayer.cpp b/src/armnn/layers/LstmLayer.cpp index bd104d49fe..942038a315 100644 --- a/src/armnn/layers/LstmLayer.cpp +++ b/src/armnn/layers/LstmLayer.cpp @@ -249,4 +249,10 @@ Layer::ConstantTensors LstmLayer::GetConstantTensorsByRef() m_PeepholeParameters.m_CellToOutputWeights}; } +void LstmLayer::Accept(ILayerVisitor& visitor) const +{ + LstmInputParams dummy; + visitor.VisitLstmLayer(this, GetParameters(), dummy, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/LstmLayer.hpp b/src/armnn/layers/LstmLayer.hpp index 6004d9666b..bfea5d8232 100644 --- a/src/armnn/layers/LstmLayer.hpp +++ b/src/armnn/layers/LstmLayer.hpp @@ -92,6 +92,8 @@ public: /// @return A vector to the inferred output shape. std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a LstmLayer. /// @param [in] param LstmDescriptor to configure the lstm operation. diff --git a/src/armnn/layers/MaximumLayer.cpp b/src/armnn/layers/MaximumLayer.cpp index c0da8d6ef8..5f69a470be 100644 --- a/src/armnn/layers/MaximumLayer.cpp +++ b/src/armnn/layers/MaximumLayer.cpp @@ -30,4 +30,9 @@ MaximumLayer* MaximumLayer::Clone(Graph& graph) const return CloneBase<MaximumLayer>(graph, GetName()); } +void MaximumLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitMaximumLayer(this, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/MaximumLayer.hpp b/src/armnn/layers/MaximumLayer.hpp index 82ee6e8f55..9534b07071 100644 --- a/src/armnn/layers/MaximumLayer.hpp +++ b/src/armnn/layers/MaximumLayer.hpp @@ -25,6 +25,8 @@ public: /// @param [in] graph The graph into which this layer is being cloned. MaximumLayer* Clone(Graph& graph) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a MaximumLayer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/MeanLayer.cpp b/src/armnn/layers/MeanLayer.cpp index e45f1a8d2d..c72d79bab9 100644 --- a/src/armnn/layers/MeanLayer.cpp +++ b/src/armnn/layers/MeanLayer.cpp @@ -100,4 +100,9 @@ void MeanLayer::ValidateTensorShapesFromInputs() inferredShape); } +void MeanLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitMeanLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/MeanLayer.hpp b/src/armnn/layers/MeanLayer.hpp index 3896569aa8..d70302fa44 100644 --- a/src/armnn/layers/MeanLayer.hpp +++ b/src/armnn/layers/MeanLayer.hpp @@ -29,6 +29,8 @@ public: /// will lead to a valid configuration of @ref MeanLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a MeanLayer. /// @param [in] param MeanDescriptor to configure the mean operation. diff --git a/src/armnn/layers/MemCopyLayer.cpp b/src/armnn/layers/MemCopyLayer.cpp index e3138d2dee..6f3f55955e 100644 --- a/src/armnn/layers/MemCopyLayer.cpp +++ b/src/armnn/layers/MemCopyLayer.cpp @@ -46,4 +46,9 @@ void MemCopyLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void MemCopyLayer::Accept(ILayerVisitor& visitor) const +{ + throw armnn::Exception("MemCopyLayer should not appear in an input graph"); +} + } // namespace armnn diff --git a/src/armnn/layers/MemCopyLayer.hpp b/src/armnn/layers/MemCopyLayer.hpp index 051b18f1fe..2c696a433c 100644 --- a/src/armnn/layers/MemCopyLayer.hpp +++ b/src/armnn/layers/MemCopyLayer.hpp @@ -28,6 +28,8 @@ public: /// will lead to a valid configuration of @ref MemCopyLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a MemCopyLayer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/MergerLayer.cpp b/src/armnn/layers/MergerLayer.cpp index b4b5d3c2ef..f87f34925f 100644 --- a/src/armnn/layers/MergerLayer.cpp +++ b/src/armnn/layers/MergerLayer.cpp @@ -195,4 +195,9 @@ void MergerLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void MergerLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitMergerLayer(this, GetParameters(), GetName()); +} + } // namespace armnn armnn diff --git a/src/armnn/layers/MergerLayer.hpp b/src/armnn/layers/MergerLayer.hpp index f0bf62bd2f..6f0c1489d4 100644 --- a/src/armnn/layers/MergerLayer.hpp +++ b/src/armnn/layers/MergerLayer.hpp @@ -40,6 +40,8 @@ public: /// @return A vector to the inferred output shape. std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a MergerLayer. /// @param [in] param OriginsDescriptor to configure the merger operation. diff --git a/src/armnn/layers/MinimumLayer.cpp b/src/armnn/layers/MinimumLayer.cpp index 8e76041813..810ee182a1 100644 --- a/src/armnn/layers/MinimumLayer.cpp +++ b/src/armnn/layers/MinimumLayer.cpp @@ -31,4 +31,9 @@ MinimumLayer* MinimumLayer::Clone(Graph& graph) const return CloneBase<MinimumLayer>(graph, GetName()); } +void MinimumLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitMinimumLayer(this, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/MinimumLayer.hpp b/src/armnn/layers/MinimumLayer.hpp index 3801c62622..4a7bc177be 100644 --- a/src/armnn/layers/MinimumLayer.hpp +++ b/src/armnn/layers/MinimumLayer.hpp @@ -25,6 +25,8 @@ public: /// @param [in] graph The graph into which this layer is being cloned. MinimumLayer* Clone(Graph& graph) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a MinimumLayer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/MultiplicationLayer.cpp b/src/armnn/layers/MultiplicationLayer.cpp index 9448935660..4556a874d4 100644 --- a/src/armnn/layers/MultiplicationLayer.cpp +++ b/src/armnn/layers/MultiplicationLayer.cpp @@ -31,4 +31,9 @@ MultiplicationLayer* MultiplicationLayer::Clone(Graph& graph) const return CloneBase<MultiplicationLayer>(graph, GetName()); } +void MultiplicationLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitMultiplicationLayer(this, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/MultiplicationLayer.hpp b/src/armnn/layers/MultiplicationLayer.hpp index 9f15e3a4c6..b9fd35a0e2 100644 --- a/src/armnn/layers/MultiplicationLayer.hpp +++ b/src/armnn/layers/MultiplicationLayer.hpp @@ -25,6 +25,8 @@ public: /// @param [in] graph The graph into which this layer is being cloned. MultiplicationLayer* Clone(Graph& graph) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a MultiplicationLayer. /// @param [in] name Optional name for the layer diff --git a/src/armnn/layers/NormalizationLayer.cpp b/src/armnn/layers/NormalizationLayer.cpp index 140d628452..f5b9284f31 100644 --- a/src/armnn/layers/NormalizationLayer.cpp +++ b/src/armnn/layers/NormalizationLayer.cpp @@ -43,4 +43,9 @@ void NormalizationLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void NormalizationLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitNormalizationLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/NormalizationLayer.hpp b/src/armnn/layers/NormalizationLayer.hpp index 9fd78751f7..0027acc2e5 100644 --- a/src/armnn/layers/NormalizationLayer.hpp +++ b/src/armnn/layers/NormalizationLayer.hpp @@ -28,6 +28,8 @@ public: /// will lead to a valid configuration of @ref NormalizationLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a NormalizationLayer. /// @param [in] param NormalizationDescriptor to configure the normalization operation. diff --git a/src/armnn/layers/OutputLayer.cpp b/src/armnn/layers/OutputLayer.cpp index db11a3d005..9b4cb70032 100644 --- a/src/armnn/layers/OutputLayer.cpp +++ b/src/armnn/layers/OutputLayer.cpp @@ -34,4 +34,9 @@ void OutputLayer::ValidateTensorShapesFromInputs() "OutputLayer: Input slot must be connected."); } +void OutputLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitOutputLayer(this, GetBindingId(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/OutputLayer.hpp b/src/armnn/layers/OutputLayer.hpp index 080b30183b..b86f8e2dfe 100644 --- a/src/armnn/layers/OutputLayer.hpp +++ b/src/armnn/layers/OutputLayer.hpp @@ -37,6 +37,8 @@ public: /// will lead to a valid configuration of @ref OutputLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create an OutputLayer. /// @param id The layer binding id number. diff --git a/src/armnn/layers/PadLayer.cpp b/src/armnn/layers/PadLayer.cpp index 5e5f8ca106..9e08da49c0 100644 --- a/src/armnn/layers/PadLayer.cpp +++ b/src/armnn/layers/PadLayer.cpp @@ -42,4 +42,9 @@ void PadLayer::ValidateTensorShapesFromInputs() return; } +void PadLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitPadLayer(this, GetParameters(), GetName()); +} + } // namespace armnn
\ No newline at end of file diff --git a/src/armnn/layers/PadLayer.hpp b/src/armnn/layers/PadLayer.hpp index 569365a118..8174fa884f 100644 --- a/src/armnn/layers/PadLayer.hpp +++ b/src/armnn/layers/PadLayer.hpp @@ -29,6 +29,8 @@ public: /// will lead to a valid configuration of @ref PadLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a PadLayer. /// @param [in] param PadDescriptor to configure the pad operation. diff --git a/src/armnn/layers/PermuteLayer.cpp b/src/armnn/layers/PermuteLayer.cpp index 6d0d7e011f..e6a7a38685 100644 --- a/src/armnn/layers/PermuteLayer.cpp +++ b/src/armnn/layers/PermuteLayer.cpp @@ -52,4 +52,9 @@ void PermuteLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void PermuteLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitPermuteLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/PermuteLayer.hpp b/src/armnn/layers/PermuteLayer.hpp index e1f391a2ff..8413322373 100644 --- a/src/armnn/layers/PermuteLayer.hpp +++ b/src/armnn/layers/PermuteLayer.hpp @@ -58,6 +58,8 @@ public: GetPermutation().IsEqual(boost::polymorphic_downcast<const PermuteLayer*>(&other)->GetPermutation()); } + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a PermuteLayer. /// @param [in] param PermuteDescriptor to configure the permute operation. diff --git a/src/armnn/layers/Pooling2dLayer.cpp b/src/armnn/layers/Pooling2dLayer.cpp index d4af056217..7c5be01c35 100644 --- a/src/armnn/layers/Pooling2dLayer.cpp +++ b/src/armnn/layers/Pooling2dLayer.cpp @@ -114,4 +114,9 @@ void Pooling2dLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void Pooling2dLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitPooling2dLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/Pooling2dLayer.hpp b/src/armnn/layers/Pooling2dLayer.hpp index ee6a6acee5..f70ae78aa9 100644 --- a/src/armnn/layers/Pooling2dLayer.hpp +++ b/src/armnn/layers/Pooling2dLayer.hpp @@ -34,6 +34,8 @@ public: /// @return A vector to the inferred output shape. std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a Pooling2dLayer. /// @param [in] param Pooling2dDescriptor to configure the pooling2d operation. diff --git a/src/armnn/layers/PreCompiledLayer.cpp b/src/armnn/layers/PreCompiledLayer.cpp index c443f9ae79..11064216ee 100644 --- a/src/armnn/layers/PreCompiledLayer.cpp +++ b/src/armnn/layers/PreCompiledLayer.cpp @@ -53,4 +53,9 @@ void PreCompiledLayer::SetPreCompiledObject(const std::shared_ptr<void>& preComp m_PreCompiledObject = preCompiledObject; } +void PreCompiledLayer::Accept(ILayerVisitor& visitor) const +{ + throw armnn::Exception("PreCompiledLayer should not appear in an input graph"); +} + } // namespace armnn diff --git a/src/armnn/layers/PreCompiledLayer.hpp b/src/armnn/layers/PreCompiledLayer.hpp index fd28d0e7a8..854a78c29a 100644 --- a/src/armnn/layers/PreCompiledLayer.hpp +++ b/src/armnn/layers/PreCompiledLayer.hpp @@ -32,6 +32,8 @@ public: void SetPreCompiledObject(const std::shared_ptr<void>& preCompiledObject); + void Accept(ILayerVisitor& visitor) const override; + private: PreCompiledLayer(const PreCompiledLayer& other) = delete; PreCompiledLayer& operator=(const PreCompiledLayer& other) = delete; diff --git a/src/armnn/layers/ReshapeLayer.cpp b/src/armnn/layers/ReshapeLayer.cpp index 2a069808f1..cfce712151 100644 --- a/src/armnn/layers/ReshapeLayer.cpp +++ b/src/armnn/layers/ReshapeLayer.cpp @@ -49,4 +49,9 @@ void ReshapeLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void ReshapeLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitReshapeLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/ReshapeLayer.hpp b/src/armnn/layers/ReshapeLayer.hpp index 13e73be4e4..c4743d17df 100644 --- a/src/armnn/layers/ReshapeLayer.hpp +++ b/src/armnn/layers/ReshapeLayer.hpp @@ -43,6 +43,8 @@ public: m_Param.m_TargetShape == boost::polymorphic_downcast<const ReshapeLayer*>(&other)->m_Param.m_TargetShape; } + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a ReshapeLayer. /// @param [in] param ReshapeDescriptor to configure the reshape operation. diff --git a/src/armnn/layers/ResizeBilinearLayer.cpp b/src/armnn/layers/ResizeBilinearLayer.cpp index c7c92d7394..03fe317e79 100644 --- a/src/armnn/layers/ResizeBilinearLayer.cpp +++ b/src/armnn/layers/ResizeBilinearLayer.cpp @@ -66,4 +66,9 @@ void ResizeBilinearLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void ResizeBilinearLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitResizeBilinearLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/ResizeBilinearLayer.hpp b/src/armnn/layers/ResizeBilinearLayer.hpp index 185d8a59e1..4bf264cb45 100644 --- a/src/armnn/layers/ResizeBilinearLayer.hpp +++ b/src/armnn/layers/ResizeBilinearLayer.hpp @@ -34,6 +34,8 @@ public: /// @return A vector to the inferred output shape. std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a ResizeBilinearLayerLayer. /// @param [in] param ResizeBilinearDescriptor to configure the resize bilinear operation. diff --git a/src/armnn/layers/RsqrtLayer.cpp b/src/armnn/layers/RsqrtLayer.cpp index d516810c68..a21564ed7f 100644 --- a/src/armnn/layers/RsqrtLayer.cpp +++ b/src/armnn/layers/RsqrtLayer.cpp @@ -45,4 +45,9 @@ void RsqrtLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void RsqrtLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitRsqrtLayer(this, GetName()); +} + } // namespace armnn
\ No newline at end of file diff --git a/src/armnn/layers/RsqrtLayer.hpp b/src/armnn/layers/RsqrtLayer.hpp index 47a4ccedd6..526a6642ca 100644 --- a/src/armnn/layers/RsqrtLayer.hpp +++ b/src/armnn/layers/RsqrtLayer.hpp @@ -28,6 +28,8 @@ public: /// will lead to a valid configuration of @ref RsqrtLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create an RsqrtLayer. /// @param [in] name Optional name for the layer. diff --git a/src/armnn/layers/SoftmaxLayer.cpp b/src/armnn/layers/SoftmaxLayer.cpp index 4c2456d49c..90891b417a 100644 --- a/src/armnn/layers/SoftmaxLayer.cpp +++ b/src/armnn/layers/SoftmaxLayer.cpp @@ -43,4 +43,9 @@ void SoftmaxLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void SoftmaxLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitSoftmaxLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/SoftmaxLayer.hpp b/src/armnn/layers/SoftmaxLayer.hpp index f6bc8941d9..82c2099ea3 100644 --- a/src/armnn/layers/SoftmaxLayer.hpp +++ b/src/armnn/layers/SoftmaxLayer.hpp @@ -28,6 +28,8 @@ public: /// will lead to a valid configuration of @ref SoftmaxLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a SoftmaxLayer. /// @param [in] param SoftmaxDescriptor to configure the softmax operation. diff --git a/src/armnn/layers/SpaceToBatchNdLayer.cpp b/src/armnn/layers/SpaceToBatchNdLayer.cpp index 38540d522d..6d5827e771 100644 --- a/src/armnn/layers/SpaceToBatchNdLayer.cpp +++ b/src/armnn/layers/SpaceToBatchNdLayer.cpp @@ -82,4 +82,9 @@ void SpaceToBatchNdLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void SpaceToBatchNdLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitSpaceToBatchNdLayer(this, GetParameters(), GetName()); +} + } // namespace diff --git a/src/armnn/layers/SpaceToBatchNdLayer.hpp b/src/armnn/layers/SpaceToBatchNdLayer.hpp index 3e91bbd88c..f6616bcd21 100644 --- a/src/armnn/layers/SpaceToBatchNdLayer.hpp +++ b/src/armnn/layers/SpaceToBatchNdLayer.hpp @@ -35,6 +35,8 @@ public: /// will lead to a valid configuration of @ref SpaceToBatchNdLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a SpaceToBatchNdLayer. /// @param [in] param SpaceToBatchNdDescriptor to configure the SpaceToBatchNdLayer operation. diff --git a/src/armnn/layers/SplitterLayer.cpp b/src/armnn/layers/SplitterLayer.cpp index 5cf1f6b3b1..b3a1094118 100644 --- a/src/armnn/layers/SplitterLayer.cpp +++ b/src/armnn/layers/SplitterLayer.cpp @@ -98,4 +98,9 @@ void SplitterLayer::ValidateTensorShapesFromInputs() } } +void SplitterLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitSplitterLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/SplitterLayer.hpp b/src/armnn/layers/SplitterLayer.hpp index 6a73510f33..19b05562e8 100644 --- a/src/armnn/layers/SplitterLayer.hpp +++ b/src/armnn/layers/SplitterLayer.hpp @@ -40,6 +40,8 @@ public: /// @return A vector to the inferred output shape. std::vector<TensorShape> InferOutputShapes(const std::vector<TensorShape>& inputShapes) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a SplitterLayer. /// @param [in] param ViewsDescriptor to configure the splitter operation. diff --git a/src/armnn/layers/StridedSliceLayer.cpp b/src/armnn/layers/StridedSliceLayer.cpp index 4ad9b89dd1..03d451c69a 100644 --- a/src/armnn/layers/StridedSliceLayer.cpp +++ b/src/armnn/layers/StridedSliceLayer.cpp @@ -88,4 +88,9 @@ void StridedSliceLayer::ValidateTensorShapesFromInputs() inferredShapes[0]); } +void StridedSliceLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitStridedSliceLayer(this, GetParameters(), GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/StridedSliceLayer.hpp b/src/armnn/layers/StridedSliceLayer.hpp index 761dc5e600..97b8ee2a07 100644 --- a/src/armnn/layers/StridedSliceLayer.hpp +++ b/src/armnn/layers/StridedSliceLayer.hpp @@ -34,6 +34,8 @@ public: /// will lead to a valid configuration of @ref StridedSliceLayer. void ValidateTensorShapesFromInputs() override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a StridedSliceLayer. /// @param [in] param StridedSliceDescriptor to configure the strided slice layer. diff --git a/src/armnn/layers/SubtractionLayer.cpp b/src/armnn/layers/SubtractionLayer.cpp index 18d8661dd6..6becfdcd5d 100644 --- a/src/armnn/layers/SubtractionLayer.cpp +++ b/src/armnn/layers/SubtractionLayer.cpp @@ -31,4 +31,9 @@ SubtractionLayer* SubtractionLayer::Clone(Graph& graph) const return CloneBase<SubtractionLayer>(graph, GetName()); } +void SubtractionLayer::Accept(ILayerVisitor& visitor) const +{ + visitor.VisitSubtractionLayer(this, GetName()); +} + } // namespace armnn diff --git a/src/armnn/layers/SubtractionLayer.hpp b/src/armnn/layers/SubtractionLayer.hpp index 15d5684cdc..557da65db4 100644 --- a/src/armnn/layers/SubtractionLayer.hpp +++ b/src/armnn/layers/SubtractionLayer.hpp @@ -25,6 +25,8 @@ public: /// @param [in] graph The graph into which this layer is being cloned. SubtractionLayer* Clone(Graph& graph) const override; + void Accept(ILayerVisitor& visitor) const override; + protected: /// Constructor to create a SubtractionLayer. /// @param [in] name Optional name for the layer. |