From 181473307ca4e8745dbb0c8474f2615d1752b03a Mon Sep 17 00:00:00 2001 From: Teresa Charlin Date: Wed, 17 Nov 2021 14:34:30 +0000 Subject: IVGCVSW-6584 AddConvolution3dLayer to PyArmNN Signed-off-by: Teresa Charlin Change-Id: I6d09abb75db1875d4d4075b1801fdc46a0f4ae7b --- python/pyarmnn/src/pyarmnn/__init__.py | 9 +++-- .../src/pyarmnn/swig/modules/armnn_descriptors.i | 44 +++++++++++++++++++++- .../src/pyarmnn/swig/modules/armnn_network.i | 34 +++++++++++++---- python/pyarmnn/test/test_descriptors.py | 21 ++++++++++- python/pyarmnn/test/test_network.py | 3 +- 5 files changed, 96 insertions(+), 15 deletions(-) diff --git a/python/pyarmnn/src/pyarmnn/__init__.py b/python/pyarmnn/src/pyarmnn/__init__.py index a5d5c84762..1a71844cfc 100644 --- a/python/pyarmnn/src/pyarmnn/__init__.py +++ b/python/pyarmnn/src/pyarmnn/__init__.py @@ -68,7 +68,7 @@ from ._generated.pyarmnn import IProfiler from ._generated.pyarmnn import DataType_Float16, DataType_Float32, DataType_QAsymmU8, DataType_Signed32, \ DataType_Boolean, DataType_QSymmS16, DataType_QSymmS8, DataType_QAsymmS8, ShapeInferenceMethod_ValidateOnly, \ ShapeInferenceMethod_InferAndValidate -from ._generated.pyarmnn import DataLayout_NCHW, DataLayout_NHWC +from ._generated.pyarmnn import DataLayout_NCHW, DataLayout_NHWC, DataLayout_NCDHW, DataLayout_NDHWC from ._generated.pyarmnn import MemorySource_Malloc, MemorySource_Undefined, MemorySource_DmaBuf, \ MemorySource_DmaBufProtected from ._generated.pyarmnn import ProfilingDetailsMethod_Undefined, ProfilingDetailsMethod_DetailsWithEvents, \ @@ -86,9 +86,10 @@ from ._generated.pyarmnn import UnaryOperation_Abs, UnaryOperation_Exp, UnaryOpe UnaryOperation_Neg, ElementwiseUnaryDescriptor from ._generated.pyarmnn import LogicalBinaryOperation_LogicalAnd, LogicalBinaryOperation_LogicalOr, \ LogicalBinaryDescriptor -from ._generated.pyarmnn import Convolution2dDescriptor, DepthToSpaceDescriptor, DepthwiseConvolution2dDescriptor, \ - DetectionPostProcessDescriptor, FakeQuantizationDescriptor, FillDescriptor, FullyConnectedDescriptor, \ - GatherDescriptor, InstanceNormalizationDescriptor, LstmDescriptor, L2NormalizationDescriptor, MeanDescriptor +from ._generated.pyarmnn import Convolution2dDescriptor, Convolution3dDescriptor, DepthToSpaceDescriptor, \ + DepthwiseConvolution2dDescriptor, DetectionPostProcessDescriptor, FakeQuantizationDescriptor, FillDescriptor, \ + FullyConnectedDescriptor, GatherDescriptor, InstanceNormalizationDescriptor, LstmDescriptor, \ + L2NormalizationDescriptor, MeanDescriptor from ._generated.pyarmnn import NormalizationAlgorithmChannel_Across, NormalizationAlgorithmChannel_Within, \ NormalizationAlgorithmMethod_LocalBrightness, NormalizationAlgorithmMethod_LocalContrast, NormalizationDescriptor from ._generated.pyarmnn import PaddingMode_Constant, PaddingMode_Reflect, PaddingMode_Symmetric, PadDescriptor diff --git a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i index 6ab7f245d6..e51c8674ab 100644 --- a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i +++ b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_descriptors.i @@ -1,5 +1,5 @@ // -// Copyright © 2020 Arm Ltd. All rights reserved. +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // %{ @@ -274,6 +274,48 @@ struct Convolution2dDescriptor bool operator ==(const Convolution2dDescriptor& rhs) const; }; +%feature("docstring", + " + A descriptor for the Convolution3d layer. See `INetwork.AddConvolution3dLayer()`. + + Contains: + m_PadLeft (int): Underlying C++ data type is uint32_t. Padding left value in the width dimension. Default: 0. + m_PadRight (int): Underlying C++ data type is uint32_t. Padding right value in the width dimension. Default: 0. + m_PadTop (int): Underlying C++ data type is uint32_t. Padding top value in the height dimension. Default: 0. + m_PadBottom (int): Underlying C++ data type is uint32_t. Padding bottom value in the height dimension. Default: 0. + m_PadFront (int): Underlying C++ data type is uint32_t. Padding front value in the depth dimension. Default: 0. + m_PadBack (int): Underlying C++ data type is uint32_t. Padding back value in the depth dimension. Default: 0. + m_StrideX (int): Underlying C++ data type is uint32_t. Stride value when proceeding through input for the width dimension. Default: 0. + m_StrideY (int): Underlying C++ data type is uint32_t. Stride value when proceeding through input for the height dimension. Default: 0. + m_StrideZ (int): Underlying C++ data type is uint32_t. Stride value when proceeding through input for the depth dimension. Default: 0. + m_DilationX (int): Underlying C++ data type is uint32_t. Dilation along x axis. Default: 1. + m_DilationY (int): Underlying C++ data type is uint32_t. Dilation along y axis. Default: 1. + m_DilationZ (int): Underlying C++ data type is uint32_t. Dilation along z axis. Default: 1. + m_BiasEnabled (bool): Enable/disable bias. Default: false. + m_DataLayout (int): The data layout to be used (`DataLayout_NDHWC`, `DataLayout_NCDHW`). Default: 3 `DataLayout_NDHWC`. + + ") Convolution3dDescriptor; +struct Convolution3dDescriptor +{ + Convolution3dDescriptor(); + + uint32_t m_PadLeft; + uint32_t m_PadRight; + uint32_t m_PadTop; + uint32_t m_PadBottom; + uint32_t m_PadFront; + uint32_t m_PadBack; + uint32_t m_StrideX; + uint32_t m_StrideY; + uint32_t m_StrideZ; + uint32_t m_DilationX; + uint32_t m_DilationY; + uint32_t m_DilationZ; + bool m_BiasEnabled; + DataLayout m_DataLayout; + + bool operator ==(const Convolution3dDescriptor& rhs) const; +}; %feature("docstring", " diff --git a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i index 3e3a36570e..fe626dc2ea 100644 --- a/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i +++ b/python/pyarmnn/src/pyarmnn/swig/modules/armnn_network.i @@ -1,5 +1,5 @@ // -// Copyright © 2020 Arm Ltd. All rights reserved. +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // %{ @@ -467,7 +467,7 @@ public: IConnectableLayer: Interface for configuring the layer. ") AddConcatLayer; armnn::IConnectableLayer* AddConcatLayer(const armnn::ConcatDescriptor& concatDescriptor, - const char* name = nullptr); + const char* name = nullptr); %feature("docstring", @@ -484,7 +484,24 @@ public: IConnectableLayer: Interface for configuring the layer. ") AddConstantLayer; armnn::IConnectableLayer* AddConstantLayer(const armnn::ConstTensor& input, - const char* name = nullptr); + const char* name = nullptr); + + + %feature("docstring", + " + Adds a 3D Convolution layer to the network. + + Args: + convolution3dDescriptor (Convolution3dDescriptor): Description of the 3D convolution layer. + name (str): Optional name for the layer. + + Returns: + IConnectableLayer: Interface for configuring the layer. + ") AddConvolution3dLayer; + + armnn::IConnectableLayer* AddConvolution3dLayer(const armnn::Convolution3dDescriptor& convolution3dDescriptor, + const char* name = nullptr); + %feature("docstring", " @@ -498,7 +515,7 @@ public: IConnectableLayer: Interface for configuring the layer. ") AddDepthToSpaceLayer; armnn::IConnectableLayer* AddDepthToSpaceLayer(const armnn::DepthToSpaceDescriptor& depthToSpaceDescriptor, - const char* name = nullptr); + const char* name = nullptr); %feature("docstring", " @@ -609,7 +626,7 @@ public: IConnectableLayer: Interface for configuring the layer. ") AddInstanceNormalizationLayer; armnn::IConnectableLayer* AddInstanceNormalizationLayer(const armnn::InstanceNormalizationDescriptor& desc, - const char* name = nullptr); + const char* name = nullptr); %feature("docstring", " @@ -1129,9 +1146,9 @@ public: IConnectableLayer: Interface for configuring the layer. ") AddConvolution2dLayer; armnn::IConnectableLayer* AddConvolution2dLayer(const armnn::Convolution2dDescriptor& convolution2dDescriptor, - const armnn::ConstTensor& weights, - armnn::ConstTensor* biases = nullptr, - const char* name = nullptr) { + const armnn::ConstTensor& weights, + armnn::ConstTensor* biases = nullptr, + const char* name = nullptr) { if (biases) { return $self->AddConvolution2dLayer(convolution2dDescriptor, weights, @@ -1142,6 +1159,7 @@ public: } } + %feature("docstring", " Adds a 2D Depthwise Convolution layer to the network. diff --git a/python/pyarmnn/test/test_descriptors.py b/python/pyarmnn/test/test_descriptors.py index 507afad46e..54b79d7397 100644 --- a/python/pyarmnn/test/test_descriptors.py +++ b/python/pyarmnn/test/test_descriptors.py @@ -1,4 +1,4 @@ -# Copyright © 2020 Arm Ltd. All rights reserved. +# Copyright © 2020 Arm Ltd and Contributors. All rights reserved. # SPDX-License-Identifier: MIT import inspect @@ -101,6 +101,23 @@ def test_convolution2d_descriptor_default_values(): assert desc.m_BiasEnabled == False assert desc.m_DataLayout == ann.DataLayout_NCHW +def test_convolution3d_descriptor_default_values(): + desc = ann.Convolution3dDescriptor() + assert desc.m_PadLeft == 0 + assert desc.m_PadTop == 0 + assert desc.m_PadRight == 0 + assert desc.m_PadBottom == 0 + assert desc.m_PadFront == 0 + assert desc.m_PadBack == 0 + assert desc.m_StrideX == 1 + assert desc.m_StrideY == 1 + assert desc.m_StrideZ == 1 + assert desc.m_DilationX == 1 + assert desc.m_DilationY == 1 + assert desc.m_DilationZ == 1 + assert desc.m_BiasEnabled == False + assert desc.m_DataLayout == ann.DataLayout_NDHWC + def test_depthtospace_descriptor_default_values(): desc = ann.DepthToSpaceDescriptor() @@ -486,6 +503,7 @@ generated_classes_names = list(map(lambda x: x[0], generated_classes)) 'Pooling2dDescriptor', 'FullyConnectedDescriptor', 'Convolution2dDescriptor', + 'Convolution3dDescriptor', 'DepthwiseConvolution2dDescriptor', 'DetectionPostProcessDescriptor', 'NormalizationDescriptor', @@ -532,6 +550,7 @@ generated_classes_names = list(map(lambda x: x[0], generated_classes)) 'Pooling2dDescriptor', 'FullyConnectedDescriptor', 'Convolution2dDescriptor', + 'Convolution3dDescriptor', 'DepthwiseConvolution2dDescriptor', 'DetectionPostProcessDescriptor', 'NormalizationDescriptor', diff --git a/python/pyarmnn/test/test_network.py b/python/pyarmnn/test/test_network.py index d734f619f7..04e1b7a05f 100644 --- a/python/pyarmnn/test/test_network.py +++ b/python/pyarmnn/test/test_network.py @@ -1,4 +1,4 @@ -# Copyright © 2020 Arm Ltd. All rights reserved. +# Copyright © 2020 Arm Ltd and Contributors. All rights reserved. # SPDX-License-Identifier: MIT import os import stat @@ -197,6 +197,7 @@ def test_serialize_to_dot_mode_readonly(network_file, get_runtime, tmpdir): 'AddConcatLayer', 'AddConstantLayer', 'AddConvolution2dLayer', + 'AddConvolution3dLayer', 'AddDepthToSpaceLayer', 'AddDepthwiseConvolution2dLayer', 'AddDequantizeLayer', -- cgit v1.2.1