Browse Source

mix vulkan winograd f23 and f43 (#3639)

* mix vulkan winograd f23 and f43

* larget epsilon for winograd optimization test
tags/20220420
nihui GitHub 4 years ago
parent
commit
002c07d4ec
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 915 additions and 939 deletions
  1. +905
    -936
      src/layer/vulkan/convolution_vulkan.cpp
  2. +4
    -2
      src/layer/vulkan/convolution_vulkan.h
  3. +6
    -1
      tests/test_convolution.cpp

+ 905
- 936
src/layer/vulkan/convolution_vulkan.cpp
File diff suppressed because it is too large
View File


+ 4
- 2
src/layer/vulkan/convolution_vulkan.h View File

@@ -50,12 +50,14 @@ public:
// winograd23 and winograd43
ncnn::Layer* winograd_padding;
ncnn::Layer* winograd_crop;
VkMat weight_data_gpu_tm;
VkImageMat weight_data_gpu_tm_image;
VkMat weight_data_gpu_tm_winograd23;
VkImageMat weight_data_gpu_tm_winograd23_image;
Pipeline* pipeline_convolution_3x3s1d1_winograd23_transform_input;
Pipeline* pipeline_convolution_3x3s1d1_winograd23_gemm;
Pipeline* pipeline_convolution_3x3s1d1_winograd23_transform_output;

VkMat weight_data_gpu_tm_winograd43;
VkImageMat weight_data_gpu_tm_winograd43_image;
Pipeline* pipeline_convolution_3x3s1d1_winograd43_transform_input;
Pipeline* pipeline_convolution_3x3s1d1_winograd43_gemm;
Pipeline* pipeline_convolution_3x3s1d1_winograd43_transform_output;


+ 6
- 1
tests/test_convolution.cpp View File

@@ -40,7 +40,12 @@ static int test_convolution(int w, int h, int c, int outch, int kernel, int dila
if (bias)
weights[1] = RandomMat(outch);

int ret = test_layer<ncnn::Convolution>("Convolution", pd, weights, a);
float epsilon = 0.001;
// larget epsilon for winograd optimization
if (kernel == 3 && dilation == 1 && stride == 1 && c >= 16 && outch >= 16)
epsilon = 0.002;

int ret = test_layer<ncnn::Convolution>("Convolution", pd, weights, a, epsilon);
if (ret != 0)
{
fprintf(stderr, "test_convolution failed w=%d h=%d c=%d outch=%d kernel=%d dilation=%d stride=%d pad=%d bias=%d act=%d actparams=[%f,%f]\n", w, h, c, outch, kernel, dilation, stride, pad, bias, activation_type, activation_params[0], activation_params[1]);


Loading…
Cancel
Save