diff options
author | Georgios Pinitas <georgios.pinitas@arm.com> | 2017-10-25 18:26:46 +0100 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:35:24 +0000 |
commit | 407c3e6e383affa7ebe72ce5f50fcf163ff037a3 (patch) | |
tree | c516e583fe0a2e5ee9dfc218fe10880000edcf91 /arm_compute | |
parent | e500747b5c1d27aeffae316c8190f6d169bb2fbd (diff) | |
download | ComputeLibrary-407c3e6e383affa7ebe72ce5f50fcf163ff037a3.tar.gz |
COMPMID-630: Rework nodes
Reworked node:
-BatchNormalization
-Floor
-FullyConncted
-L2Normalize
-Normalization
-Pooling
-Softmax
Change-Id: I4c71cfffb1f59aac3326ba8b1f831339c5244394
Reviewed-on: http://mpd-gerrit.cambridge.arm.com/93134
Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Diffstat (limited to 'arm_compute')
-rw-r--r-- | arm_compute/graph/IOperation.h | 14 | ||||
-rw-r--r-- | arm_compute/graph/NodeContext.h | 9 | ||||
-rw-r--r-- | arm_compute/graph/OperationRegistrar.h | 8 | ||||
-rw-r--r-- | arm_compute/graph/OperationRegistry.h | 20 | ||||
-rw-r--r-- | arm_compute/graph/Types.h | 14 | ||||
-rw-r--r-- | arm_compute/graph/nodes/DepthConcatenateLayer.h | 58 | ||||
-rw-r--r-- | arm_compute/graph/nodes/L2NormalizeLayer.h | 5 | ||||
-rw-r--r-- | arm_compute/graph/operations/CL/CLActivationLayerOperation.h | 49 | ||||
-rw-r--r-- | arm_compute/graph/operations/NEON/NEActivationLayerOperation.h | 49 |
9 files changed, 47 insertions, 179 deletions
diff --git a/arm_compute/graph/IOperation.h b/arm_compute/graph/IOperation.h index c2c56a349d..a9fa4f83c7 100644 --- a/arm_compute/graph/IOperation.h +++ b/arm_compute/graph/IOperation.h @@ -51,6 +51,20 @@ public: */ virtual TargetHint target() const = 0; }; + +#define REGISTER_SIMPLE_OPERATION(NAME, TARGET, OP) \ + class NAME : public IOperation \ + { \ + public: \ + std::unique_ptr<arm_compute::IFunction> configure(NodeContext &ctx) final; \ + TargetHint target() const final \ + { \ + return TargetHint::TARGET; \ + } \ + }; \ + static detail::OperationRegistrar<NAME> NAME##_registrar(OP); \ + std::unique_ptr<arm_compute::IFunction> NAME::configure(NodeContext &ctx) + } // namespace graph } // namespace arm_compute #endif /* __ARM_COMPUTE_GRAPH_IOPERATION_H__ */ diff --git a/arm_compute/graph/NodeContext.h b/arm_compute/graph/NodeContext.h index 8e8a761d22..bc90f217a7 100644 --- a/arm_compute/graph/NodeContext.h +++ b/arm_compute/graph/NodeContext.h @@ -45,11 +45,10 @@ class NodeContext { public: /** Default Constructor - * (TODO(geopin01): Should we have an enum with all the supported ops instead?) * * @param[in] operation Name of the operation */ - NodeContext(std::string operation) + NodeContext(OperationType operation) : _operation(operation), _target(TargetHint::DONT_CARE), _inputs(), _outputs(), _parameters() {}; /** Sets the execution target of the node * @@ -75,9 +74,9 @@ public: void add_parameter(std::string name, T parameter); /** Returns the operation of this node. * - * @return The operation name + * @return The operation type */ - std::string operation() const; + OperationType operation() const; /** Returns the execution target of this node * * @return The execution target @@ -117,7 +116,7 @@ public: size_t num_outputs() const; private: - std::string _operation; + OperationType _operation; TargetHint _target; std::vector<arm_compute::ITensor *> _inputs; std::vector<arm_compute::ITensor *> _outputs; diff --git a/arm_compute/graph/OperationRegistrar.h b/arm_compute/graph/OperationRegistrar.h index ff31963dc3..ee171c3510 100644 --- a/arm_compute/graph/OperationRegistrar.h +++ b/arm_compute/graph/OperationRegistrar.h @@ -43,15 +43,15 @@ class OperationRegistrar final public: /** Add a new test case with the given name to the framework. * - * @param[in] operation_name Operation name + * @param[in] operation Operation type */ - OperationRegistrar(std::string operation_name); + OperationRegistrar(OperationType operation); }; template <typename T> -inline OperationRegistrar<T>::OperationRegistrar(std::string operation_name) +inline OperationRegistrar<T>::OperationRegistrar(OperationType operation) { - OperationRegistry::get().add_operation<T>(std::move(operation_name)); + OperationRegistry::get().add_operation<T>(std::move(operation)); } } // namespace detail } // namespace graph diff --git a/arm_compute/graph/OperationRegistry.h b/arm_compute/graph/OperationRegistry.h index 905e8ee66f..ae68bf45a2 100644 --- a/arm_compute/graph/OperationRegistry.h +++ b/arm_compute/graph/OperationRegistry.h @@ -47,39 +47,39 @@ public: static OperationRegistry &get(); /** Finds an operation in the registry * - * @param[in] operation Name of the operation to find + * @param[in] operation Type of the operation to find * @param[in] target Target of the operation * * @return Pointer to the operation functor if found, else nullptr */ - IOperation *find_operation(const std::string &operation, TargetHint target); + IOperation *find_operation(OperationType operation, TargetHint target); /** Checks if an operation for a given target exists * - * @param[in] operation Operation name + * @param[in] operation Operation type * @param[in] target Execution target * * @return True if exists else false */ - bool contains(const std::string &operation, TargetHint target) const; - /** Registers and operation to the registry + bool contains(OperationType operation, TargetHint target) const; + /** Registers an operation to the registry * - * @param operation_name Name of the operation to register + * @param operation Operation to register */ template <typename T> - void add_operation(const std::string &operation_name); + void add_operation(OperationType operation); private: /** Default Constructor */ OperationRegistry(); private: - std::map<std::string, std::vector<std::unique_ptr<IOperation>>> _registered_ops; + std::map<OperationType, std::vector<std::unique_ptr<IOperation>>> _registered_ops; }; template <typename T> -inline void OperationRegistry::add_operation(const std::string &operation_name) +inline void OperationRegistry::add_operation(OperationType operation) { - _registered_ops[operation_name].emplace_back(support::cpp14::make_unique<T>()); + _registered_ops[operation].emplace_back(support::cpp14::make_unique<T>()); } } // namespace graph } // namespace arm_compute diff --git a/arm_compute/graph/Types.h b/arm_compute/graph/Types.h index f02fa7df3f..662a7404ef 100644 --- a/arm_compute/graph/Types.h +++ b/arm_compute/graph/Types.h @@ -71,6 +71,20 @@ enum class ConvolutionMethodHint DIRECT /**< Direct convolution */ }; +/** Supported layer operations */ +enum class OperationType +{ + ActivationLayer, + BatchNormalizationLayer, + ConvolutionLayer, + FloorLayer, + FullyConnectedLayer, + L2NormalizeLayer, + NormalizationLayer, + PoolingLayer, + SoftmaxLayer +}; + /** Branch layer merging method */ enum class BranchMergeMethod { diff --git a/arm_compute/graph/nodes/DepthConcatenateLayer.h b/arm_compute/graph/nodes/DepthConcatenateLayer.h deleted file mode 100644 index ac347a46d6..0000000000 --- a/arm_compute/graph/nodes/DepthConcatenateLayer.h +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2017 ARM Limited. - * - * SPDX-License-Identifier: MIT - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef __ARM_COMPUTE_GRAPH_DEPTH_CONCATENATE_LAYER_H__ -#define __ARM_COMPUTE_GRAPH_DEPTH_CONCATENATE_LAYER_H__ - -#include "arm_compute/graph/GraphContext.h" -#include "arm_compute/graph/INode.h" -#include "arm_compute/graph/Tensor.h" -#include "arm_compute/graph/Types.h" - -namespace arm_compute -{ -namespace graph -{ -/** Depth Concatenate Layer node */ -class DepthConcatenateLayer -{ -public: - /** Default Constructor */ - DepthConcatenateLayer() = default; - DepthConcatenateLayer(const DepthConcatenateLayer &) = delete; - DepthConcatenateLayer &operator=(const DepthConcatenateLayer &) = delete; - DepthConcatenateLayer(DepthConcatenateLayer &&) = default; - DepthConcatenateLayer &operator=(DepthConcatenateLayer &&) = delete; - - // Inherited methods overriden: - std::unique_ptr<arm_compute::IFunction> instantiate_node(GraphContext &ctx, std::vector<ITensor *> inputs, ITensor *output); - void print_info(); - -private: - TargetHint _hint{ TargetHint::DONT_CARE }; - std::vector<ITensor *> _inputs{ nullptr }; - ITensor *_output{ nullptr }; -}; -} // namespace graph -} // namespace arm_compute -#endif /* __ARM_COMPUTE_GRAPH_DEPTH_CONCATENATE_LAYER_H__ */ diff --git a/arm_compute/graph/nodes/L2NormalizeLayer.h b/arm_compute/graph/nodes/L2NormalizeLayer.h index ddc1646485..fc2bbc2d19 100644 --- a/arm_compute/graph/nodes/L2NormalizeLayer.h +++ b/arm_compute/graph/nodes/L2NormalizeLayer.h @@ -42,10 +42,7 @@ public: * @param[in] axis Dimension along which to reduce. * @param[in] epsilon Lower bound value for the normalization. */ - explicit L2NormalizeLayer(unsigned int axis, float epsilon) - : _axis(axis), _epsilon(epsilon) - { - } + explicit L2NormalizeLayer(unsigned int axis, float epsilon); // Inherited methods overriden: std::unique_ptr<arm_compute::IFunction> instantiate_node(GraphContext &ctx, ITensorObject *input, ITensorObject *output) override; diff --git a/arm_compute/graph/operations/CL/CLActivationLayerOperation.h b/arm_compute/graph/operations/CL/CLActivationLayerOperation.h deleted file mode 100644 index 2053fb674d..0000000000 --- a/arm_compute/graph/operations/CL/CLActivationLayerOperation.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2017 ARM Limited. - * - * SPDX-License-Identifier: MIT - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef __ARM_COMPUTE_GRAPH_CL_ACTIVATIONLAYER_OPERATION_H__ -#define __ARM_COMPUTE_GRAPH_CL_ACTIVATIONLAYER_OPERATION_H__ - -#include "arm_compute/graph/IOperation.h" - -#include "arm_compute/graph/NodeContext.h" -#include "arm_compute/graph/Types.h" -#include "arm_compute/runtime/IFunction.h" - -#include <memory> - -namespace arm_compute -{ -namespace graph -{ -/** Operation functor interface */ -class CLActivationLayerOperation : public IOperation -{ -public: - // Inherited methods overriden: - std::unique_ptr<arm_compute::IFunction> configure(NodeContext &ctx) final; - TargetHint target() const final; -}; -} // namespace graph -} // namespace arm_compute -#endif /* __ARM_COMPUTE_GRAPH_CL_ACTIVATIONLAYER_OPERATION_H__ */ diff --git a/arm_compute/graph/operations/NEON/NEActivationLayerOperation.h b/arm_compute/graph/operations/NEON/NEActivationLayerOperation.h deleted file mode 100644 index f6e1bd7d39..0000000000 --- a/arm_compute/graph/operations/NEON/NEActivationLayerOperation.h +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Copyright (c) 2017 ARM Limited. - * - * SPDX-License-Identifier: MIT - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to - * deal in the Software without restriction, including without limitation the - * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or - * sell copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ -#ifndef __ARM_COMPUTE_GRAPH_NE_ACTIVATIONLAYER_OPERATION_H__ -#define __ARM_COMPUTE_GRAPH_NE_ACTIVATIONLAYER_OPERATION_H__ - -#include "arm_compute/graph/IOperation.h" - -#include "arm_compute/graph/NodeContext.h" -#include "arm_compute/graph/Types.h" -#include "arm_compute/runtime/IFunction.h" - -#include <memory> - -namespace arm_compute -{ -namespace graph -{ -/** Operation functor interface */ -class NEActivationLayerOperation : public IOperation -{ -public: - // Inherited methods overriden: - std::unique_ptr<arm_compute::IFunction> configure(NodeContext &ctx) final; - TargetHint target() const final; -}; -} // namespace graph -} // namespace arm_compute -#endif /* __ARM_COMPUTE_GRAPH_NE_ACTIVATIONLAYER_OPERATION_H__ */ |