Browse Source

im2col wrt sgemm convolution option

tags/20200226
nihui 6 years ago
parent
commit
719d9f48ae
1 changed files with 9 additions and 8 deletions
  1. +9
    -8
      src/layer/arm/convolution_arm.cpp

+ 9
- 8
src/layer/arm/convolution_arm.cpp View File

@@ -395,12 +395,12 @@ int Convolution_arm::create_pipeline(const Option& opt)
conv3x3s2_transform_kernel_neon(weight_data, weight_3x3s2_data, num_input, num_output);
}

if (kernel_w == 1 && kernel_h == 1 && dilation_w == 1 && dilation_h == 1 && stride_w == 2 && stride_h == 2)
if (opt.use_sgemm_convolution && kernel_w == 1 && kernel_h == 1 && dilation_w == 1 && dilation_h == 1 && stride_w == 2 && stride_h == 2)
{
conv_im2col_sgemm_transform_kernel_neon(weight_data, weight_sgemm_data, num_input, num_output, maxk);
}

if (kernel_w == 3 && kernel_h == 3 && dilation_w == 1 && dilation_h == 1 && stride_w == 2 && stride_h == 2)
if (opt.use_sgemm_convolution && kernel_w == 3 && kernel_h == 3 && dilation_w == 1 && dilation_h == 1 && stride_w == 2 && stride_h == 2)
{
conv_im2col_sgemm_transform_kernel_neon(weight_data, weight_sgemm_data, num_input, num_output, maxk);
}
@@ -853,8 +853,10 @@ int Convolution_arm::forward(const Mat& bottom_blob, Mat& top_blob, const Option
}
else if (kernel_w == 1 && kernel_h == 1 && dilation_w == 1 && dilation_h == 1 && stride_w == 2 && stride_h == 2)
{
// conv1x1s2_neon(bottom_blob_bordered, top_blob, weight_data, bias_data, opt);
conv_im2col_sgemm_neon(bottom_blob_bordered, top_blob, weight_sgemm_data, bias_data, kernel_w, kernel_h, stride_w, stride_h, opt);
if (opt.use_sgemm_convolution)
conv_im2col_sgemm_neon(bottom_blob_bordered, top_blob, weight_sgemm_data, bias_data, kernel_w, kernel_h, stride_w, stride_h, opt);
else
conv1x1s2_neon(bottom_blob_bordered, top_blob, weight_data, bias_data, opt);

if (activation)
{
@@ -880,11 +882,10 @@ int Convolution_arm::forward(const Mat& bottom_blob, Mat& top_blob, const Option
}
else if (kernel_w == 3 && kernel_h == 3 && dilation_w == 1 && dilation_h == 1 && stride_w == 2 && stride_h == 2)
{
// conv3x3s2_neon(bottom_blob_bordered, top_blob, weight_data, bias_data, opt);
if (outw >=8 && outh >=8)
conv3x3s2_packed_neon(bottom_blob_bordered, top_blob, weight_3x3s2_data, bias_data, opt);
else
if (opt.use_sgemm_convolution && !(outw >=8 && outh >=8))
conv_im2col_sgemm_neon(bottom_blob_bordered, top_blob, weight_sgemm_data, bias_data, kernel_w, kernel_h, stride_w, stride_h, opt);
else
conv3x3s2_packed_neon(bottom_blob_bordered, top_blob, weight_3x3s2_data, bias_data, opt);

if (activation)
{


Loading…
Cancel
Save