From 000d33a0e4bfc129a8f2968d4e5ee0793df70a1e Mon Sep 17 00:00:00 2001 From: Pablo Tello Date: Mon, 3 Sep 2018 16:59:20 +0100 Subject: COMPMID-1552: support kernels sizes 1x7, 7x1, 1x5, 5x1 in NEWinograd Refactored the validate method to make it easier to maintain in the future when adding support for new kernels sizes Change-Id: I12d9fe7af15ceb0e655cef61ca94407558fb29e8 Reviewed-on: https://eu-gerrit-1.euhpc.arm.com/146713 Tested-by: Jenkins Reviewed-by: Michalis Spyrou Reviewed-by: Anthony Barbier --- .../kernels/NEWinogradConvolutionLayerKernel.cpp | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) (limited to 'src/core/NEON/kernels/NEWinogradConvolutionLayerKernel.cpp') diff --git a/src/core/NEON/kernels/NEWinogradConvolutionLayerKernel.cpp b/src/core/NEON/kernels/NEWinogradConvolutionLayerKernel.cpp index 8f990712e8..f5609b6f5c 100644 --- a/src/core/NEON/kernels/NEWinogradConvolutionLayerKernel.cpp +++ b/src/core/NEON/kernels/NEWinogradConvolutionLayerKernel.cpp @@ -42,7 +42,7 @@ namespace { inline bool is_kernel_size_supported(Size2D size) { - const std::array supported_input_sizes = { { Size2D(1, 3), Size2D(3, 1), Size2D(5, 5), Size2D(3, 3) } }; + const std::array supported_input_sizes = { { Size2D(1, 3), Size2D(3, 1), Size2D(5, 5), Size2D(3, 3), Size2D(1, 5), Size2D(5, 1), Size2D(7, 1), Size2D(1, 7) } }; return std::end(supported_input_sizes) != std::find(std::begin(supported_input_sizes), std::end(supported_input_sizes), size); } @@ -56,10 +56,10 @@ Status validate_arguments_winograd_weight_trans(const ITensorInfo *input, const const size_t idx_height = get_data_layout_dimension_index(input->data_layout(), DataLayoutDimension::HEIGHT); const auto input_width = input->dimension(idx_width); const auto input_height = input->dimension(idx_height); - ARM_COMPUTE_RETURN_ERROR_ON_MSG(!is_kernel_size_supported(Size2D(input_width, input_height)), "Only 1x3, 3x1, 3x3 and 5x5 kernels are supported"); + ARM_COMPUTE_RETURN_ERROR_ON_MSG(!is_kernel_size_supported(Size2D(input_width, input_height)), "Only 1x3, 3x1, 1x5, 5x1, 7x1, 1x7, 3x3 and 5x5 kernels are supported"); ARM_COMPUTE_RETURN_ERROR_ON(input->num_dimensions() > 4); const Size2D &output_tile = winograd_info.output_tile_size; - const std::array supported_tile_sizes = { { Size2D(2U, 2U), Size2D(4U, 4U), Size2D(1U, 6U), Size2D(6U, 1U) } }; + const std::array supported_tile_sizes = { { Size2D(2U, 2U), Size2D(4U, 4U), Size2D(1U, 6U), Size2D(6U, 1U), Size2D(4, 1), Size2D(1, 4), Size2D(2, 1), Size2D(1, 2) } }; ARM_COMPUTE_RETURN_ERROR_ON(std::end(supported_tile_sizes) == std::find(std::begin(supported_tile_sizes), std::end(supported_tile_sizes), output_tile)); // Checks performed when output is configured @@ -305,6 +305,10 @@ template class NEWinogradLayerTransformWeightsKernel; template class NEWinogradLayerTransformWeightsKernel; template class NEWinogradLayerTransformWeightsKernel; +template class NEWinogradLayerTransformWeightsKernel; +template class NEWinogradLayerTransformWeightsKernel; +template class NEWinogradLayerTransformWeightsKernel; +template class NEWinogradLayerTransformWeightsKernel; // Input transform template @@ -401,6 +405,11 @@ template class NEWinogradLayerTransformInputKernel; template class NEWinogradLayerTransformInputKernel; template class NEWinogradLayerTransformInputKernel; +template class NEWinogradLayerTransformInputKernel; +template class NEWinogradLayerTransformInputKernel; +template class NEWinogradLayerTransformInputKernel; +template class NEWinogradLayerTransformInputKernel; + // Output transform template @@ -513,4 +522,9 @@ template class NEWinogradLayerTransformOutputKernel; template class NEWinogradLayerTransformOutputKernel; template class NEWinogradLayerTransformOutputKernel; +template class NEWinogradLayerTransformOutputKernel; +template class NEWinogradLayerTransformOutputKernel; +template class NEWinogradLayerTransformOutputKernel; +template class NEWinogradLayerTransformOutputKernel; + } // namespace arm_compute -- cgit v1.2.1