Compute Library
 21.02
GCDepthwiseConvolutionLayer.cpp
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2017-2020 Arm Limited.
3  *
4  * SPDX-License-Identifier: MIT
5  *
6  * Permission is hereby granted, free of charge, to any person obtaining a copy
7  * of this software and associated documentation files (the "Software"), to
8  * deal in the Software without restriction, including without limitation the
9  * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
10  * sell copies of the Software, and to permit persons to whom the Software is
11  * furnished to do so, subject to the following conditions:
12  *
13  * The above copyright notice and this permission notice shall be included in all
14  * copies or substantial portions of the Software.
15  *
16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
19  * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
21  * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
22  * SOFTWARE.
23  */
25 
29 
30 using namespace arm_compute;
31 
33  : _kernel(nullptr), _border_handler(), _shift_handler(), _activationlayer_function(), _is_activationlayer_enabled(false)
34 {
35 }
36 
38  unsigned int depth_multiplier, const ActivationLayerInfo &act_info, const Size2D &dilation)
39 {
40  ARM_COMPUTE_ERROR_ON(dilation.x() != 1 || dilation.y() != 1);
41  ARM_COMPUTE_UNUSED(dilation);
42  auto k = std::make_unique<GCDepthwiseConvolutionLayer3x3Kernel>();
43  k->configure(input, weights, biases, output, conv_info, depth_multiplier);
44  _kernel = std::move(k);
45 
46  // Configure border handler
47  _border_handler.configure(input, _kernel->border_size(), BorderMode::CONSTANT, PixelValue());
48 
49  _shift_handler.configure(input);
50 
51  //Configure Activation Layer
52  _is_activationlayer_enabled = act_info.enabled();
53 
54  if(_is_activationlayer_enabled)
55  {
56  _activationlayer_function.configure(output, nullptr, act_info);
57  }
58 }
59 
61 {
62  GCScheduler::get().dispatch(_shift_handler, false);
64  GCScheduler::get().dispatch(_border_handler, false);
66  GCScheduler::get().dispatch(*_kernel);
67 
68  // Run Activation Layer
69  if(_is_activationlayer_enabled)
70  {
71  _activationlayer_function.run();
72  }
73 }
Class describing the value of a pixel for any image format.
Definition: PixelValue.h:34
bool enabled() const
Check if initialised.
Definition: Types.h:1600
void dispatch(IGCKernel &kernel, bool flush=true)
Schedule the execution of the passed kernel if possible.
Definition: GCScheduler.cpp:77
void run() override final
Run the kernels contained in the function.
void memory_barrier()
Defines a barrier ordering memory transactions.
Definition: GCScheduler.cpp:86
#define ARM_COMPUTE_ERROR_ON(cond)
If the condition is true then an error message is printed and an exception thrown.
Definition: Error.h:466
Interface for GLES Compute tensor.
Definition: IGCTensor.h:35
size_t x() const
Semantic accessor for width as x.
Definition: Size2D.h:74
Activation Layer Information class.
Definition: Types.h:1550
Copyright (c) 2017-2021 Arm Limited.
static GCScheduler & get()
Access the scheduler singleton.
Definition: GCScheduler.cpp:70
#define ARM_COMPUTE_UNUSED(...)
To avoid unused variables warnings.
Definition: Error.h:152
void configure(const IGCTensor *tensor, BorderSize border_size, BorderMode border_mode, const PixelValue &constant_border_value=PixelValue())
Initialise the kernel&#39;s input, output and border mode.
Padding and stride information class.
Definition: Types.h:722
void run() override final
Run the kernels contained in the function.
size_t y() const
Semantic accessor for height as y.
Definition: Size2D.h:83
void configure(IGCTensor *input, IGCTensor *output, ActivationLayerInfo act_info)
Set the input and output tensor.
Class for specifying the size of an image or rectangle.
Definition: Size2D.h:34
void configure(IGCTensor *input, const IGCTensor *weights, const IGCTensor *biases, IGCTensor *output, const PadStrideInfo &conv_info, unsigned int depth_multiplier=1, const ActivationLayerInfo &act_info=ActivationLayerInfo(), const Size2D &dilation=Size2D(1U, 1U))
Initialize the function&#39;s source, destination, conv and border_size.
Interface to enqueue GLES kernels and get/set the GLES CommandQueue.
void configure(IGCTensor *input)
Set the input of the kernel.