ncnn

Форк
0
/
test_eltwise.cpp 
374 строки · 10.8 Кб
1
// Tencent is pleased to support the open source community by making ncnn available.
2
//
3
// Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
4
//
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
7
//
8
// https://opensource.org/licenses/BSD-3-Clause
9
//
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.
14

15
#include "testutil.h"
16

17
static void print_float_array(const ncnn::Mat& a)
18
{
19
    fprintf(stderr, "[");
20
    for (int i = 0; i < a.w; i++)
21
    {
22
        fprintf(stderr, " %f", a[i]);
23
    }
24
    fprintf(stderr, " ]");
25
}
26

27
static int test_eltwise(const std::vector<ncnn::Mat>& a, int op_type, const ncnn::Mat& coeffs)
28
{
29
    ncnn::ParamDict pd;
30
    pd.set(0, op_type);
31
    pd.set(1, coeffs);
32

33
    std::vector<ncnn::Mat> weights(0);
34

35
    int ret = test_layer("Eltwise", pd, weights, a);
36
    if (ret != 0)
37
    {
38
        fprintf(stderr, "test_eltwise failed a[0].dims=%d a[0]=(%d %d %d %d) op_type=%d", a[0].dims, a[0].w, a[0].h, a[0].d, a[0].c, op_type);
39
        fprintf(stderr, " coeffs=");
40
        print_float_array(coeffs);
41
        fprintf(stderr, "\n");
42
    }
43

44
    return ret;
45
}
46

47
static int test_eltwise_0()
48
{
49
    std::vector<ncnn::Mat> a(2);
50
    a[0] = RandomMat(16, 12, 12);
51
    a[1] = RandomMat(16, 12, 12);
52

53
    std::vector<ncnn::Mat> b(2);
54
    b[0] = RandomMat(15, 11, 24);
55
    b[1] = RandomMat(15, 11, 24);
56

57
    std::vector<ncnn::Mat> c(2);
58
    c[0] = RandomMat(9, 5, 7);
59
    c[1] = RandomMat(9, 5, 7);
60

61
    return 0
62
           || test_eltwise(a, 0, ncnn::Mat())
63
           || test_eltwise(a, 1, ncnn::Mat())
64
           || test_eltwise(a, 2, ncnn::Mat())
65
           || test_eltwise(b, 0, ncnn::Mat())
66
           || test_eltwise(b, 1, ncnn::Mat())
67
           || test_eltwise(b, 2, ncnn::Mat())
68
           || test_eltwise(c, 0, ncnn::Mat())
69
           || test_eltwise(c, 1, ncnn::Mat())
70
           || test_eltwise(c, 2, ncnn::Mat())
71

72
           || test_eltwise(a, 0, RandomMat(2))
73
           || test_eltwise(a, 1, RandomMat(2))
74
           || test_eltwise(a, 2, RandomMat(2))
75
           || test_eltwise(b, 0, RandomMat(2))
76
           || test_eltwise(b, 1, RandomMat(2))
77
           || test_eltwise(b, 2, RandomMat(2))
78
           || test_eltwise(c, 0, RandomMat(2))
79
           || test_eltwise(c, 1, RandomMat(2))
80
           || test_eltwise(c, 2, RandomMat(2));
81
}
82

83
static int test_eltwise_1()
84
{
85
    std::vector<ncnn::Mat> a(3);
86
    a[0] = RandomMat(15, 11, 16);
87
    a[1] = RandomMat(15, 11, 16);
88
    a[2] = RandomMat(15, 11, 16);
89

90
    return 0
91
           || test_eltwise(a, 0, ncnn::Mat())
92
           || test_eltwise(a, 1, ncnn::Mat())
93
           || test_eltwise(a, 2, ncnn::Mat())
94

95
           || test_eltwise(a, 0, RandomMat(3))
96
           || test_eltwise(a, 1, RandomMat(3))
97
           || test_eltwise(a, 2, RandomMat(3));
98
}
99

100
static int test_eltwise_2()
101
{
102
    std::vector<ncnn::Mat> a(4);
103
    a[0] = RandomMat(7, 3, 5);
104
    a[1] = RandomMat(7, 3, 5);
105
    a[2] = RandomMat(7, 3, 5);
106
    a[3] = RandomMat(7, 3, 5);
107

108
    return 0
109
           || test_eltwise(a, 0, ncnn::Mat())
110
           || test_eltwise(a, 1, ncnn::Mat())
111
           || test_eltwise(a, 2, ncnn::Mat())
112

113
           || test_eltwise(a, 0, RandomMat(4))
114
           || test_eltwise(a, 1, RandomMat(4))
115
           || test_eltwise(a, 2, RandomMat(4));
116
}
117

118
static int test_eltwise_3()
119
{
120
    std::vector<ncnn::Mat> a(5);
121
    a[0] = RandomMat(12, 4, 16);
122
    a[1] = RandomMat(12, 4, 16);
123
    a[2] = RandomMat(12, 4, 16);
124
    a[3] = RandomMat(12, 4, 16);
125
    a[4] = RandomMat(12, 4, 16);
126

127
    return 0
128
           || test_eltwise(a, 0, ncnn::Mat())
129
           || test_eltwise(a, 1, ncnn::Mat())
130
           || test_eltwise(a, 2, ncnn::Mat())
131

132
           || test_eltwise(a, 0, RandomMat(5))
133
           || test_eltwise(a, 1, RandomMat(5))
134
           || test_eltwise(a, 2, RandomMat(5));
135
}
136

137
static int test_eltwise_4()
138
{
139
    std::vector<ncnn::Mat> a(2);
140
    a[0] = RandomMat(16, 12);
141
    a[1] = RandomMat(16, 12);
142

143
    std::vector<ncnn::Mat> b(2);
144
    b[0] = RandomMat(11, 24);
145
    b[1] = RandomMat(11, 24);
146

147
    std::vector<ncnn::Mat> c(2);
148
    c[0] = RandomMat(9, 7);
149
    c[1] = RandomMat(9, 7);
150

151
    return 0
152
           || test_eltwise(a, 0, ncnn::Mat())
153
           || test_eltwise(a, 1, ncnn::Mat())
154
           || test_eltwise(a, 2, ncnn::Mat())
155
           || test_eltwise(b, 0, ncnn::Mat())
156
           || test_eltwise(b, 1, ncnn::Mat())
157
           || test_eltwise(b, 2, ncnn::Mat())
158
           || test_eltwise(c, 0, ncnn::Mat())
159
           || test_eltwise(c, 1, ncnn::Mat())
160
           || test_eltwise(c, 2, ncnn::Mat())
161

162
           || test_eltwise(a, 0, RandomMat(2))
163
           || test_eltwise(a, 1, RandomMat(2))
164
           || test_eltwise(a, 2, RandomMat(2))
165
           || test_eltwise(b, 0, RandomMat(2))
166
           || test_eltwise(b, 1, RandomMat(2))
167
           || test_eltwise(b, 2, RandomMat(2))
168
           || test_eltwise(c, 0, RandomMat(2))
169
           || test_eltwise(c, 1, RandomMat(2))
170
           || test_eltwise(c, 2, RandomMat(2));
171
}
172

173
static int test_eltwise_5()
174
{
175
    std::vector<ncnn::Mat> a(3);
176
    a[0] = RandomMat(15, 16);
177
    a[1] = RandomMat(15, 16);
178
    a[2] = RandomMat(15, 16);
179

180
    return 0
181
           || test_eltwise(a, 0, ncnn::Mat())
182
           || test_eltwise(a, 1, ncnn::Mat())
183
           || test_eltwise(a, 2, ncnn::Mat())
184

185
           || test_eltwise(a, 0, RandomMat(3))
186
           || test_eltwise(a, 1, RandomMat(3))
187
           || test_eltwise(a, 2, RandomMat(3));
188
}
189

190
static int test_eltwise_6()
191
{
192
    std::vector<ncnn::Mat> a(4);
193
    a[0] = RandomMat(7, 5);
194
    a[1] = RandomMat(7, 5);
195
    a[2] = RandomMat(7, 5);
196
    a[3] = RandomMat(7, 5);
197

198
    return 0
199
           || test_eltwise(a, 0, ncnn::Mat())
200
           || test_eltwise(a, 1, ncnn::Mat())
201
           || test_eltwise(a, 2, ncnn::Mat())
202

203
           || test_eltwise(a, 0, RandomMat(4))
204
           || test_eltwise(a, 1, RandomMat(4))
205
           || test_eltwise(a, 2, RandomMat(4));
206
}
207

208
static int test_eltwise_7()
209
{
210
    std::vector<ncnn::Mat> a(5);
211
    a[0] = RandomMat(12, 16);
212
    a[1] = RandomMat(12, 16);
213
    a[2] = RandomMat(12, 16);
214
    a[3] = RandomMat(12, 16);
215
    a[4] = RandomMat(12, 16);
216

217
    return 0
218
           || test_eltwise(a, 0, ncnn::Mat())
219
           || test_eltwise(a, 1, ncnn::Mat())
220
           || test_eltwise(a, 2, ncnn::Mat())
221

222
           || test_eltwise(a, 0, RandomMat(5))
223
           || test_eltwise(a, 1, RandomMat(5))
224
           || test_eltwise(a, 2, RandomMat(5));
225
}
226

227
static int test_eltwise_8()
228
{
229
    std::vector<ncnn::Mat> a(2);
230
    a[0] = RandomMat(12);
231
    a[1] = RandomMat(12);
232

233
    std::vector<ncnn::Mat> b(2);
234
    b[0] = RandomMat(24);
235
    b[1] = RandomMat(24);
236

237
    std::vector<ncnn::Mat> c(2);
238
    c[0] = RandomMat(19);
239
    c[1] = RandomMat(19);
240

241
    return 0
242
           || test_eltwise(a, 0, ncnn::Mat())
243
           || test_eltwise(a, 1, ncnn::Mat())
244
           || test_eltwise(a, 2, ncnn::Mat())
245
           || test_eltwise(b, 0, ncnn::Mat())
246
           || test_eltwise(b, 1, ncnn::Mat())
247
           || test_eltwise(b, 2, ncnn::Mat())
248
           || test_eltwise(c, 0, ncnn::Mat())
249
           || test_eltwise(c, 1, ncnn::Mat())
250
           || test_eltwise(c, 2, ncnn::Mat())
251

252
           || test_eltwise(a, 0, RandomMat(2))
253
           || test_eltwise(a, 1, RandomMat(2))
254
           || test_eltwise(a, 2, RandomMat(2))
255
           || test_eltwise(b, 0, RandomMat(2))
256
           || test_eltwise(b, 1, RandomMat(2))
257
           || test_eltwise(b, 2, RandomMat(2))
258
           || test_eltwise(c, 0, RandomMat(2))
259
           || test_eltwise(c, 1, RandomMat(2))
260
           || test_eltwise(c, 2, RandomMat(2));
261
}
262

263
static int test_eltwise_9()
264
{
265
    std::vector<ncnn::Mat> a(3);
266
    a[0] = RandomMat(36);
267
    a[1] = RandomMat(36);
268
    a[2] = RandomMat(36);
269

270
    return 0
271
           || test_eltwise(a, 0, ncnn::Mat())
272
           || test_eltwise(a, 1, ncnn::Mat())
273
           || test_eltwise(a, 2, ncnn::Mat())
274

275
           || test_eltwise(a, 0, RandomMat(3))
276
           || test_eltwise(a, 1, RandomMat(3))
277
           || test_eltwise(a, 2, RandomMat(3));
278
}
279

280
static int test_eltwise_10()
281
{
282
    std::vector<ncnn::Mat> a(4);
283
    a[0] = RandomMat(15);
284
    a[1] = RandomMat(15);
285
    a[2] = RandomMat(15);
286
    a[3] = RandomMat(15);
287

288
    return 0
289
           || test_eltwise(a, 0, ncnn::Mat())
290
           || test_eltwise(a, 1, ncnn::Mat())
291
           || test_eltwise(a, 2, ncnn::Mat())
292

293
           || test_eltwise(a, 0, RandomMat(4))
294
           || test_eltwise(a, 1, RandomMat(4))
295
           || test_eltwise(a, 2, RandomMat(4));
296
}
297

298
static int test_eltwise_11()
299
{
300
    std::vector<ncnn::Mat> a(5);
301
    a[0] = RandomMat(16);
302
    a[1] = RandomMat(16);
303
    a[2] = RandomMat(16);
304
    a[3] = RandomMat(16);
305
    a[4] = RandomMat(16);
306

307
    return 0
308
           || test_eltwise(a, 0, ncnn::Mat())
309
           || test_eltwise(a, 1, ncnn::Mat())
310
           || test_eltwise(a, 2, ncnn::Mat())
311

312
           || test_eltwise(a, 0, RandomMat(5))
313
           || test_eltwise(a, 1, RandomMat(5))
314
           || test_eltwise(a, 2, RandomMat(5));
315
}
316

317
static int test_eltwise_12()
318
{
319
    std::vector<ncnn::Mat> a(2);
320
    a[0] = RandomMat(31, 5, 3, 12);
321
    a[1] = RandomMat(31, 5, 3, 12);
322

323
    std::vector<ncnn::Mat> b(3);
324
    b[0] = RandomMat(32, 4, 5, 32);
325
    b[1] = RandomMat(32, 4, 5, 32);
326
    b[2] = RandomMat(32, 4, 5, 32);
327

328
    std::vector<ncnn::Mat> c(4);
329
    c[0] = RandomMat(33, 6, 7, 7);
330
    c[1] = RandomMat(33, 6, 7, 7);
331
    c[2] = RandomMat(33, 6, 7, 7);
332
    c[3] = RandomMat(33, 6, 7, 7);
333

334
    return 0
335
           || test_eltwise(a, 0, ncnn::Mat())
336
           || test_eltwise(a, 1, ncnn::Mat())
337
           || test_eltwise(a, 2, ncnn::Mat())
338
           || test_eltwise(b, 0, ncnn::Mat())
339
           || test_eltwise(b, 1, ncnn::Mat())
340
           || test_eltwise(b, 2, ncnn::Mat())
341
           || test_eltwise(c, 0, ncnn::Mat())
342
           || test_eltwise(c, 1, ncnn::Mat())
343
           || test_eltwise(c, 2, ncnn::Mat())
344

345
           || test_eltwise(a, 0, RandomMat(2))
346
           || test_eltwise(a, 1, RandomMat(2))
347
           || test_eltwise(a, 2, RandomMat(2))
348
           || test_eltwise(b, 0, RandomMat(3))
349
           || test_eltwise(b, 1, RandomMat(3))
350
           || test_eltwise(b, 2, RandomMat(3))
351
           || test_eltwise(c, 0, RandomMat(4))
352
           || test_eltwise(c, 1, RandomMat(4))
353
           || test_eltwise(c, 2, RandomMat(4));
354
}
355

356
int main()
357
{
358
    SRAND(7767517);
359

360
    return 0
361
           || test_eltwise_0()
362
           || test_eltwise_1()
363
           || test_eltwise_2()
364
           || test_eltwise_3()
365
           || test_eltwise_4()
366
           || test_eltwise_5()
367
           || test_eltwise_6()
368
           || test_eltwise_7()
369
           || test_eltwise_8()
370
           || test_eltwise_9()
371
           || test_eltwise_10()
372
           || test_eltwise_11()
373
           || test_eltwise_12();
374
}
375

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.