1*c217d954SCole Faust /* 2*c217d954SCole Faust * Copyright (c) 2019-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_DILATED_CONVOLUTION_LAYER_DATASET 25*c217d954SCole Faust #define ARM_COMPUTE_TEST_DILATED_CONVOLUTION_LAYER_DATASET 26*c217d954SCole Faust 27*c217d954SCole Faust #include "utils/TypePrinter.h" 28*c217d954SCole Faust 29*c217d954SCole Faust #include "arm_compute/core/TensorShape.h" 30*c217d954SCole Faust #include "arm_compute/core/Types.h" 31*c217d954SCole Faust #include "tests/datasets/DepthwiseConvolutionLayerDataset.h" 32*c217d954SCole Faust 33*c217d954SCole Faust namespace arm_compute 34*c217d954SCole Faust { 35*c217d954SCole Faust namespace test 36*c217d954SCole Faust { 37*c217d954SCole Faust namespace datasets 38*c217d954SCole Faust { 39*c217d954SCole Faust /** Dataset containing small, generic depthwise convolution shapes with dilation. */ 40*c217d954SCole Faust class SmallDepthwiseDilatedConvolutionLayerDataset final : public DepthwiseConvolutionLayerDataset 41*c217d954SCole Faust { 42*c217d954SCole Faust public: SmallDepthwiseDilatedConvolutionLayerDataset()43*c217d954SCole Faust SmallDepthwiseDilatedConvolutionLayerDataset() 44*c217d954SCole Faust { 45*c217d954SCole Faust // Different strides and dilations 46*c217d954SCole Faust add_config(TensorShape(7U, 7U, 1U), Size2D(3U, 2U), PadStrideInfo(1, 1, 0, 0), Size2D(2U, 2U)); 47*c217d954SCole Faust add_config(TensorShape(7U, 7U, 1U), Size2D(3U, 2U), PadStrideInfo(1, 2, 0, 0), Size2D(2U, 1U)); 48*c217d954SCole Faust add_config(TensorShape(7U, 7U, 1U), Size2D(3U, 2U), PadStrideInfo(1, 1, 0, 0), Size2D(2U, 1U)); 49*c217d954SCole Faust add_config(TensorShape(7U, 7U, 1U), Size2D(3U, 2U), PadStrideInfo(2, 1, 0, 0), Size2D(2U, 2U)); 50*c217d954SCole Faust add_config(TensorShape(7U, 7U, 1U), Size2D(3U, 2U), PadStrideInfo(2, 2, 0, 0), Size2D(1U, 2U)); 51*c217d954SCole Faust 52*c217d954SCole Faust add_config(TensorShape(7U, 8U, 1U), Size2D(2U, 3U), PadStrideInfo(1, 2, 0, 0), Size2D(2U, 2U)); 53*c217d954SCole Faust add_config(TensorShape(23U, 27U, 5U), Size2D(3U, 5U), PadStrideInfo(2, 1, 0, 0), Size2D(2U, 1U)); 54*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U), Size2D(7U, 3U), PadStrideInfo(3, 2, 1, 0), Size2D(1U, 2U)); 55*c217d954SCole Faust // Asymmetric padding 56*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U), Size2D(5U, 7U), PadStrideInfo(3, 2, 1, 1, 2, 0, DimensionRoundingType::FLOOR), Size2D(2U, 2U)); 57*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U), Size2D(5U, 7U), PadStrideInfo(3, 2, 1, 1, 0, 2, DimensionRoundingType::FLOOR), Size2D(2U, 2U)); 58*c217d954SCole Faust // Dilation and padding 2 59*c217d954SCole Faust add_config(TensorShape(33U, 33U, 3U), Size2D(3U, 3U), PadStrideInfo(1, 1, 2, 2, 2, 2, DimensionRoundingType::FLOOR), Size2D(2U, 2U)); 60*c217d954SCole Faust // Dilation and padding 4 61*c217d954SCole Faust add_config(TensorShape(33U, 33U, 3U), Size2D(3U, 3U), PadStrideInfo(1, 1, 4, 4, 4, 4, DimensionRoundingType::FLOOR), Size2D(4U, 4U)); 62*c217d954SCole Faust } 63*c217d954SCole Faust }; 64*c217d954SCole Faust 65*c217d954SCole Faust /** Dataset containing small, 3x3 depthwise convolution shapes with dilation. */ 66*c217d954SCole Faust class SmallDepthwiseDilatedConvolutionLayerDataset3x3 final : public DepthwiseConvolutionLayerDataset 67*c217d954SCole Faust { 68*c217d954SCole Faust public: SmallDepthwiseDilatedConvolutionLayerDataset3x3()69*c217d954SCole Faust SmallDepthwiseDilatedConvolutionLayerDataset3x3() 70*c217d954SCole Faust { 71*c217d954SCole Faust add_config(TensorShape(1U, 1U, 1U), Size2D(3U, 3U), PadStrideInfo(1, 1, 2, 2), Size2D(2U, 2U)); 72*c217d954SCole Faust add_config(TensorShape(7U, 7U, 1U), Size2D(3U, 3U), PadStrideInfo(1, 1, 2, 0), Size2D(2U, 2U)); 73*c217d954SCole Faust add_config(TensorShape(16U, 7U, 1U), Size2D(3U, 3U), PadStrideInfo(1, 1, 0, 1), Size2D(2U, 2U)); 74*c217d954SCole Faust 75*c217d954SCole Faust // Different strides and dilations 76*c217d954SCole Faust add_config(TensorShape(7U, 7U, 1U), Size2D(3U, 3U), PadStrideInfo(1, 1, 0, 0), Size2D(2U, 2U)); 77*c217d954SCole Faust add_config(TensorShape(7U, 7U, 1U), Size2D(3U, 3U), PadStrideInfo(1, 2, 0, 0), Size2D(2U, 1U)); 78*c217d954SCole Faust add_config(TensorShape(7U, 7U, 1U), Size2D(3U, 3U), PadStrideInfo(2, 1, 0, 0), Size2D(2U, 2U)); 79*c217d954SCole Faust add_config(TensorShape(7U, 7U, 1U), Size2D(3U, 3U), PadStrideInfo(2, 2, 0, 0), Size2D(1U, 2U)); 80*c217d954SCole Faust 81*c217d954SCole Faust add_config(TensorShape(11U, 11U, 1U), Size2D(3U, 3U), PadStrideInfo(3, 3, 0, 0), Size2D(2U, 2U)); 82*c217d954SCole Faust add_config(TensorShape(7U, 7U, 3U, 2U), Size2D(3U, 3U), PadStrideInfo(1, 1, 0, 0), Size2D(2U, 2U)); 83*c217d954SCole Faust 84*c217d954SCole Faust add_config(TensorShape(21U, 31U, 9U, 4U), Size2D(3U, 3U), PadStrideInfo(1, 1, 1, 0), Size2D(1U, 1U)); 85*c217d954SCole Faust 86*c217d954SCole Faust add_config(TensorShape(21U, 31U, 9U, 4U), Size2D(3U, 3U), PadStrideInfo(1, 1, 1, 0), Size2D(2U, 2U)); 87*c217d954SCole Faust // Asymmetric padding 88*c217d954SCole Faust add_config(TensorShape(33U, 27U, 11U), Size2D(3U, 3U), PadStrideInfo(2, 2, 0, 1, 0, 1, DimensionRoundingType::FLOOR), Size2D(2U, 2U)); 89*c217d954SCole Faust } 90*c217d954SCole Faust }; 91*c217d954SCole Faust 92*c217d954SCole Faust /** Dataset containing large, generic depthwise convolution shapes with dilation. */ 93*c217d954SCole Faust class LargeDepthwiseDilatedConvolutionLayerDataset final : public DepthwiseConvolutionLayerDataset 94*c217d954SCole Faust { 95*c217d954SCole Faust public: LargeDepthwiseDilatedConvolutionLayerDataset()96*c217d954SCole Faust LargeDepthwiseDilatedConvolutionLayerDataset() 97*c217d954SCole Faust { 98*c217d954SCole Faust add_config(TensorShape(33U, 27U, 11U), Size2D(3U, 3U), PadStrideInfo(1, 2, 0, 1), Size2D(2U, 1U)); 99*c217d954SCole Faust add_config(TensorShape(17U, 31U, 2U), Size2D(5U, 9U), PadStrideInfo(1, 2, 1, 1), Size2D(1U, 2U)); 100*c217d954SCole Faust add_config(TensorShape(23U, 27U, 5U), Size2D(11U, 3U), PadStrideInfo(1, 2, 0, 0), Size2D(1U, 3U)); 101*c217d954SCole Faust add_config(TensorShape(17U, 31U, 2U, 3U), Size2D(5U, 9U), PadStrideInfo(1, 2, 1, 1), Size2D(2U, 2U)); 102*c217d954SCole Faust add_config(TensorShape(233U, 277U, 55U), Size2D(3U, 3U), PadStrideInfo(2, 1, 0, 0), Size2D(2U, 2U)); 103*c217d954SCole Faust add_config(TensorShape(333U, 277U, 77U), Size2D(3U, 3U), PadStrideInfo(3, 2, 1, 0), Size2D(3U, 2U)); 104*c217d954SCole Faust add_config(TensorShape(177U, 311U, 22U), Size2D(3U, 3U), PadStrideInfo(1, 2, 1, 1), Size2D(2U, 2U)); 105*c217d954SCole Faust add_config(TensorShape(233U, 277U, 55U), Size2D(3U, 3U), PadStrideInfo(1, 2, 0, 0), Size2D(5U, 2U)); 106*c217d954SCole Faust add_config(TensorShape(333U, 277U, 77U), Size2D(3U, 3U), PadStrideInfo(2, 3, 0, 1), Size2D(2U, 2U)); 107*c217d954SCole Faust add_config(TensorShape(177U, 311U, 22U), Size2D(3U, 3U), PadStrideInfo(2, 1, 1, 1), Size2D(2U, 5U)); 108*c217d954SCole Faust // Asymmetric padding 109*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U), Size2D(5U, 7U), PadStrideInfo(3, 2, 2, 1, 2, 0, DimensionRoundingType::FLOOR), Size2D(3U, 2U)); 110*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U), Size2D(5U, 7U), PadStrideInfo(3, 2, 1, 3, 0, 2, DimensionRoundingType::FLOOR), Size2D(4U, 4U)); 111*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U), Size2D(5U, 7U), PadStrideInfo(3, 2, 1, 0, 1, 0, DimensionRoundingType::FLOOR), Size2D(2U, 2U)); 112*c217d954SCole Faust add_config(TensorShape(33U, 27U, 7U), Size2D(5U, 7U), PadStrideInfo(3, 2, 0, 1, 0, 1, DimensionRoundingType::FLOOR), Size2D(3U, 3U)); 113*c217d954SCole Faust } 114*c217d954SCole Faust }; 115*c217d954SCole Faust 116*c217d954SCole Faust /** Dataset containing large, 3x3 depthwise convolution shapes with dilation. */ 117*c217d954SCole Faust class LargeDepthwiseDilatedConvolutionLayerDataset3x3 final : public DepthwiseConvolutionLayerDataset 118*c217d954SCole Faust { 119*c217d954SCole Faust public: LargeDepthwiseDilatedConvolutionLayerDataset3x3()120*c217d954SCole Faust LargeDepthwiseDilatedConvolutionLayerDataset3x3() 121*c217d954SCole Faust { 122*c217d954SCole Faust add_config(TensorShape(32U, 27U, 11U, 3U), Size2D(3U, 3U), PadStrideInfo(1, 1, 0, 1), Size2D(2U, 1U)); 123*c217d954SCole Faust add_config(TensorShape(33U, 27U, 11U, 3U), Size2D(3U, 3U), PadStrideInfo(1, 1, 1, 1), Size2D(2U, 2U)); 124*c217d954SCole Faust add_config(TensorShape(21U, 31U, 9U, 4U), Size2D(3U, 3U), PadStrideInfo(1, 2, 1, 0), Size2D(2U, 2U)); 125*c217d954SCole Faust add_config(TensorShape(33U, 27U, 11U, 3U), Size2D(3U, 3U), PadStrideInfo(1, 2, 0, 1), Size2D(2U, 1U)); 126*c217d954SCole Faust add_config(TensorShape(33U, 27U, 11U, 3U), Size2D(3U, 3U), PadStrideInfo(1, 2, 1, 1), Size2D(2U, 3U)); 127*c217d954SCole Faust add_config(TensorShape(21U, 31U, 9U, 4U), Size2D(3U, 3U), PadStrideInfo(2, 1, 1, 0), Size2D(2U, 1U)); 128*c217d954SCole Faust add_config(TensorShape(33U, 27U, 11U, 3U), Size2D(3U, 3U), PadStrideInfo(2, 1, 0, 1), Size2D(3U, 3U)); 129*c217d954SCole Faust add_config(TensorShape(33U, 27U, 11U, 3U), Size2D(3U, 3U), PadStrideInfo(2, 1, 1, 1), Size2D(2U, 2U)); 130*c217d954SCole Faust add_config(TensorShape(21U, 31U, 9U, 4U), Size2D(3U, 3U), PadStrideInfo(2, 2, 1, 0), Size2D(2U, 2U)); 131*c217d954SCole Faust add_config(TensorShape(33U, 27U, 11U, 3U), Size2D(3U, 3U), PadStrideInfo(2, 2, 0, 1), Size2D(4U, 4U)); 132*c217d954SCole Faust add_config(TensorShape(33U, 27U, 11U, 3U), Size2D(3U, 3U), PadStrideInfo(2, 2, 1, 1), Size2D(2U, 5U)); 133*c217d954SCole Faust add_config(TensorShape(177U, 311U, 22U), Size2D(3U, 3U), PadStrideInfo(1, 2, 1, 1), Size2D(4U, 4U)); 134*c217d954SCole Faust add_config(TensorShape(233U, 277U, 55U), Size2D(3U, 3U), PadStrideInfo(1, 2, 0, 0), Size2D(5U, 5U)); 135*c217d954SCole Faust add_config(TensorShape(333U, 277U, 77U), Size2D(3U, 3U), PadStrideInfo(2, 3, 0, 0), Size2D(4U, 4U)); 136*c217d954SCole Faust add_config(TensorShape(177U, 311U, 22U), Size2D(3U, 3U), PadStrideInfo(2, 1, 1, 1), Size2D(3U, 3U)); 137*c217d954SCole Faust } 138*c217d954SCole Faust }; 139*c217d954SCole Faust } // namespace datasets 140*c217d954SCole Faust } // namespace test 141*c217d954SCole Faust } // namespace arm_compute 142*c217d954SCole Faust #endif /* ARM_COMPUTE_TEST_DILATED_CONVOLUTION_LAYER_DATASET */