1*c217d954SCole Faust /* 2*c217d954SCole Faust * Copyright (c) 2017-2021 Arm Limited. 3*c217d954SCole Faust * 4*c217d954SCole Faust * SPDX-License-Identifier: MIT 5*c217d954SCole Faust * 6*c217d954SCole Faust * Permission is hereby granted, free of charge, to any person obtaining a copy 7*c217d954SCole Faust * of this software and associated documentation files (the "Software"), to 8*c217d954SCole Faust * deal in the Software without restriction, including without limitation the 9*c217d954SCole Faust * rights to use, copy, modify, merge, publish, distribute, sublicense, and/or 10*c217d954SCole Faust * sell copies of the Software, and to permit persons to whom the Software is 11*c217d954SCole Faust * furnished to do so, subject to the following conditions: 12*c217d954SCole Faust * 13*c217d954SCole Faust * The above copyright notice and this permission notice shall be included in all 14*c217d954SCole Faust * copies or substantial portions of the Software. 15*c217d954SCole Faust * 16*c217d954SCole Faust * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17*c217d954SCole Faust * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18*c217d954SCole Faust * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19*c217d954SCole Faust * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20*c217d954SCole Faust * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21*c217d954SCole Faust * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22*c217d954SCole Faust * SOFTWARE. 23*c217d954SCole Faust */ 24*c217d954SCole Faust #ifndef ARM_COMPUTE_TEST_SMALL_CONVOLUTION_LAYER_DATASET 25*c217d954SCole Faust #define ARM_COMPUTE_TEST_SMALL_CONVOLUTION_LAYER_DATASET 26*c217d954SCole Faust 27*c217d954SCole Faust #include "tests/datasets/ConvolutionLayerDataset.h" 28*c217d954SCole Faust 29*c217d954SCole Faust #include "utils/TypePrinter.h" 30*c217d954SCole Faust 31*c217d954SCole Faust #include "arm_compute/core/TensorShape.h" 32*c217d954SCole Faust #include "arm_compute/core/Types.h" 33*c217d954SCole Faust 34*c217d954SCole Faust namespace arm_compute 35*c217d954SCole Faust { 36*c217d954SCole Faust namespace test 37*c217d954SCole Faust { 38*c217d954SCole Faust namespace datasets 39*c217d954SCole Faust { 40*c217d954SCole Faust class SmallWinogradConvolutionLayer3x3Dataset final : public ConvolutionLayerDataset 41*c217d954SCole Faust { 42*c217d954SCole Faust public: SmallWinogradConvolutionLayer3x3Dataset()43*c217d954SCole Faust SmallWinogradConvolutionLayer3x3Dataset() 44*c217d954SCole Faust { 45*c217d954SCole Faust // Channel size big enough to force multithreaded execution of the input transform 46*c217d954SCole Faust add_config(TensorShape(8U, 8U, 32U), TensorShape(3U, 3U, 32U, 1U), TensorShape(1U), TensorShape(6U, 6U, 1U), PadStrideInfo(1, 1, 0, 0)); 47*c217d954SCole Faust // Batch size 1 48*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(3U, 3U, 2U, 1U), TensorShape(1U), TensorShape(6U, 6U, 1U), PadStrideInfo(1, 1, 0, 0)); 49*c217d954SCole Faust // Batch size 4 50*c217d954SCole Faust add_config(TensorShape(23U, 27U, 5U, 4U), TensorShape(3U, 3U, 5U, 21U), TensorShape(21U), TensorShape(21U, 25U, 21U, 4U), PadStrideInfo(1, 1, 0, 0)); 51*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(3U, 3U, 2U, 1U), TensorShape(1U), TensorShape(8U, 8U, 1U), PadStrideInfo(1, 1, 1, 1)); 52*c217d954SCole Faust add_config(TensorShape(3U, 9U), TensorShape(3U, 3U), TensorShape(1), TensorShape(3U, 9U), PadStrideInfo(1, 1, 1, 1)); 53*c217d954SCole Faust } 54*c217d954SCole Faust }; 55*c217d954SCole Faust 56*c217d954SCole Faust class SmallWinogradConvolutionLayer3x1Dataset final : public ConvolutionLayerDataset 57*c217d954SCole Faust { 58*c217d954SCole Faust public: SmallWinogradConvolutionLayer3x1Dataset()59*c217d954SCole Faust SmallWinogradConvolutionLayer3x1Dataset() 60*c217d954SCole Faust { 61*c217d954SCole Faust // Channel size big enough to force multithreaded execution of the input transform 62*c217d954SCole Faust add_config(TensorShape(8U, 8U, 32U), TensorShape(3U, 1U, 32U, 1U), TensorShape(1U), TensorShape(6U, 8U, 1U), PadStrideInfo(1, 1, 0, 0)); 63*c217d954SCole Faust // Batch size 1 64*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(3U, 1U, 2U, 1U), TensorShape(1U), TensorShape(6U, 8U, 1U), PadStrideInfo(1, 1, 0, 0)); 65*c217d954SCole Faust // Batch size 4 66*c217d954SCole Faust add_config(TensorShape(23U, 27U, 5U, 4U), TensorShape(3U, 1U, 5U, 21U), TensorShape(21U), TensorShape(21U, 27U, 21U, 4U), PadStrideInfo(1, 1, 0, 0)); 67*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(3U, 1U, 2U, 1U), TensorShape(1U), TensorShape(8U, 8U, 1U), PadStrideInfo(1, 1, 1, 0)); 68*c217d954SCole Faust } 69*c217d954SCole Faust }; 70*c217d954SCole Faust 71*c217d954SCole Faust class SmallWinogradConvolutionLayer1x3Dataset final : public ConvolutionLayerDataset 72*c217d954SCole Faust { 73*c217d954SCole Faust public: SmallWinogradConvolutionLayer1x3Dataset()74*c217d954SCole Faust SmallWinogradConvolutionLayer1x3Dataset() 75*c217d954SCole Faust { 76*c217d954SCole Faust // Channel size big enough to force multithreaded execution of the input transform 77*c217d954SCole Faust add_config(TensorShape(8U, 8U, 32U), TensorShape(1U, 3U, 32U, 1U), TensorShape(1U), TensorShape(8U, 6U, 1U), PadStrideInfo(1, 1, 0, 0)); 78*c217d954SCole Faust // Batch size 1 79*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(1U, 3U, 2U, 1U), TensorShape(1U), TensorShape(8U, 6U, 1U), PadStrideInfo(1, 1, 0, 0)); 80*c217d954SCole Faust // Batch size 4 81*c217d954SCole Faust add_config(TensorShape(23U, 27U, 5U, 4U), TensorShape(1U, 3U, 5U, 21U), TensorShape(21U), TensorShape(23U, 25U, 21U, 4U), PadStrideInfo(1, 1, 0, 0)); 82*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(1U, 3U, 2U, 1U), TensorShape(1U), TensorShape(8U, 8U, 1U), PadStrideInfo(1, 1, 0, 1)); 83*c217d954SCole Faust } 84*c217d954SCole Faust }; 85*c217d954SCole Faust 86*c217d954SCole Faust class SmallWinogradConvolutionLayer5x5Dataset final : public ConvolutionLayerDataset 87*c217d954SCole Faust { 88*c217d954SCole Faust public: SmallWinogradConvolutionLayer5x5Dataset()89*c217d954SCole Faust SmallWinogradConvolutionLayer5x5Dataset() 90*c217d954SCole Faust { 91*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(5U, 5U, 2U, 1U), TensorShape(1U), TensorShape(4U, 4U, 1U), PadStrideInfo(1, 1, 0, 0)); 92*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(5U, 5U, 2U), TensorShape(1U), TensorShape(8U, 8U, 1U), PadStrideInfo(1, 1, 2, 2)); 93*c217d954SCole Faust } 94*c217d954SCole Faust }; 95*c217d954SCole Faust 96*c217d954SCole Faust class SmallWinogradConvolutionLayer5x1Dataset final : public ConvolutionLayerDataset 97*c217d954SCole Faust { 98*c217d954SCole Faust public: SmallWinogradConvolutionLayer5x1Dataset()99*c217d954SCole Faust SmallWinogradConvolutionLayer5x1Dataset() 100*c217d954SCole Faust { 101*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(5U, 1U, 2U, 1U), TensorShape(1U), TensorShape(4U, 8U, 1U), PadStrideInfo(1, 1, 0, 0)); 102*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(5U, 1U, 2U), TensorShape(1U), TensorShape(8U, 8U, 1U), PadStrideInfo(1, 1, 2, 0)); 103*c217d954SCole Faust } 104*c217d954SCole Faust }; 105*c217d954SCole Faust 106*c217d954SCole Faust class SmallWinogradConvolutionLayer1x5Dataset final : public ConvolutionLayerDataset 107*c217d954SCole Faust { 108*c217d954SCole Faust public: SmallWinogradConvolutionLayer1x5Dataset()109*c217d954SCole Faust SmallWinogradConvolutionLayer1x5Dataset() 110*c217d954SCole Faust { 111*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(1U, 5U, 2U, 1U), TensorShape(1U), TensorShape(8U, 4U, 1U), PadStrideInfo(1, 1, 0, 0)); 112*c217d954SCole Faust add_config(TensorShape(8U, 8U, 2U), TensorShape(1U, 5U, 2U), TensorShape(1U), TensorShape(8U, 8U, 1U), PadStrideInfo(1, 1, 0, 2)); 113*c217d954SCole Faust } 114*c217d954SCole Faust }; 115*c217d954SCole Faust 116*c217d954SCole Faust class SmallWinogradConvolutionLayer7x1Dataset final : public ConvolutionLayerDataset 117*c217d954SCole Faust { 118*c217d954SCole Faust public: SmallWinogradConvolutionLayer7x1Dataset()119*c217d954SCole Faust SmallWinogradConvolutionLayer7x1Dataset() 120*c217d954SCole Faust { 121*c217d954SCole Faust add_config(TensorShape(14U, 14U, 2U), TensorShape(7U, 1U, 2U, 1U), TensorShape(1U), TensorShape(8U, 14U, 1U), PadStrideInfo(1, 1, 0, 0)); 122*c217d954SCole Faust add_config(TensorShape(14U, 14U, 2U), TensorShape(7U, 1U, 2U), TensorShape(1U), TensorShape(14U, 14U, 1U), PadStrideInfo(1, 1, 3, 0)); 123*c217d954SCole Faust } 124*c217d954SCole Faust }; 125*c217d954SCole Faust 126*c217d954SCole Faust class SmallWinogradConvolutionLayer1x7Dataset final : public ConvolutionLayerDataset 127*c217d954SCole Faust { 128*c217d954SCole Faust public: SmallWinogradConvolutionLayer1x7Dataset()129*c217d954SCole Faust SmallWinogradConvolutionLayer1x7Dataset() 130*c217d954SCole Faust { 131*c217d954SCole Faust add_config(TensorShape(14U, 14U, 2U), TensorShape(1U, 7U, 2U, 1U), TensorShape(1U), TensorShape(14U, 8U, 1U), PadStrideInfo(1, 1, 0, 0)); 132*c217d954SCole Faust add_config(TensorShape(14U, 14U, 2U), TensorShape(1U, 7U, 2U), TensorShape(1U), TensorShape(14U, 14U, 1U), PadStrideInfo(1, 1, 0, 3)); 133*c217d954SCole Faust } 134*c217d954SCole Faust }; 135*c217d954SCole Faust 136*c217d954SCole Faust class SmallFFTConvolutionLayerDataset final : public ConvolutionLayerDataset 137*c217d954SCole Faust { 138*c217d954SCole Faust public: SmallFFTConvolutionLayerDataset()139*c217d954SCole Faust SmallFFTConvolutionLayerDataset() 140*c217d954SCole Faust { 141*c217d954SCole Faust add_config(TensorShape(8U, 7U, 3U), TensorShape(3U, 3U, 3U, 2U), TensorShape(2U), TensorShape(8U, 7U, 2U), PadStrideInfo(1, 1, 1, 1)); 142*c217d954SCole Faust add_config(TensorShape(64U, 32U, 5U), TensorShape(5U, 5U, 5U, 10U), TensorShape(10U), TensorShape(64U, 32U, 10U), PadStrideInfo(1, 1, 2, 2)); 143*c217d954SCole Faust add_config(TensorShape(192U, 128U, 8U), TensorShape(9U, 9U, 8U, 3U), TensorShape(3U), TensorShape(192U, 128U, 3U), PadStrideInfo(1, 1, 4, 4)); 144*c217d954SCole Faust } 145*c217d954SCole Faust }; 146*c217d954SCole Faust 147*c217d954SCole Faust class SmallConvolutionLayerDataset final : public ConvolutionLayerDataset 148*c217d954SCole Faust { 149*c217d954SCole Faust public: SmallConvolutionLayerDataset()150*c217d954SCole Faust SmallConvolutionLayerDataset() 151*c217d954SCole Faust { 152*c217d954SCole Faust // 1D Kernel 153*c217d954SCole Faust add_config(TensorShape(1U, 5U, 2U), TensorShape(1U, 3U, 2U, 3U), TensorShape(3U), TensorShape(1U, 7U, 3U), PadStrideInfo(1, 1, 0, 0, 2, 2, DimensionRoundingType::FLOOR)); 154*c217d954SCole Faust 155*c217d954SCole Faust // 1x1 Kernel with Stride (1, 1) and NHWC data layout in order to test skipping Im2Col 156*c217d954SCole Faust add_config(TensorShape(1U, 5U, 2U), TensorShape(1U, 1U, 2U, 3U), TensorShape(3U), TensorShape(1U, 5U, 3U), PadStrideInfo(1, 1, 0, 0)); 157*c217d954SCole Faust 158*c217d954SCole Faust // Batch size 1 159*c217d954SCole Faust add_config(TensorShape(23U, 27U, 5U), TensorShape(3U, 3U, 5U, 2U), TensorShape(2U), TensorShape(11U, 25U, 2U), PadStrideInfo(2, 1, 0, 0)); 160*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U), TensorShape(5U, 5U, 7U, 3U), TensorShape(3U), TensorShape(11U, 12U, 3U), PadStrideInfo(3, 2, 1, 0)); 161*c217d954SCole Faust add_config(TensorShape(17U, 31U, 2U), TensorShape(5U, 5U, 2U, 4U), TensorShape(4U), TensorShape(15U, 15U, 4U), PadStrideInfo(1, 2, 1, 1)); 162*c217d954SCole Faust add_config(TensorShape(3U, 3U, 1U), TensorShape(2U, 2U, 1U, 5U), TensorShape(5U), TensorShape(2U, 2U, 5U), PadStrideInfo(1, 1, 0, 0)); 163*c217d954SCole Faust 164*c217d954SCole Faust // Batch size different than one 165*c217d954SCole Faust add_config(TensorShape(23U, 27U, 5U, 4U), TensorShape(3U, 3U, 5U, 21U), TensorShape(21U), TensorShape(11U, 25U, 21U, 4U), PadStrideInfo(2, 1, 0, 0)); 166*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U, 4U), TensorShape(5U, 5U, 7U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U, 4U), PadStrideInfo(3, 2, 1, 0)); 167*c217d954SCole Faust add_config(TensorShape(17U, 31U, 2U, 4U), TensorShape(5U, 5U, 2U, 19U), TensorShape(19U), TensorShape(15U, 15U, 19U, 4U), PadStrideInfo(1, 2, 1, 1)); 168*c217d954SCole Faust 169*c217d954SCole Faust // FC convolution 170*c217d954SCole Faust add_config(TensorShape(1U, 1U, 1024U), TensorShape(1U, 1U, 1024U, 1001U), TensorShape(1001U), TensorShape(1U, 1U, 1001U), PadStrideInfo(1, 1, 0, 0)); 171*c217d954SCole Faust 172*c217d954SCole Faust // Asymmetric padding 173*c217d954SCole Faust add_config(TensorShape(33U, 27U, 3U), TensorShape(5U, 7U, 3U, 4U), TensorShape(4U), TensorShape(11U, 12U, 4U), PadStrideInfo(3, 2, 1, 1, 2, 0, DimensionRoundingType::FLOOR)); 174*c217d954SCole Faust add_config(TensorShape(33U, 27U, 3U), TensorShape(5U, 7U, 3U, 4U), TensorShape(4U), TensorShape(11U, 12U, 4U), PadStrideInfo(3, 2, 1, 1, 0, 2, DimensionRoundingType::FLOOR)); 175*c217d954SCole Faust add_config(TensorShape(33U, 27U, 3U), TensorShape(5U, 7U, 3U, 4U), TensorShape(4U), TensorShape(11U, 12U, 4U), PadStrideInfo(3, 2, 2, 1, 2, 0, DimensionRoundingType::FLOOR)); 176*c217d954SCole Faust add_config(TensorShape(33U, 27U, 3U), TensorShape(5U, 7U, 3U, 4U), TensorShape(4U), TensorShape(11U, 12U, 4U), PadStrideInfo(3, 2, 1, 3, 0, 2, DimensionRoundingType::FLOOR)); 177*c217d954SCole Faust add_config(TensorShape(33U, 27U, 3U), TensorShape(5U, 7U, 3U, 4U), TensorShape(4U), TensorShape(10U, 11U, 4U), PadStrideInfo(3, 2, 1, 0, 1, 0, DimensionRoundingType::FLOOR)); 178*c217d954SCole Faust add_config(TensorShape(33U, 27U, 3U), TensorShape(5U, 7U, 3U, 4U), TensorShape(4U), TensorShape(10U, 11U, 4U), PadStrideInfo(3, 2, 0, 1, 0, 1, DimensionRoundingType::FLOOR)); 179*c217d954SCole Faust 180*c217d954SCole Faust add_config(TensorShape(5U, 4U, 3U, 2U), TensorShape(4U, 4U, 3U, 1U), TensorShape(1U), TensorShape(2U, 1U, 1U, 2U), PadStrideInfo(1, 1, 0, 0, 0, 0, DimensionRoundingType::FLOOR)); 181*c217d954SCole Faust } 182*c217d954SCole Faust }; 183*c217d954SCole Faust 184*c217d954SCole Faust class SmallConvolutionLayerPrePaddingDataset final : public ConvolutionLayerDataset 185*c217d954SCole Faust { 186*c217d954SCole Faust public: SmallConvolutionLayerPrePaddingDataset()187*c217d954SCole Faust SmallConvolutionLayerPrePaddingDataset() 188*c217d954SCole Faust { 189*c217d954SCole Faust // output shape is calculated by accounting pre-padding layer as well -- all the data is in nchw 190*c217d954SCole Faust add_config(TensorShape(17U, 31U, 2U), TensorShape(5U, 5U, 2U, 19U), TensorShape(19U), TensorShape(17U, 16U, 19U), PadStrideInfo(1, 2, 1, 1)); 191*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U), TensorShape(5U, 5U, 7U, 16U), TensorShape(16U), TensorShape(12U, 13U, 16U), PadStrideInfo(3, 2, 2, 0)); 192*c217d954SCole Faust } 193*c217d954SCole Faust }; 194*c217d954SCole Faust 195*c217d954SCole Faust class SmallConvolutionLayerReducedDataset final : public ConvolutionLayerDataset 196*c217d954SCole Faust { 197*c217d954SCole Faust public: SmallConvolutionLayerReducedDataset()198*c217d954SCole Faust SmallConvolutionLayerReducedDataset() 199*c217d954SCole Faust { 200*c217d954SCole Faust // Batch size 1 201*c217d954SCole Faust add_config(TensorShape(23U, 27U, 5U), TensorShape(3U, 3U, 5U, 21U), TensorShape(21U), TensorShape(11U, 25U, 21U), PadStrideInfo(2, 1, 0, 0)); 202*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U), TensorShape(5U, 5U, 7U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U), PadStrideInfo(3, 2, 1, 0)); 203*c217d954SCole Faust add_config(TensorShape(17U, 31U, 2U), TensorShape(5U, 5U, 2U, 19U), TensorShape(19U), TensorShape(15U, 15U, 19U), PadStrideInfo(1, 2, 1, 1)); 204*c217d954SCole Faust 205*c217d954SCole Faust // Asymmetric padding 206*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U, 5U), TensorShape(5U, 7U, 7U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U, 5U), PadStrideInfo(3, 2, 1, 1, 2, 0, DimensionRoundingType::FLOOR)); 207*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U, 5U), TensorShape(5U, 7U, 7U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U, 5U), PadStrideInfo(3, 2, 1, 1, 0, 2, DimensionRoundingType::FLOOR)); 208*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U, 5U), TensorShape(5U, 7U, 7U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U, 5U), PadStrideInfo(3, 2, 2, 1, 2, 0, DimensionRoundingType::FLOOR)); 209*c217d954SCole Faust } 210*c217d954SCole Faust }; 211*c217d954SCole Faust 212*c217d954SCole Faust class SmallGroupedConvolutionLayerDataset final : public ConvolutionLayerDataset 213*c217d954SCole Faust { 214*c217d954SCole Faust public: SmallGroupedConvolutionLayerDataset()215*c217d954SCole Faust SmallGroupedConvolutionLayerDataset() 216*c217d954SCole Faust { 217*c217d954SCole Faust // Batch size 1 218*c217d954SCole Faust // Number of groups = 2 219*c217d954SCole Faust add_config(TensorShape(23U, 27U, 8U), TensorShape(1U, 1U, 4U, 24U), TensorShape(24U), TensorShape(12U, 27U, 24U), PadStrideInfo(2, 1, 0, 0)); 220*c217d954SCole Faust add_config(TensorShape(33U, 27U, 12U), TensorShape(5U, 5U, 6U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U), PadStrideInfo(3, 2, 1, 0)); 221*c217d954SCole Faust // Number of groups = 4 222*c217d954SCole Faust add_config(TensorShape(23U, 27U, 8U), TensorShape(1U, 1U, 2U, 24U), TensorShape(24U), TensorShape(12U, 27U, 24U), PadStrideInfo(2, 1, 0, 0)); 223*c217d954SCole Faust add_config(TensorShape(33U, 27U, 12U), TensorShape(5U, 5U, 4U, 15U), TensorShape(15U), TensorShape(11U, 12U, 15U), PadStrideInfo(3, 2, 1, 0)); 224*c217d954SCole Faust 225*c217d954SCole Faust // Batch size 4 226*c217d954SCole Faust // Number of groups = 2 227*c217d954SCole Faust add_config(TensorShape(23U, 27U, 8U, 4U), TensorShape(1U, 1U, 4U, 24U), TensorShape(24U), TensorShape(12U, 27U, 24U, 4U), PadStrideInfo(2, 1, 0, 0)); 228*c217d954SCole Faust add_config(TensorShape(33U, 27U, 12U, 4U), TensorShape(5U, 5U, 6U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U, 4U), PadStrideInfo(3, 2, 1, 0)); 229*c217d954SCole Faust // Number of groups = 4 230*c217d954SCole Faust add_config(TensorShape(23U, 27U, 8U, 4U), TensorShape(1U, 1U, 2U, 24U), TensorShape(24U), TensorShape(12U, 27U, 24U, 4U), PadStrideInfo(2, 1, 0, 0)); 231*c217d954SCole Faust add_config(TensorShape(33U, 27U, 12U, 4U), TensorShape(5U, 5U, 4U, 15U), TensorShape(15U), TensorShape(11U, 12U, 15U, 4U), PadStrideInfo(3, 2, 1, 0)); 232*c217d954SCole Faust 233*c217d954SCole Faust // Arbitrary batch size 234*c217d954SCole Faust add_config(TensorShape(23U, 27U, 8U, 5U), TensorShape(1U, 1U, 4U, 24U), TensorShape(24U), TensorShape(12U, 27U, 24U, 5U), PadStrideInfo(2, 1, 0, 0)); 235*c217d954SCole Faust add_config(TensorShape(33U, 27U, 12U, 3U), TensorShape(5U, 5U, 6U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U, 3U), PadStrideInfo(3, 2, 1, 0)); 236*c217d954SCole Faust // Number of groups = 4 237*c217d954SCole Faust add_config(TensorShape(23U, 27U, 8U, 2U), TensorShape(1U, 1U, 2U, 24U), TensorShape(24U), TensorShape(12U, 27U, 24U, 2U), PadStrideInfo(2, 1, 0, 0)); 238*c217d954SCole Faust add_config(TensorShape(33U, 27U, 12U, 5U), TensorShape(5U, 5U, 4U, 15U), TensorShape(15U), TensorShape(11U, 12U, 15U, 5U), PadStrideInfo(3, 2, 1, 0)); 239*c217d954SCole Faust 240*c217d954SCole Faust // Asymmetric padding 241*c217d954SCole Faust add_config(TensorShape(33U, 27U, 8U, 5U), TensorShape(5U, 7U, 2U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U, 5U), PadStrideInfo(3, 2, 1, 1, 2, 0, DimensionRoundingType::FLOOR)); 242*c217d954SCole Faust add_config(TensorShape(33U, 27U, 8U, 5U), TensorShape(5U, 7U, 4U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U, 5U), PadStrideInfo(3, 2, 1, 1, 0, 2, DimensionRoundingType::FLOOR)); 243*c217d954SCole Faust add_config(TensorShape(33U, 27U, 6U, 5U), TensorShape(5U, 7U, 3U, 16U), TensorShape(16U), TensorShape(11U, 12U, 16U, 5U), PadStrideInfo(3, 2, 2, 1, 2, 0, DimensionRoundingType::FLOOR)); 244*c217d954SCole Faust } 245*c217d954SCole Faust }; 246*c217d954SCole Faust } // namespace datasets 247*c217d954SCole Faust } // namespace test 248*c217d954SCole Faust } // namespace arm_compute 249*c217d954SCole Faust #endif /* ARM_COMPUTE_TEST_SMALL_CONVOLUTION_LAYER_DATASET */ 250