diff --git a/src/layer/arm/convolution_arm.cpp b/src/layer/arm/convolution_arm.cpp index 2d25c6be1..eb277bbba 100644 --- a/src/layer/arm/convolution_arm.cpp +++ b/src/layer/arm/convolution_arm.cpp @@ -374,18 +374,18 @@ int Convolution_arm::forwardDilation(const Mat& bottom_blob, Mat& top_blob, conv const int kernel_extent = dilation * (kernel_size - 1) + 1; Mat bottom_blob_bordered = bottom_blob; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { Option opt_b = opt; opt_b.blob_allocator = opt.workspace_allocator; - copy_make_border(bottom_blob, bottom_blob_bordered, pad_h, pad_h, pad_w, pad_w, BORDER_CONSTANT, 0.f, opt_b); + copy_make_border(bottom_blob, bottom_blob_bordered, pad_top, pad_bottom, pad_left, pad_right, BORDER_CONSTANT, 0.f, opt_b); if (bottom_blob_bordered.empty()) return -100; w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_extent + (w - 1) / stride * stride - w; int hpad = kernel_extent + (h - 1) / stride * stride - h; @@ -491,18 +491,18 @@ int Convolution_arm::forward(const Mat& bottom_blob, Mat& top_blob, const Option const int kernel_extent_h = dilation_h * (kernel_h - 1) + 1; Mat bottom_blob_bordered = bottom_blob; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { Option opt_b = opt; opt_b.blob_allocator = opt.workspace_allocator; - copy_make_border(bottom_blob, bottom_blob_bordered, pad_h, pad_h, pad_w, pad_w, BORDER_CONSTANT, 0.f, opt_b); + copy_make_border(bottom_blob, bottom_blob_bordered, pad_top, pad_bottom, pad_left, pad_right, BORDER_CONSTANT, 0.f, opt_b); if (bottom_blob_bordered.empty()) return -100; w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_extent_w + (w - 1) / stride_w * stride_w - w; int hpad = kernel_extent_h + (h - 1) / stride_h * stride_h - h; @@ -973,18 +973,18 @@ int Convolution_arm::forward(const Mat& bottom_blob, Mat& top_blob, const Option } Mat bottom_blob_bordered = bottom_blob_unbordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { Option opt_b = opt; opt_b.blob_allocator = opt.workspace_allocator; - copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_h, pad_h, pad_w, pad_w, BORDER_CONSTANT, 0.f, opt_b); + copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_top, pad_bottom, pad_left, pad_right, BORDER_CONSTANT, 0.f, opt_b); if (bottom_blob_bordered.empty()) return -100; w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_size + (w - 1) / stride * stride - w; int hpad = kernel_size + (h - 1) / stride * stride - h; diff --git a/src/layer/arm/convolutiondepthwise_arm.cpp b/src/layer/arm/convolutiondepthwise_arm.cpp index c01802574..b2481dc46 100644 --- a/src/layer/arm/convolutiondepthwise_arm.cpp +++ b/src/layer/arm/convolutiondepthwise_arm.cpp @@ -435,18 +435,18 @@ int ConvolutionDepthWise_arm::forward(const Mat& bottom_blob, Mat& top_blob, con } Mat bottom_blob_bordered = bottom_blob_unbordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { Option opt_b = opt; opt_b.blob_allocator = opt.workspace_allocator; - copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_h, pad_h, pad_w, pad_w, BORDER_CONSTANT, 0.f, opt_b); + copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_top, pad_bottom, pad_left, pad_right, BORDER_CONSTANT, 0.f, opt_b); if (bottom_blob_bordered.empty()) return -100; w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_extent_w + (w - 1) / stride_w * stride_w - w; int hpad = kernel_extent_h + (h - 1) / stride_h * stride_h - h; diff --git a/src/layer/arm/deconvolution_arm.cpp b/src/layer/arm/deconvolution_arm.cpp index f79fe76ce..6f481c6b2 100644 --- a/src/layer/arm/deconvolution_arm.cpp +++ b/src/layer/arm/deconvolution_arm.cpp @@ -299,7 +299,7 @@ int Deconvolution_arm::forward(const Mat& bottom_blob, Mat& top_blob, const Opti size_t out_elemsize = elemsize / elempack * out_elempack; Mat top_blob_bordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { top_blob_bordered.create(outw, outh, num_output / out_elempack, out_elemsize, out_elempack, opt.workspace_allocator); if (top_blob_bordered.empty()) @@ -629,9 +629,9 @@ int Deconvolution_arm::forward(const Mat& bottom_blob, Mat& top_blob, const Opti } } - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { - copy_cut_border(top_blob_bordered, top_blob, pad_h, pad_h, pad_w, pad_w, opt); + copy_cut_border(top_blob_bordered, top_blob, pad_top, pad_bottom, pad_left, pad_right, opt); if (top_blob.empty()) return -100; @@ -690,7 +690,7 @@ int Deconvolution_arm::forward(const Mat& bottom_blob, Mat& top_blob, const Opti int outh = (h - 1) * stride + kernel_size; Mat top_blob_bordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { top_blob_bordered.create(outw, outh, num_output, elemsize, opt.workspace_allocator); if (top_blob_bordered.empty()) @@ -706,9 +706,9 @@ int Deconvolution_arm::forward(const Mat& bottom_blob, Mat& top_blob, const Opti deconv(bottom_blob, top_blob_bordered, weight_data, bias_data, opt); - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { - copy_cut_border(top_blob_bordered, top_blob, pad_h, pad_h, pad_w, pad_w, opt); + copy_cut_border(top_blob_bordered, top_blob, pad_top, pad_bottom, pad_left, pad_right, opt); if (top_blob.empty()) return -100; diff --git a/src/layer/arm/deconvolutiondepthwise_arm.cpp b/src/layer/arm/deconvolutiondepthwise_arm.cpp index 65e4dd75d..cc5b67949 100644 --- a/src/layer/arm/deconvolutiondepthwise_arm.cpp +++ b/src/layer/arm/deconvolutiondepthwise_arm.cpp @@ -397,7 +397,7 @@ int DeconvolutionDepthWise_arm::forward(const Mat& bottom_blob, Mat& top_blob, c { Mat top_blob_bordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { top_blob_bordered.create(outw, outh, num_output / out_elempack, out_elemsize, out_elempack, opt.workspace_allocator); if (top_blob_bordered.empty()) @@ -507,9 +507,9 @@ int DeconvolutionDepthWise_arm::forward(const Mat& bottom_blob, Mat& top_blob, c } } - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { - copy_cut_border(top_blob_bordered, top_blob, pad_h, pad_h, pad_w, pad_w, opt); + copy_cut_border(top_blob_bordered, top_blob, pad_top, pad_bottom, pad_left, pad_right, opt); if (top_blob.empty()) return -100; @@ -888,9 +888,9 @@ int DeconvolutionDepthWise_arm::forward(const Mat& bottom_blob, Mat& top_blob, c top_blob_bordered = top_blob_bordered_unpacked; } - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { - copy_cut_border(top_blob_bordered, top_blob, pad_h, pad_h, pad_w, pad_w, opt); + copy_cut_border(top_blob_bordered, top_blob, pad_top, pad_bottom, pad_left, pad_right, opt); if (top_blob.empty()) return -100; @@ -908,7 +908,7 @@ int DeconvolutionDepthWise_arm::forward(const Mat& bottom_blob, Mat& top_blob, c #endif // __ARM_NEON Mat top_blob_bordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { top_blob_bordered.create(outw, outh, num_output, elemsize, opt.workspace_allocator); if (top_blob_bordered.empty()) @@ -961,9 +961,9 @@ int DeconvolutionDepthWise_arm::forward(const Mat& bottom_blob, Mat& top_blob, c } } - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { - copy_cut_border(top_blob_bordered, top_blob, pad_h, pad_h, pad_w, pad_w, opt); + copy_cut_border(top_blob_bordered, top_blob, pad_top, pad_bottom, pad_left, pad_right, opt); if (top_blob.empty()) return -100; diff --git a/src/layer/convolution.cpp b/src/layer/convolution.cpp index b20155289..ea5b91431 100644 --- a/src/layer/convolution.cpp +++ b/src/layer/convolution.cpp @@ -38,14 +38,16 @@ int Convolution::load_param(const ParamDict& pd) dilation_h = pd.get(12, dilation_w); stride_w = pd.get(3, 1); stride_h = pd.get(13, stride_w); - pad_w = pd.get(4, 0); - pad_h = pd.get(14, pad_w); + pad_left = pd.get(4, 0); + pad_right = pd.get(15, pad_left); + pad_top = pd.get(14, pad_left); + pad_bottom = pd.get(16, pad_top); bias_term = pd.get(5, 0); weight_data_size = pd.get(6, 0); int8_scale_term = pd.get(8, 0); activation_type = pd.get(9, 0); activation_params = pd.get(10, Mat()); - impl_type = pd.get(15, 0); + impl_type = pd.get(17, 0); return 0; } @@ -329,18 +331,18 @@ int Convolution::forward(const Mat& bottom_blob, Mat& top_blob, const Option& op } Mat bottom_blob_bordered = bottom_blob_unbordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { Option opt_b = opt; opt_b.blob_allocator = opt.workspace_allocator; - copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_h, pad_h, pad_w, pad_w, BORDER_CONSTANT, 0.f, opt_b); + copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_top, pad_bottom, pad_left, pad_right, BORDER_CONSTANT, 0.f, opt_b); if (bottom_blob_bordered.empty()) return -100; w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_extent_w + (w - 1) / stride_w * stride_w - w; int hpad = kernel_extent_h + (h - 1) / stride_h * stride_h - h; diff --git a/src/layer/convolution.h b/src/layer/convolution.h index c6a30bb69..6a35e79de 100644 --- a/src/layer/convolution.h +++ b/src/layer/convolution.h @@ -44,8 +44,10 @@ public: int dilation_h; int stride_w; int stride_h; - int pad_w; - int pad_h; + int pad_left; + int pad_right; + int pad_top; + int pad_bottom; int bias_term; int weight_data_size; diff --git a/src/layer/convolutiondepthwise.cpp b/src/layer/convolutiondepthwise.cpp index 96001d23d..aa176101c 100644 --- a/src/layer/convolutiondepthwise.cpp +++ b/src/layer/convolutiondepthwise.cpp @@ -37,8 +37,10 @@ int ConvolutionDepthWise::load_param(const ParamDict& pd) dilation_h = pd.get(12, dilation_w); stride_w = pd.get(3, 1); stride_h = pd.get(13, stride_w); - pad_w = pd.get(4, 0); - pad_h = pd.get(14, pad_w); + pad_left = pd.get(4, 0); + pad_right = pd.get(15, pad_left); + pad_top = pd.get(14, pad_left); + pad_bottom = pd.get(16, pad_top); bias_term = pd.get(5, 0); weight_data_size = pd.get(6, 0); group = pd.get(7, 1); @@ -322,18 +324,18 @@ int ConvolutionDepthWise::forward(const Mat& bottom_blob, Mat& top_blob, const O } Mat bottom_blob_bordered = bottom_blob_unbordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { Option opt_b = opt; opt_b.blob_allocator = opt.workspace_allocator; - copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_h, pad_h, pad_w, pad_w, BORDER_CONSTANT, 0.f, opt_b); + copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_top, pad_bottom, pad_left, pad_right, BORDER_CONSTANT, 0.f, opt_b); if (bottom_blob_bordered.empty()) return -100; w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_extent_w + (w - 1) / stride_w * stride_w - w; int hpad = kernel_extent_h + (h - 1) / stride_h * stride_h - h; diff --git a/src/layer/convolutiondepthwise.h b/src/layer/convolutiondepthwise.h index a61497e8a..20abcb4d2 100644 --- a/src/layer/convolutiondepthwise.h +++ b/src/layer/convolutiondepthwise.h @@ -44,8 +44,10 @@ public: int dilation_h; int stride_w; int stride_h; - int pad_w; - int pad_h; + int pad_left; + int pad_right; + int pad_top; + int pad_bottom; int bias_term; int weight_data_size; diff --git a/src/layer/deconvolution.cpp b/src/layer/deconvolution.cpp index ea227dd6d..cdbe2651a 100644 --- a/src/layer/deconvolution.cpp +++ b/src/layer/deconvolution.cpp @@ -35,8 +35,10 @@ int Deconvolution::load_param(const ParamDict& pd) dilation_h = pd.get(12, dilation_w); stride_w = pd.get(3, 1); stride_h = pd.get(13, stride_w); - pad_w = pd.get(4, 0); - pad_h = pd.get(14, pad_w); + pad_left = pd.get(4, 0); + pad_right = pd.get(15, pad_left); + pad_top = pd.get(14, pad_left); + pad_bottom = pd.get(16, pad_top); bias_term = pd.get(5, 0); weight_data_size = pd.get(6, 0); activation_type = pd.get(9, 0); @@ -80,7 +82,7 @@ int Deconvolution::forward(const Mat& bottom_blob, Mat& top_blob, const Option& int outh = (h - 1) * stride_h + kernel_extent_h; Mat top_blob_bordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { top_blob_bordered.create(outw, outh, num_output, elemsize, opt.workspace_allocator); if (top_blob_bordered.empty()) @@ -198,9 +200,9 @@ int Deconvolution::forward(const Mat& bottom_blob, Mat& top_blob, const Option& } } - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { - copy_cut_border(top_blob_bordered, top_blob, pad_h, pad_h, pad_w, pad_w, opt); + copy_cut_border(top_blob_bordered, top_blob, pad_top, pad_bottom, pad_left, pad_right, opt); if (top_blob.empty()) return -100; diff --git a/src/layer/deconvolution.h b/src/layer/deconvolution.h index e4e873fbb..75b2039c7 100644 --- a/src/layer/deconvolution.h +++ b/src/layer/deconvolution.h @@ -39,8 +39,10 @@ public: int dilation_h; int stride_w; int stride_h; - int pad_w; - int pad_h; + int pad_left; + int pad_right; + int pad_top; + int pad_bottom; int bias_term; int weight_data_size; diff --git a/src/layer/deconvolutiondepthwise.cpp b/src/layer/deconvolutiondepthwise.cpp index 30189848e..cfd86eaf4 100644 --- a/src/layer/deconvolutiondepthwise.cpp +++ b/src/layer/deconvolutiondepthwise.cpp @@ -35,8 +35,10 @@ int DeconvolutionDepthWise::load_param(const ParamDict& pd) dilation_h = pd.get(12, dilation_w); stride_w = pd.get(3, 1); stride_h = pd.get(13, stride_w); - pad_w = pd.get(4, 0); - pad_h = pd.get(14, pad_w); + pad_left = pd.get(4, 0); + pad_right = pd.get(15, pad_left); + pad_top = pd.get(14, pad_left); + pad_bottom = pd.get(16, pad_top); bias_term = pd.get(5, 0); weight_data_size = pd.get(6, 0); group = pd.get(7, 1); @@ -85,7 +87,7 @@ int DeconvolutionDepthWise::forward(const Mat& bottom_blob, Mat& top_blob, const int outh = (h - 1) * stride_h + kernel_extent_h; Mat top_blob_bordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { top_blob_bordered.create(outw, outh, num_output, elemsize, opt.workspace_allocator); if (top_blob_bordered.empty()) @@ -294,9 +296,9 @@ int DeconvolutionDepthWise::forward(const Mat& bottom_blob, Mat& top_blob, const } } - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { - copy_cut_border(top_blob_bordered, top_blob, pad_h, pad_h, pad_w, pad_w, opt); + copy_cut_border(top_blob_bordered, top_blob, pad_top, pad_bottom, pad_left, pad_right, opt); if (top_blob.empty()) return -100; diff --git a/src/layer/deconvolutiondepthwise.h b/src/layer/deconvolutiondepthwise.h index db6782b0a..609d05345 100644 --- a/src/layer/deconvolutiondepthwise.h +++ b/src/layer/deconvolutiondepthwise.h @@ -39,8 +39,10 @@ public: int dilation_h; int stride_w; int stride_h; - int pad_w; - int pad_h; + int pad_left; + int pad_right; + int pad_top; + int pad_bottom; int bias_term; int weight_data_size; diff --git a/src/layer/vulkan/convolution_vulkan.cpp b/src/layer/vulkan/convolution_vulkan.cpp index ff5f4046f..bc0d10edc 100644 --- a/src/layer/vulkan/convolution_vulkan.cpp +++ b/src/layer/vulkan/convolution_vulkan.cpp @@ -55,10 +55,10 @@ int Convolution_vulkan::create_pipeline(const Option& opt) padding->vkdev = vkdev; ncnn::ParamDict pd; - pd.set(0, pad_h); - pd.set(1, pad_h); - pd.set(2, pad_w); - pd.set(3, pad_w); + pd.set(0, pad_top); + pd.set(1, pad_bottom); + pd.set(2, pad_left); + pd.set(3, pad_right); pd.set(4, 0); pd.set(5, 0.f); @@ -862,7 +862,7 @@ int Convolution_vulkan::forward(const VkMat& bottom_blob, VkMat& top_blob, VkCom const int kernel_extent_h = dilation_h * (kernel_h - 1) + 1; VkMat bottom_blob_bordered = bottom_blob; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { ncnn::Option opt_pad = opt; opt_pad.blob_vkallocator = opt.workspace_vkallocator; @@ -872,7 +872,7 @@ int Convolution_vulkan::forward(const VkMat& bottom_blob, VkMat& top_blob, VkCom w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_extent_w + (w - 1) / stride_w * stride_w - w; int hpad = kernel_extent_h + (h - 1) / stride_h * stride_h - h; diff --git a/src/layer/vulkan/convolutiondepthwise_vulkan.cpp b/src/layer/vulkan/convolutiondepthwise_vulkan.cpp index d4960534a..807bb1f5a 100644 --- a/src/layer/vulkan/convolutiondepthwise_vulkan.cpp +++ b/src/layer/vulkan/convolutiondepthwise_vulkan.cpp @@ -44,10 +44,10 @@ int ConvolutionDepthWise_vulkan::create_pipeline(const Option& opt) padding->vkdev = vkdev; ncnn::ParamDict pd; - pd.set(0, pad_h); - pd.set(1, pad_h); - pd.set(2, pad_w); - pd.set(3, pad_w); + pd.set(0, pad_top); + pd.set(1, pad_bottom); + pd.set(2, pad_left); + pd.set(3, pad_right); pd.set(4, 0); pd.set(5, 0.f); @@ -467,7 +467,7 @@ int ConvolutionDepthWise_vulkan::forward(const VkMat& bottom_blob, VkMat& top_bl const int kernel_extent_h = dilation_h * (kernel_h - 1) + 1; VkMat bottom_blob_bordered = bottom_blob; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { ncnn::Option opt_pad = opt; opt_pad.blob_vkallocator = opt.workspace_vkallocator; @@ -477,7 +477,7 @@ int ConvolutionDepthWise_vulkan::forward(const VkMat& bottom_blob, VkMat& top_bl w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_extent_w + (w - 1) / stride_w * stride_w - w; int hpad = kernel_extent_h + (h - 1) / stride_h * stride_h - h; diff --git a/src/layer/vulkan/deconvolution_vulkan.cpp b/src/layer/vulkan/deconvolution_vulkan.cpp index 7892f27a2..eae711b53 100644 --- a/src/layer/vulkan/deconvolution_vulkan.cpp +++ b/src/layer/vulkan/deconvolution_vulkan.cpp @@ -38,8 +38,8 @@ int Deconvolution_vulkan::create_pipeline(const Option& opt) crop->vkdev = vkdev; ncnn::ParamDict pd; - pd.set(0, pad_w); - pd.set(1, pad_h); + pd.set(0, pad_left); + pd.set(1, pad_top); pd.set(2, 0); crop->load_param(pd); @@ -351,7 +351,7 @@ int Deconvolution_vulkan::forward(const VkMat& bottom_blob, VkMat& top_blob, VkC } VkMat top_blob_bordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { top_blob_bordered.create(outw, outh, num_output / out_elempack, out_elemsize, out_elempack, opt.workspace_vkallocator, opt.staging_vkallocator); if (top_blob_bordered.empty()) @@ -420,12 +420,12 @@ int Deconvolution_vulkan::forward(const VkMat& bottom_blob, VkMat& top_blob, VkC cmd.record_pipeline(pipeline, bindings, constants, top_blob_bordered); - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { VkMat reference_blob; reference_blob.dims = 2; - reference_blob.w = top_blob_bordered.w - pad_w - pad_w; - reference_blob.h = top_blob_bordered.h - pad_h - pad_h; + reference_blob.w = top_blob_bordered.w - pad_left - pad_right; + reference_blob.h = top_blob_bordered.h - pad_top - pad_bottom; std::vector crop_bottom_blobs(2); crop_bottom_blobs[0] = top_blob_bordered; diff --git a/src/layer/vulkan/deconvolutiondepthwise_vulkan.cpp b/src/layer/vulkan/deconvolutiondepthwise_vulkan.cpp index 5fc016fd7..d0ead874b 100644 --- a/src/layer/vulkan/deconvolutiondepthwise_vulkan.cpp +++ b/src/layer/vulkan/deconvolutiondepthwise_vulkan.cpp @@ -44,8 +44,8 @@ int DeconvolutionDepthWise_vulkan::create_pipeline(const Option& opt) crop->vkdev = vkdev; ncnn::ParamDict pd; - pd.set(0, pad_w); - pd.set(1, pad_h); + pd.set(0, pad_left); + pd.set(1, pad_top); pd.set(2, 0); crop->load_param(pd); @@ -495,7 +495,7 @@ int DeconvolutionDepthWise_vulkan::forward(const VkMat& bottom_blob, VkMat& top_ } VkMat top_blob_bordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { top_blob_bordered.create(outw, outh, num_output / out_elempack, out_elemsize, out_elempack, opt.workspace_vkallocator, opt.staging_vkallocator); if (top_blob_bordered.empty()) @@ -534,12 +534,12 @@ int DeconvolutionDepthWise_vulkan::forward(const VkMat& bottom_blob, VkMat& top_ // record cmd.record_pipeline(pipeline, bindings, constants, top_blob_bordered); - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { VkMat reference_blob; reference_blob.dims = 2; - reference_blob.w = top_blob_bordered.w - pad_w - pad_w; - reference_blob.h = top_blob_bordered.h - pad_h - pad_h; + reference_blob.w = top_blob_bordered.w - pad_left - pad_right; + reference_blob.h = top_blob_bordered.h - pad_top - pad_bottom; std::vector crop_bottom_blobs(2); crop_bottom_blobs[0] = top_blob_bordered; @@ -646,12 +646,12 @@ int DeconvolutionDepthWise_vulkan::forward(const VkMat& bottom_blob, VkMat& top_ top_blob_bordered = top_blob_unpacked; } - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { VkMat reference_blob; reference_blob.dims = 2; - reference_blob.w = top_blob_bordered.w - pad_w - pad_w; - reference_blob.h = top_blob_bordered.h - pad_h - pad_h; + reference_blob.w = top_blob_bordered.w - pad_left - pad_right; + reference_blob.h = top_blob_bordered.h - pad_top - pad_bottom; std::vector crop_bottom_blobs(2); crop_bottom_blobs[0] = top_blob_bordered; diff --git a/src/layer/x86/convolution_x86.cpp b/src/layer/x86/convolution_x86.cpp index 0b6bfc4ff..69c1a93cc 100644 --- a/src/layer/x86/convolution_x86.cpp +++ b/src/layer/x86/convolution_x86.cpp @@ -147,18 +147,18 @@ int Convolution_x86::forwardDilation(const Mat& bottom_blob, Mat& top_blob, conv const int kernel_extent = dilation * (kernel_size - 1) + 1; Mat bottom_blob_bordered = bottom_blob; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { Option opt_b = opt; opt_b.blob_allocator = opt.workspace_allocator; - copy_make_border(bottom_blob, bottom_blob_bordered, pad_h, pad_h, pad_w, pad_w, BORDER_CONSTANT, 0.f, opt_b); + copy_make_border(bottom_blob, bottom_blob_bordered, pad_top, pad_bottom, pad_left, pad_right, BORDER_CONSTANT, 0.f, opt_b); if (bottom_blob_bordered.empty()) return -100; w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_extent + (w - 1) / stride * stride - w; int hpad = kernel_extent + (h - 1) / stride * stride - h; @@ -476,18 +476,18 @@ int Convolution_x86::forward(const Mat& bottom_blob, Mat& top_blob, const Option } Mat bottom_blob_bordered = bottom_blob_unbordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { Option opt_b = opt; opt_b.blob_allocator = opt.workspace_allocator; - copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_h, pad_h, pad_w, pad_w, BORDER_CONSTANT, 0.f, opt_b); + copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_top, pad_bottom, pad_left, pad_right, BORDER_CONSTANT, 0.f, opt_b); if (bottom_blob_bordered.empty()) return -100; w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_size + (w - 1) / stride * stride - w; int hpad = kernel_size + (h - 1) / stride * stride - h; diff --git a/src/layer/x86/convolutiondepthwise_x86.cpp b/src/layer/x86/convolutiondepthwise_x86.cpp index 144453c46..17283ed9f 100644 --- a/src/layer/x86/convolutiondepthwise_x86.cpp +++ b/src/layer/x86/convolutiondepthwise_x86.cpp @@ -232,18 +232,18 @@ int ConvolutionDepthWise_x86::forward(const Mat& bottom_blob, Mat& top_blob, con } Mat bottom_blob_bordered = bottom_blob_unbordered; - if (pad_w > 0 || pad_h > 0) + if (pad_left > 0 || pad_right > 0 || pad_top > 0 || pad_bottom > 0) { Option opt_b = opt; opt_b.blob_allocator = opt.workspace_allocator; - copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_h, pad_h, pad_w, pad_w, BORDER_CONSTANT, 0.f, opt_b); + copy_make_border(bottom_blob_unbordered, bottom_blob_bordered, pad_top, pad_bottom, pad_left, pad_right, BORDER_CONSTANT, 0.f, opt_b); if (bottom_blob_bordered.empty()) return -100; w = bottom_blob_bordered.w; h = bottom_blob_bordered.h; } - else if (pad_w == -233 && pad_h == -233) + else if (pad_left == -233 && pad_right == -233 && pad_top == -233 && pad_bottom == -233) { int wpad = kernel_extent_w + (w - 1) / stride_w * stride_w - w; int hpad = kernel_extent_h + (h - 1) / stride_h * stride_h - h; diff --git a/tools/ncnnoptimize.cpp b/tools/ncnnoptimize.cpp index ac5f474fd..5f6c0c135 100644 --- a/tools/ncnnoptimize.cpp +++ b/tools/ncnnoptimize.cpp @@ -1808,14 +1808,16 @@ int NetOptimize::save(const char* parampath, const char* binpath) { if (op->dilation_h != op->dilation_w) fprintf(pp, " 12=%d", op->dilation_h); } fprintf_param_value(" 3=%d", stride_w) { if (op->stride_h != op->stride_w) fprintf(pp, " 13=%d", op->stride_h); } - fprintf_param_value(" 4=%d", pad_w) - { if (op->pad_h != op->pad_w) fprintf(pp, " 14=%d", op->pad_h); } + fprintf_param_value(" 4=%d", pad_left) + { if (op->pad_top != op->pad_left) fprintf(pp, " 14=%d", op->pad_top); } + { if (op->pad_right != op->pad_left) fprintf(pp, " 15=%d", op->pad_right); } + { if (op->pad_bottom != op->pad_top) fprintf(pp, " 16=%d", op->pad_bottom); } fprintf_param_value(" 5=%d", bias_term) fprintf_param_value(" 6=%d", weight_data_size) fprintf_param_value(" 8=%d", int8_scale_term) fprintf_param_value(" 9=%d", activation_type) { if (!op->activation_params.empty()) fprintf_param_float_array(10, op->activation_params, pp); } - fprintf_param_value(" 15=%d", impl_type) + fprintf_param_value(" 17=%d", impl_type) fwrite_weight_tag_data(0, op->weight_data, bp); fwrite_weight_data(op->bias_data, bp); @@ -1832,8 +1834,10 @@ int NetOptimize::save(const char* parampath, const char* binpath) { if (op->dilation_h != op->dilation_w) fprintf(pp, " 12=%d", op->dilation_h); } fprintf_param_value(" 3=%d", stride_w) { if (op->stride_h != op->stride_w) fprintf(pp, " 13=%d", op->stride_h); } - fprintf_param_value(" 4=%d", pad_w) - { if (op->pad_h != op->pad_w) fprintf(pp, " 14=%d", op->pad_h); } + fprintf_param_value(" 4=%d", pad_left) + { if (op->pad_top != op->pad_left) fprintf(pp, " 14=%d", op->pad_top); } + { if (op->pad_right != op->pad_left) fprintf(pp, " 15=%d", op->pad_right); } + { if (op->pad_bottom != op->pad_top) fprintf(pp, " 16=%d", op->pad_bottom); } fprintf_param_value(" 5=%d", bias_term) fprintf_param_value(" 6=%d", weight_data_size) fprintf_param_value(" 7=%d", group) @@ -1868,8 +1872,10 @@ int NetOptimize::save(const char* parampath, const char* binpath) { if (op->dilation_h != op->dilation_w) fprintf(pp, " 12=%d", op->dilation_h); } fprintf_param_value(" 3=%d", stride_w) { if (op->stride_h != op->stride_w) fprintf(pp, " 13=%d", op->stride_h); } - fprintf_param_value(" 4=%d", pad_w) - { if (op->pad_h != op->pad_w) fprintf(pp, " 14=%d", op->pad_h); } + fprintf_param_value(" 4=%d", pad_left) + { if (op->pad_top != op->pad_left) fprintf(pp, " 14=%d", op->pad_top); } + { if (op->pad_right != op->pad_left) fprintf(pp, " 15=%d", op->pad_right); } + { if (op->pad_bottom != op->pad_top) fprintf(pp, " 16=%d", op->pad_bottom); } fprintf_param_value(" 5=%d", bias_term) fprintf_param_value(" 6=%d", weight_data_size) fprintf_param_value(" 9=%d", activation_type) @@ -1890,8 +1896,10 @@ int NetOptimize::save(const char* parampath, const char* binpath) { if (op->dilation_h != op->dilation_w) fprintf(pp, " 12=%d", op->dilation_h); } fprintf_param_value(" 3=%d", stride_w) { if (op->stride_h != op->stride_w) fprintf(pp, " 13=%d", op->stride_h); } - fprintf_param_value(" 4=%d", pad_w) - { if (op->pad_h != op->pad_w) fprintf(pp, " 14=%d", op->pad_h); } + fprintf_param_value(" 4=%d", pad_left) + { if (op->pad_top != op->pad_left) fprintf(pp, " 14=%d", op->pad_top); } + { if (op->pad_right != op->pad_left) fprintf(pp, " 15=%d", op->pad_right); } + { if (op->pad_bottom != op->pad_top) fprintf(pp, " 16=%d", op->pad_bottom); } fprintf_param_value(" 5=%d", bias_term) fprintf_param_value(" 6=%d", weight_data_size) fprintf_param_value(" 7=%d", group)