blob: 3d6777b9cd856968f84689d55ea519ed35247467 [file] [log] [blame]
Georgios Pinitas30271c72019-06-24 14:56:34 +01001/*
2 * Copyright (c) 2019 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
14 * all
15 * copies or substantial portions of the Software.
16 *
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
18 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
19 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
20 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
21 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
22 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
23 * SOFTWARE.
24 */
25
26#include "depthwise_quantized_dilated.hpp"
27#include "impl_dilated.hpp"
28
29namespace depthwise {
30
31template <unsigned int OutputTileRows, unsigned int OutputTileCols,
32 unsigned int KernelRows, unsigned int KernelCols,
33 unsigned int StrideRows, unsigned int StrideCols>
34QAsymm8DilatedDepthwiseConvolution<OutputTileRows, OutputTileCols, KernelRows,
35 KernelCols, StrideRows, StrideCols>::
36 QAsymm8DilatedDepthwiseConvolution(
37 int n_batches, int n_input_rows, int n_input_cols, int n_channels,
38 int dilation_factor, nck::ActivationFunction activation,
39 const qasymm8::QAsymm8Params &weight_quantisation,
40 const qasymm8::QAsymm8Params &input_quantisation,
41 const qasymm8::QAsymm8Params &output_quantisation,
42 unsigned int padding_top, unsigned int padding_left,
43 unsigned int padding_bottom, unsigned int padding_right)
44 : QAsymm8DilatedDepthwiseConvolution(
45 n_batches, n_input_rows, n_input_cols, n_channels, dilation_factor,
46 QAsymm8DilatedDepthwiseConvolution::get_output_size(
47 n_input_rows, padding_top, padding_bottom, dilation_factor),
48 QAsymm8DilatedDepthwiseConvolution::get_output_size(
49 n_input_cols, padding_left, padding_right, dilation_factor),
50 activation, weight_quantisation, input_quantisation,
51 output_quantisation, padding_top, padding_left, padding_bottom,
52 padding_right) {}
53
54template <unsigned int OutputTileRows, unsigned int OutputTileCols,
55 unsigned int KernelRows, unsigned int KernelCols,
56 unsigned int StrideRows, unsigned int StrideCols>
57QAsymm8DilatedDepthwiseConvolution<OutputTileRows, OutputTileCols, KernelRows,
58 KernelCols, StrideRows, StrideCols>::
59 QAsymm8DilatedDepthwiseConvolution(
60 int n_batches, int n_input_rows, int n_input_cols, int n_channels,
61 int dilation_factor, int n_output_rows, int n_output_cols,
62 nck::ActivationFunction activation,
63 const qasymm8::QAsymm8Params &weight_quantisation,
64 const qasymm8::QAsymm8Params &input_quantisation,
65 const qasymm8::QAsymm8Params &output_quantisation,
66 unsigned int padding_top, unsigned int padding_left,
67 unsigned int padding_bottom, unsigned int padding_right)
68 : QAsymm8DilatedDepthwiseConvolution(
69 n_batches, n_input_rows, n_input_cols, n_channels, dilation_factor,
70 n_output_rows, n_output_cols, activation, weight_quantisation,
71 input_quantisation, output_quantisation,
72 qasymm8::QAsymm8RescaleParams::make_rescale_params(
73 weight_quantisation, input_quantisation, output_quantisation),
74 padding_top, padding_left, padding_bottom, padding_right) {}
75
76template <unsigned int OutputTileRows, unsigned int OutputTileCols,
77 unsigned int KernelRows, unsigned int KernelCols,
78 unsigned int StrideRows, unsigned int StrideCols>
79QAsymm8DilatedDepthwiseConvolution<OutputTileRows, OutputTileCols, KernelRows,
80 KernelCols, StrideRows, StrideCols>::
81 QAsymm8DilatedDepthwiseConvolution(
82 int n_batches, int n_input_rows, int n_input_cols, int n_channels,
83 int dilation_factor, nck::ActivationFunction activation,
84 const qasymm8::QAsymm8Params &weight_quantisation,
85 const qasymm8::QAsymm8Params &input_quantisation,
86 const qasymm8::QAsymm8Params &output_quantisation,
87 const qasymm8::QAsymm8RescaleParams &rescale_parameters,
88 unsigned int padding_top, unsigned int padding_left,
89 unsigned int padding_bottom, unsigned int padding_right)
90 : QAsymm8DilatedDepthwiseConvolution(
91 n_batches, n_input_rows, n_input_cols, n_channels, dilation_factor,
92 QAsymm8DilatedDepthwiseConvolution::get_output_size(
93 n_input_rows, padding_top, padding_bottom, dilation_factor),
94 QAsymm8DilatedDepthwiseConvolution::get_output_size(
95 n_input_cols, padding_left, padding_right, dilation_factor),
96 activation, weight_quantisation, input_quantisation,
97 output_quantisation, rescale_parameters, padding_top, padding_left,
98 padding_bottom, padding_right) {}
99
100template <unsigned int OutputTileRows, unsigned int OutputTileCols,
101 unsigned int KernelRows, unsigned int KernelCols,
102 unsigned int StrideRows, unsigned int StrideCols>
103QAsymm8DilatedDepthwiseConvolution<OutputTileRows, OutputTileCols, KernelRows,
104 KernelCols, StrideRows, StrideCols>::
105 QAsymm8DilatedDepthwiseConvolution(
106 int n_batches, int n_input_rows, int n_input_cols, int n_channels,
107 int dilation_factor, int n_output_rows, int n_output_cols,
108 nck::ActivationFunction activation,
109 const qasymm8::QAsymm8Params &weight_quantisation,
110 const qasymm8::QAsymm8Params &input_quantisation,
111 const qasymm8::QAsymm8Params &output_quantisation,
112 const qasymm8::QAsymm8RescaleParams &rescale_parameters,
113 unsigned int padding_top, unsigned int padding_left,
114 unsigned int padding_bottom, unsigned int padding_right)
115 : DilatedDepthwiseConvolution<OutputTileRows, OutputTileCols, KernelRows,
116 KernelCols, StrideRows, StrideCols, uint8_t,
117 int32_t, uint8_t>(
118 n_batches, n_input_rows, n_input_cols, n_channels, dilation_factor,
119 n_output_rows, n_output_cols, activation, padding_top, padding_left,
120 padding_bottom, padding_right,
121 [weight_quantisation, input_quantisation, output_quantisation,
122 rescale_parameters](
123 const int n_batches, const int n_input_rows,
124 const int n_input_cols, const int n_channels,
125 const int n_output_rows, const int n_output_cols,
126 const nck::ActivationFunction activation,
127 const unsigned int padding_top, const unsigned int padding_left,
128 const unsigned int padding_bottom,
129 const unsigned int padding_right) -> IDepthwiseConvolution * {
130 return new QAsymm8DepthwiseConvolution<
131 OutputTileRows, OutputTileCols, KernelRows, KernelCols,
132 StrideRows, StrideCols>(
133 n_batches, n_input_rows, n_input_cols, n_channels,
134 n_output_rows, n_output_cols, activation, weight_quantisation,
135 input_quantisation, output_quantisation, rescale_parameters,
136 padding_top, padding_left, padding_bottom, padding_right);
137 }) {}
138
139} // namespace depthwise
140
141template class depthwise::QAsymm8DilatedDepthwiseConvolution<2, 2, 3, 3, 1, 1>;
142template class depthwise::QAsymm8DilatedDepthwiseConvolution<2, 2, 3, 3, 2, 2>;
Georgios Pinitas4c758512019-07-10 19:49:11 +0100143template class depthwise::QAsymm8DilatedDepthwiseConvolution<2, 2, 5, 5, 1, 1>;
144template class depthwise::QAsymm8DilatedDepthwiseConvolution<2, 2, 5, 5, 2, 2>;