From 60e98253f1e3df1723e7b8f4c996b544aa7c7205 Mon Sep 17 00:00:00 2001 From: Georgios Pinitas Date: Mon, 22 Oct 2018 16:17:20 +0100 Subject: COMPMID-1451: Fuse activation in DepthwiseConvolution. Change-Id: Id964d9068e18aaa13ab8adcbf7a9375b034ea6c3 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/154651 Tested-by: bsgcomp Reviewed-by: Gian Marco Iodice --- arm_compute/graph/backends/FunctionHelpers.h | 11 +++++++---- arm_compute/graph/nodes/DepthwiseConvolutionLayerNode.h | 14 ++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) (limited to 'arm_compute/graph') diff --git a/arm_compute/graph/backends/FunctionHelpers.h b/arm_compute/graph/backends/FunctionHelpers.h index a1cadcbf4c..1968ec3923 100644 --- a/arm_compute/graph/backends/FunctionHelpers.h +++ b/arm_compute/graph/backends/FunctionHelpers.h @@ -397,8 +397,10 @@ std::unique_ptr create_depthwise_convolution_layer(DepthwiseConvoluti biases->info()->set_data_type(DataType::S32); } - const PadStrideInfo conv_info = node.convolution_info(); - const DepthwiseConvolutionMethod dwc_algorithm = node.depthwise_convolution_method(); + const PadStrideInfo conv_info = node.convolution_info(); + const DepthwiseConvolutionMethod dwc_algorithm = node.depthwise_convolution_method(); + const unsigned int depth_multiplier = 1; + const ActivationLayerInfo fused_act = node.fused_activation(); // Create and configure function (we assume that functions have been validated before creation) std::unique_ptr func; @@ -407,13 +409,13 @@ std::unique_ptr create_depthwise_convolution_layer(DepthwiseConvoluti { std::tie(func, func_name) = create_named_function( std::string("DepthwiseConvolutionLayer3x3"), - input, weights, biases, output, conv_info); + input, weights, biases, output, conv_info, depth_multiplier, fused_act); } else { std::tie(func, func_name) = create_named_function( std::string("DepthwiseConvolutionLayer"), - input, weights, biases, output, conv_info); + input, weights, biases, output, conv_info, depth_multiplier, fused_act); } // Log info @@ -431,6 +433,7 @@ std::unique_ptr create_depthwise_convolution_layer(DepthwiseConvoluti << " Input shape: " << input->info()->tensor_shape() << " Weights shape: " << weights->info()->tensor_shape() << " Output shape: " << output->info()->tensor_shape() + << (fused_act.enabled() ? " " + to_string(fused_act.activation()) : "") << std::endl); return func; } diff --git a/arm_compute/graph/nodes/DepthwiseConvolutionLayerNode.h b/arm_compute/graph/nodes/DepthwiseConvolutionLayerNode.h index 1a173c5421..7fa44b798f 100644 --- a/arm_compute/graph/nodes/DepthwiseConvolutionLayerNode.h +++ b/arm_compute/graph/nodes/DepthwiseConvolutionLayerNode.h @@ -58,6 +58,16 @@ public: * @return Convolution information */ PadStrideInfo convolution_info() const; + /** Returns fused activation + * + * @return Fused activation + */ + ActivationLayerInfo fused_activation() const; + /** Sets fused activation + * + * @param[in] fused_activation Fused activation to set + */ + void set_fused_activation(ActivationLayerInfo fused_activation); /** Computes depthwise convolution output descriptor * * @param[in] input_descriptor Input descriptor @@ -76,9 +86,13 @@ public: TensorDescriptor configure_output(size_t idx) const override; void accept(INodeVisitor &v) override; +public: + static constexpr NodeType node_type = NodeType::DepthwiseConvolutionLayer; + private: PadStrideInfo _info; DepthwiseConvolutionMethod _method; + ActivationLayerInfo _fused_activation; }; } // namespace graph } // namespace arm_compute -- cgit v1.2.1