diff options
author | Georgios Pinitas <georgios.pinitas@arm.com> | 2017-09-26 12:32:57 +0100 |
---|---|---|
committer | Anthony Barbier <anthony.barbier@arm.com> | 2018-11-02 16:35:24 +0000 |
commit | 6f669f039fb74675b858bc3703295609a6a3e122 (patch) | |
tree | 704847bbebb2439f68309680bd4f4142b876c179 /arm_compute/graph/nodes/ConvolutionLayer.h | |
parent | 1682430e220eb609752c650f85c0f96e375b6d6a (diff) | |
download | ComputeLibrary-6f669f039fb74675b858bc3703295609a6a3e122.tar.gz |
COMPMID-417: Add grouping in convolution layer
-Adds grouping support in convolution layer
-Adds Normalization layer node in graph
-Adds alexnet example
-Fixes FullyConnectedLayer output autoconfigure (works only for 1d batch
space)
Change-Id: I5bd75f9a8b08cfd68f7c34745150266c2bc4221f
Reviewed-on: http://mpd-gerrit.cambridge.arm.com/89518
Tested-by: Kaizen <jeremy.johnson+kaizengerrit@arm.com>
Reviewed-by: Anthony Barbier <anthony.barbier@arm.com>
Diffstat (limited to 'arm_compute/graph/nodes/ConvolutionLayer.h')
-rw-r--r-- | arm_compute/graph/nodes/ConvolutionLayer.h | 68 |
1 files changed, 56 insertions, 12 deletions
diff --git a/arm_compute/graph/nodes/ConvolutionLayer.h b/arm_compute/graph/nodes/ConvolutionLayer.h index c0e257bf6a..fcd097bdaa 100644 --- a/arm_compute/graph/nodes/ConvolutionLayer.h +++ b/arm_compute/graph/nodes/ConvolutionLayer.h @@ -25,15 +25,19 @@ #define __ARM_COMPUTE_GRAPH_CONVOLUTION_LAYER_H__ #include "arm_compute/graph/INode.h" +#include "arm_compute/graph/SubTensor.h" #include "arm_compute/graph/Tensor.h" #include "arm_compute/graph/Types.h" +#include "arm_compute/runtime/IFunction.h" + +#include <memory> namespace arm_compute { namespace graph { /** Convolution layer node */ -class ConvolutionLayer : public INode +class ConvolutionLayer final : public INode { public: /** Default Constructor @@ -44,12 +48,30 @@ public: * @param[in] weights Weights of the convolution layer * @param[in] biases Bias of the convolution layer * @param[in] conv_info Convolution information - * @param[in] weights_info Weights information + * @param[in] num_groups (Optional) Number of groups, default = 1 + * @param[in] weights_info (Optional) Weights information */ template <typename AccessorTypeWeights, typename AccessorTypeBiases> - ConvolutionLayer(unsigned int conv_width, unsigned int conv_height, unsigned int ofm, AccessorTypeWeights &&weights, - AccessorTypeBiases &&biases, const PadStrideInfo &conv_info, const WeightsInfo &weights_info = WeightsInfo()) - : _conv_width(conv_width), _conv_height(conv_height), _ofm(ofm), _weights(std::move(weights)), _biases(std::move(biases)), _conv_info(conv_info), _weights_info(weights_info) + ConvolutionLayer(unsigned int conv_width, + unsigned int conv_height, + unsigned int ofm, + AccessorTypeWeights &&weights, + AccessorTypeBiases &&biases, + const PadStrideInfo conv_info, + unsigned int num_groups = 1, + const WeightsInfo weights_info = WeightsInfo()) + : _conv_width(conv_width), + _conv_height(conv_height), + _ofm(ofm), + _weights(std::move(weights)), + _biases(std::move(biases)), + _conv_info(std::move(conv_info)), + _num_groups(num_groups), + _weights_info(std::move(weights_info)), + _is(nullptr), + _os(nullptr), + _ws(nullptr), + _bs(nullptr) { } @@ -58,13 +80,35 @@ public: void print_info() override; private: - unsigned int _conv_width; /**< Convolution width */ - unsigned int _conv_height; /**< Convolution height */ - unsigned int _ofm; /**< Output feature maps */ - Tensor _weights; /**< Weights tensor */ - Tensor _biases; /**< Biases tensor */ - const PadStrideInfo &_conv_info; /**< Convolution layer information */ - const WeightsInfo &_weights_info; /**< Convolution layer weights information */ + /** Instantiates a non-grouped convolution + * + * @param[in] conv_method_hint Hint that specifies which convolution layer method to use + * + * @return Convolution function + */ + std::unique_ptr<arm_compute::IFunction> instantiate_convolution(ConvolutionMethodHint conv_method_hint); + /** Instantiates a grouped convolution + * + * @param[in] conv_method_hint Hint that specifies which convolution layer method to use + * + * @return Grouped Convolution function + */ + std::unique_ptr<arm_compute::IFunction> instantiate_grouped_convolution(ConvolutionMethodHint conv_method_hint); + +private: + unsigned int _conv_width; /**< Convolution width */ + unsigned int _conv_height; /**< Convolution height */ + unsigned int _ofm; /**< Output feature maps */ + Tensor _weights; /**< Weights tensor */ + Tensor _biases; /**< Biases tensor */ + const PadStrideInfo _conv_info; /**< Convolution layer information */ + unsigned int _num_groups; /**< Number of groups */ + const WeightsInfo _weights_info; /**< Convolution layer weights information */ + + std::unique_ptr<SubTensor[]> _is; /**< Input tensor sub-tensors used for grouped convolution */ + std::unique_ptr<SubTensor[]> _os; /**< Output tensor sub-tensors used for grouped convolution */ + std::unique_ptr<SubTensor[]> _ws; /**< Weights tensor sub-tensors used for grouped convolution */ + std::unique_ptr<SubTensor[]> _bs; /**< Biases tensor sub-tensors used for grouped convolution */ }; } // namespace graph } // namespace arm_compute |