17
static int test_deformableconv2d(int w, int h, int c, int outch, int kernel, int dilation, int stride, int pad, int bias)
19
const int kernel_extent_w = dilation * (kernel - 1) + 1;
20
const int kernel_extent_h = dilation * (kernel - 1) + 1;
21
const int out_w = (w + pad + pad - kernel_extent_w) / stride + 1;
22
const int out_h = (h + pad + pad - kernel_extent_h) / stride + 1;
23
std::vector<ncnn::Mat> a(3);
24
a[0] = RandomMat(w, h, c);
25
a[1] = RandomMat(out_w, out_h, kernel * kernel * 2);
26
a[2] = RandomMat(out_w, out_h, kernel * kernel);
35
pd.set(6, outch * c * kernel * kernel);
37
int activation_type = RAND() % 7;
38
ncnn::Mat activation_params(2);
39
activation_params[0] = (activation_type == 6) ? RandomFloat(0, 1) : RandomFloat(-1, 0);
40
activation_params[1] = RandomFloat(0, 1);
41
pd.set(9, activation_type);
42
pd.set(10, activation_params);
44
std::vector<ncnn::Mat> weights(bias ? 2 : 1);
45
weights[0] = RandomMat(outch * c * kernel * kernel);
47
weights[1] = RandomMat(outch);
49
float epsilon = 0.001;
50
int ret = test_layer("DeformableConv2D", pd, weights, a, 1, epsilon);
53
fprintf(stderr, "test_deformableconv2d 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]);
59
static int test_deformableconv2d_0()
62
|| test_deformableconv2d(7, 5, 24, 32, 4, 2, 2, 2, 1)
63
|| test_deformableconv2d(7, 5, 32, 24, 4, 2, 2, 2, 1)
64
|| test_deformableconv2d(7, 5, 28, 32, 4, 2, 2, 2, 1)
65
|| test_deformableconv2d(7, 5, 32, 28, 4, 2, 2, 2, 1)
66
|| test_deformableconv2d(7, 5, 26, 32, 4, 2, 2, 2, 1)
67
|| test_deformableconv2d(7, 5, 32, 26, 4, 2, 2, 2, 1);
74
return test_deformableconv2d_0();