1
// Tencent is pleased to support the open source community by making ncnn available.
3
// Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
5
// Licensed under the BSD 3-Clause License (the "License"); you may not use this file except
6
// in compliance with the License. You may obtain a copy of the License at
8
// https://opensource.org/licenses/BSD-3-Clause
10
// Unless required by applicable law or agreed to in writing, software distributed
11
// under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR
12
// CONDITIONS OF ANY KIND, either express or implied. See the License for the
13
// specific language governing permissions and limitations under the License.
17
static int test_pooling(int w, int h, int c, int pooling_type, int kernel, int stride, int pad, int global_pooling, int pad_mode, int avgpool_count_include_pad, int adaptive_pooling, int out_w)
19
ncnn::Mat a = RandomMat(w, h, c);
22
pd.set(0, pooling_type); // pooling_type
23
pd.set(1, kernel); // kernel_w
24
pd.set(2, stride); // stride_w
25
pd.set(3, pad); // pad_w
26
pd.set(4, global_pooling); // global_pooling
27
pd.set(5, pad_mode); // pad_mode
28
pd.set(6, avgpool_count_include_pad); // avgpool_count_include_pad
29
pd.set(7, adaptive_pooling); // adaptive_pooling
30
pd.set(8, out_w); // out_w
32
std::vector<ncnn::Mat> weights(0);
34
int ret = test_layer("Pooling", pd, weights, a);
37
fprintf(stderr, "test_pooling failed w=%d h=%d c=%d pooling_type=%d kernel=%d stride=%d pad=%d global_pooling=%d pad_mode=%d avgpool_count_include_pad=%d adaptive_pooling=%d out_w=%d\n", w, h, c, pooling_type, kernel, stride, pad, global_pooling, pad_mode, avgpool_count_include_pad, adaptive_pooling, out_w);
43
static int test_pooling_0()
45
static const int ksp[11][3] = {
59
for (int i = 0; i < 11; i++)
62
|| test_pooling(9, 7, 1, 0, ksp[i][0], ksp[i][1], ksp[i][2], 0, 0, 0, 0, 0)
63
|| test_pooling(9, 7, 2, 0, ksp[i][0], ksp[i][1], ksp[i][2], 0, 1, 0, 0, 0)
64
|| test_pooling(9, 7, 3, 0, ksp[i][0], ksp[i][1], ksp[i][2], 0, 2, 0, 0, 0)
65
|| test_pooling(9, 7, 4, 0, ksp[i][0], ksp[i][1], ksp[i][2], 0, 3, 0, 0, 0)
66
|| test_pooling(9, 7, 7, 0, ksp[i][0], ksp[i][1], ksp[i][2], 0, 0, 0, 0, 0)
67
|| test_pooling(9, 7, 8, 0, ksp[i][0], ksp[i][1], ksp[i][2], 0, 1, 0, 0, 0)
68
|| test_pooling(9, 7, 15, 0, ksp[i][0], ksp[i][1], ksp[i][2], 0, 2, 0, 0, 0)
69
|| test_pooling(9, 7, 16, 0, ksp[i][0], ksp[i][1], ksp[i][2], 0, 3, 0, 0, 0);
78
static int test_pooling_1()
80
static const int ksp[11][3] = {
94
for (int i = 0; i < 11; i++)
97
|| test_pooling(9, 7, 1, 1, ksp[i][0], ksp[i][1], ksp[i][2], 0, 0, 0, 0, 0)
98
|| test_pooling(9, 7, 2, 1, ksp[i][0], ksp[i][1], ksp[i][2], 0, 1, 0, 0, 0)
99
|| test_pooling(9, 7, 3, 1, ksp[i][0], ksp[i][1], ksp[i][2], 0, 0, 1, 0, 0)
100
|| test_pooling(9, 7, 4, 1, ksp[i][0], ksp[i][1], ksp[i][2], 0, 1, 0, 0, 0)
101
|| test_pooling(9, 7, 7, 1, ksp[i][0], ksp[i][1], ksp[i][2], 0, 0, 0, 0, 0)
102
|| test_pooling(9, 7, 8, 1, ksp[i][0], ksp[i][1], ksp[i][2], 0, 1, 1, 0, 0)
103
|| test_pooling(9, 7, 12, 1, ksp[i][0], ksp[i][1], ksp[i][2], 0, 2, 1, 0, 0)
104
|| test_pooling(9, 7, 15, 1, ksp[i][0], ksp[i][1], ksp[i][2], 0, 0, 0, 0, 0)
105
|| test_pooling(9, 7, 16, 1, ksp[i][0], ksp[i][1], ksp[i][2], 0, 1, 0, 0, 0)
106
|| test_pooling(9, 7, 64, 1, ksp[i][0], ksp[i][1], ksp[i][2], 0, 3, 1, 0, 0);
115
static int test_pooling_2()
118
|| test_pooling(2, 5, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0)
119
|| test_pooling(5, 2, 1, 1, 1, 1, 0, 1, 0, 0, 0, 0)
120
|| test_pooling(3, 6, 3, 0, 1, 1, 0, 1, 0, 0, 0, 0)
121
|| test_pooling(6, 3, 3, 1, 1, 1, 0, 1, 0, 0, 0, 0)
122
|| test_pooling(4, 4, 4, 0, 1, 1, 0, 1, 0, 0, 0, 0)
123
|| test_pooling(6, 4, 4, 1, 1, 1, 0, 1, 0, 0, 0, 0)
124
|| test_pooling(8, 7, 8, 0, 1, 1, 0, 1, 0, 0, 0, 0)
125
|| test_pooling(7, 8, 8, 1, 1, 1, 0, 1, 0, 0, 0, 0)
126
|| test_pooling(11, 13, 16, 0, 1, 1, 0, 1, 0, 0, 0, 0)
127
|| test_pooling(13, 11, 16, 1, 1, 1, 0, 1, 0, 0, 0, 0)
128
|| test_pooling(110, 103, 106, 0, 1, 1, 0, 1, 0, 0, 0, 0)
129
|| test_pooling(130, 101, 106, 1, 1, 1, 0, 1, 0, 0, 0, 0)
130
|| test_pooling(80, 93, 128, 0, 1, 1, 0, 1, 0, 0, 0, 0)
131
|| test_pooling(80, 91, 128, 1, 1, 1, 0, 1, 0, 0, 0, 0)
132
|| test_pooling(48, 48, 4, 0, 2, 2, 0, 0, 0, 0, 0, 0)
133
|| test_pooling(48, 48, 15, 0, 2, 2, 1, 0, 0, 0, 0, 0);
137
static int test_pooling_3()
140
|| test_pooling(2, 5, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1)
141
|| test_pooling(2, 5, 1, 1, 1, 1, 0, 0, 0, 0, 1, 2)
142
|| test_pooling(2, 5, 1, 1, 1, 1, 0, 0, 0, 0, 1, 3)
143
|| test_pooling(2, 5, 1, 1, 1, 1, 0, 0, 0, 0, 1, 4)
144
|| test_pooling(2, 5, 1, 1, 1, 1, 0, 0, 0, 0, 1, 5)
145
|| test_pooling(2, 5, 1, 1, 1, 1, 0, 0, 0, 0, 1, 6)
146
|| test_pooling(5, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 1)
147
|| test_pooling(5, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 2)
148
|| test_pooling(5, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 3)
149
|| test_pooling(5, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 4)
150
|| test_pooling(5, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 5)
151
|| test_pooling(5, 2, 1, 1, 1, 1, 0, 0, 0, 0, 1, 6)
152
|| test_pooling(3, 6, 3, 1, 1, 1, 0, 0, 0, 0, 1, 1)
153
|| test_pooling(3, 6, 3, 1, 1, 1, 0, 0, 0, 0, 1, 2)
154
|| test_pooling(3, 6, 3, 1, 1, 1, 0, 0, 0, 0, 1, 3)
155
|| test_pooling(3, 6, 3, 1, 1, 1, 0, 0, 0, 0, 1, 4)
156
|| test_pooling(3, 6, 3, 1, 1, 1, 0, 0, 0, 0, 1, 5)
157
|| test_pooling(3, 6, 3, 1, 1, 1, 0, 0, 0, 0, 1, 6)
158
|| test_pooling(4, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 1)
159
|| test_pooling(4, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 2)
160
|| test_pooling(4, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 3)
161
|| test_pooling(4, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 4)
162
|| test_pooling(4, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 5)
163
|| test_pooling(4, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 6)
164
|| test_pooling(4, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 7)
165
|| test_pooling(4, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 8)
166
|| test_pooling(6, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 1)
167
|| test_pooling(6, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 2)
168
|| test_pooling(6, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 3)
169
|| test_pooling(6, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 4)
170
|| test_pooling(6, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 5)
171
|| test_pooling(6, 4, 4, 1, 1, 1, 0, 0, 0, 0, 1, 6)
172
|| test_pooling(8, 7, 8, 1, 1, 1, 0, 0, 0, 0, 1, 1)
173
|| test_pooling(8, 7, 8, 1, 1, 1, 0, 0, 0, 0, 1, 2)
174
|| test_pooling(8, 7, 8, 1, 1, 1, 0, 0, 0, 0, 1, 3)
175
|| test_pooling(8, 7, 8, 1, 1, 1, 0, 0, 0, 0, 1, 4)
176
|| test_pooling(8, 7, 8, 1, 1, 1, 0, 0, 0, 0, 1, 5)
177
|| test_pooling(8, 7, 8, 1, 1, 1, 0, 0, 0, 0, 1, 6)
178
|| test_pooling(8, 7, 8, 1, 1, 1, 0, 0, 0, 0, 1, 7)
179
|| test_pooling(8, 7, 8, 1, 1, 1, 0, 0, 0, 0, 1, 8)
180
|| test_pooling(8, 7, 8, 1, 1, 1, 0, 0, 0, 0, 1, 9)
181
|| test_pooling(11, 13, 16, 1, 1, 1, 0, 0, 0, 1, 0, 1)
182
|| test_pooling(11, 13, 16, 1, 1, 1, 0, 0, 0, 1, 0, 3)
183
|| test_pooling(11, 13, 16, 1, 1, 1, 0, 0, 0, 1, 0, 5)
184
|| test_pooling(11, 13, 16, 1, 1, 1, 0, 0, 0, 1, 0, 7)
185
|| test_pooling(11, 13, 16, 1, 1, 1, 0, 0, 0, 1, 0, 9)
186
|| test_pooling(11, 13, 16, 1, 1, 1, 0, 0, 0, 1, 0, 11)
187
|| test_pooling(11, 13, 16, 1, 1, 1, 0, 0, 0, 1, 0, 13)
188
|| test_pooling(13, 11, 16, 1, 1, 1, 0, 0, 0, 1, 0, 2)
189
|| test_pooling(13, 11, 16, 1, 1, 1, 0, 0, 0, 1, 0, 4)
190
|| test_pooling(13, 11, 16, 1, 1, 1, 0, 0, 0, 1, 0, 6)
191
|| test_pooling(13, 11, 16, 1, 1, 1, 0, 0, 0, 1, 0, 8)
192
|| test_pooling(13, 11, 16, 1, 1, 1, 0, 0, 0, 1, 0, 10)
193
|| test_pooling(13, 11, 16, 1, 1, 1, 0, 0, 0, 1, 0, 12);
197
static int test_pooling_4()
200
|| test_pooling(2, 5, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1)
201
|| test_pooling(2, 5, 1, 0, 1, 1, 0, 0, 0, 0, 1, 2)
202
|| test_pooling(2, 5, 1, 0, 1, 1, 0, 0, 0, 0, 1, 3)
203
|| test_pooling(2, 5, 1, 0, 1, 1, 0, 0, 0, 0, 1, 4)
204
|| test_pooling(2, 5, 1, 0, 1, 1, 0, 0, 0, 0, 1, 5)
205
|| test_pooling(2, 5, 1, 0, 1, 1, 0, 0, 0, 0, 1, 6)
206
|| test_pooling(5, 2, 1, 0, 1, 1, 0, 0, 0, 0, 1, 1)
207
|| test_pooling(5, 2, 1, 0, 1, 1, 0, 0, 0, 0, 1, 2)
208
|| test_pooling(5, 2, 1, 0, 1, 1, 0, 0, 0, 0, 1, 3)
209
|| test_pooling(5, 2, 1, 0, 1, 1, 0, 0, 0, 0, 1, 4)
210
|| test_pooling(5, 2, 1, 0, 1, 1, 0, 0, 0, 0, 1, 5)
211
|| test_pooling(5, 2, 1, 0, 1, 1, 0, 0, 0, 0, 1, 6)
212
|| test_pooling(3, 6, 3, 0, 1, 1, 0, 0, 0, 0, 1, 1)
213
|| test_pooling(3, 6, 3, 0, 1, 1, 0, 0, 0, 0, 1, 2)
214
|| test_pooling(3, 6, 3, 0, 1, 1, 0, 0, 0, 0, 1, 3)
215
|| test_pooling(3, 6, 3, 0, 1, 1, 0, 0, 0, 0, 1, 4)
216
|| test_pooling(3, 6, 3, 0, 1, 1, 0, 0, 0, 0, 1, 5)
217
|| test_pooling(3, 6, 3, 0, 1, 1, 0, 0, 0, 0, 1, 6)
218
|| test_pooling(4, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 1)
219
|| test_pooling(4, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 2)
220
|| test_pooling(4, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 3)
221
|| test_pooling(4, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 4)
222
|| test_pooling(4, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 5)
223
|| test_pooling(4, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 6)
224
|| test_pooling(4, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 7)
225
|| test_pooling(4, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 8)
226
|| test_pooling(6, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 1)
227
|| test_pooling(6, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 2)
228
|| test_pooling(6, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 3)
229
|| test_pooling(6, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 4)
230
|| test_pooling(6, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 5)
231
|| test_pooling(6, 4, 4, 0, 1, 1, 0, 0, 0, 0, 1, 6)
232
|| test_pooling(8, 7, 8, 0, 1, 1, 0, 0, 0, 0, 1, 1)
233
|| test_pooling(8, 7, 8, 0, 1, 1, 0, 0, 0, 0, 1, 2)
234
|| test_pooling(8, 7, 8, 0, 1, 1, 0, 0, 0, 0, 1, 3)
235
|| test_pooling(8, 7, 8, 0, 1, 1, 0, 0, 0, 0, 1, 4)
236
|| test_pooling(8, 7, 8, 0, 1, 1, 0, 0, 0, 0, 1, 5)
237
|| test_pooling(8, 7, 8, 0, 1, 1, 0, 0, 0, 0, 1, 6)
238
|| test_pooling(8, 7, 8, 0, 1, 1, 0, 0, 0, 0, 1, 7)
239
|| test_pooling(8, 7, 8, 0, 1, 1, 0, 0, 0, 0, 1, 8)
240
|| test_pooling(8, 7, 8, 0, 1, 1, 0, 0, 0, 0, 1, 9)
241
|| test_pooling(11, 13, 16, 0, 1, 1, 0, 0, 0, 1, 0, 1)
242
|| test_pooling(11, 13, 16, 0, 1, 1, 0, 0, 0, 1, 0, 3)
243
|| test_pooling(11, 13, 16, 0, 1, 1, 0, 0, 0, 1, 0, 5)
244
|| test_pooling(11, 13, 16, 0, 1, 1, 0, 0, 0, 1, 0, 7)
245
|| test_pooling(11, 13, 16, 0, 1, 1, 0, 0, 0, 1, 0, 9)
246
|| test_pooling(11, 13, 16, 0, 1, 1, 0, 0, 0, 1, 0, 11)
247
|| test_pooling(11, 13, 16, 0, 1, 1, 0, 0, 0, 1, 0, 13)
248
|| test_pooling(13, 11, 16, 0, 1, 1, 0, 0, 0, 1, 0, 2)
249
|| test_pooling(13, 11, 16, 0, 1, 1, 0, 0, 0, 1, 0, 4)
250
|| test_pooling(13, 11, 16, 0, 1, 1, 0, 0, 0, 1, 0, 6)
251
|| test_pooling(13, 11, 16, 0, 1, 1, 0, 0, 0, 1, 0, 8)
252
|| test_pooling(13, 11, 16, 0, 1, 1, 0, 0, 0, 1, 0, 10)
253
|| test_pooling(13, 11, 16, 0, 1, 1, 0, 0, 0, 1, 0, 12);