ncnn

Форк
0
/
test_concat.cpp 
336 строк · 7.1 Кб
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 int test_concat(const std::vector<ncnn::Mat>& a, int axis)
18
{
19
    ncnn::ParamDict pd;
20
    pd.set(0, axis); //axis
21

22
    std::vector<ncnn::Mat> weights(0);
23

24
    int ret = test_layer("Concat", pd, weights, a);
25
    if (ret != 0)
26
    {
27
        fprintf(stderr, "test_concat failed a[0].dims=%d a[0]=(%d %d %d %d) axis=%d\n", a[0].dims, a[0].w, a[0].h, a[0].d, a[0].c, axis);
28
    }
29

30
    return ret;
31
}
32

33
static int test_concat_0()
34
{
35
    ncnn::Mat a[] = {
36
        RandomMat(15, 5, 6, 13),
37
        RandomMat(15, 5, 6, 20),
38
        RandomMat(15, 5, 6, 24),
39
        RandomMat(15, 5, 6, 48)
40
    };
41

42
    const int n = sizeof(a) / sizeof(a[0]);
43

44
    for (int i = 0; i < n; i++)
45
    {
46
        for (int j = 0; j < n; j++)
47
        {
48
            for (int k = 0; k < n; k++)
49
            {
50
                std::vector<ncnn::Mat> as(4);
51
                as[0] = a[i];
52
                as[1] = a[j];
53
                as[2] = a[k];
54
                as[3] = a[k];
55

56
                int ret = test_concat(as, 0) || test_concat(as, -4);
57
                if (ret != 0)
58
                    return ret;
59
            }
60
        }
61
    }
62

63
    return 0;
64
}
65

66
static int test_concat_1()
67
{
68
    ncnn::Mat a[] = {
69
        RandomMat(15, 3, 15, 13),
70
        RandomMat(15, 3, 16, 20),
71
        RandomMat(15, 3, 17, 24),
72
        RandomMat(15, 3, 18, 48)
73
    };
74

75
    const int n = sizeof(a) / sizeof(a[0]);
76

77
    for (int i = 0; i < n; i++)
78
    {
79
        std::vector<ncnn::Mat> as(3);
80
        as[0] = a[i];
81
        as[1] = a[i];
82
        as[2] = a[i];
83

84
        int ret = test_concat(as, 1) || test_concat(as, -3);
85
        if (ret != 0)
86
            return ret;
87
    }
88

89
    return 0;
90
}
91

92
static int test_concat_2()
93
{
94
    ncnn::Mat a[] = {
95
        RandomMat(15, 15, 6, 13),
96
        RandomMat(15, 16, 6, 20),
97
        RandomMat(15, 17, 6, 24),
98
        RandomMat(15, 18, 6, 48)
99
    };
100

101
    const int n = sizeof(a) / sizeof(a[0]);
102

103
    for (int i = 0; i < n; i++)
104
    {
105
        std::vector<ncnn::Mat> as(3);
106
        as[0] = a[i];
107
        as[1] = a[i];
108
        as[2] = a[i];
109

110
        int ret = test_concat(as, 2) || test_concat(as, -2);
111
        if (ret != 0)
112
            return ret;
113
    }
114

115
    return 0;
116
}
117

118
static int test_concat_3()
119
{
120
    ncnn::Mat a[] = {
121
        RandomMat(15, 5, 7, 13),
122
        RandomMat(16, 5, 7, 20),
123
        RandomMat(17, 5, 7, 24),
124
        RandomMat(18, 5, 7, 48)
125
    };
126

127
    const int n = sizeof(a) / sizeof(a[0]);
128

129
    for (int i = 0; i < n; i++)
130
    {
131
        std::vector<ncnn::Mat> as(3);
132
        as[0] = a[i];
133
        as[1] = a[i];
134
        as[2] = a[i];
135

136
        int ret = test_concat(as, 3) || test_concat(as, -1);
137
        if (ret != 0)
138
            return ret;
139
    }
140

141
    return 0;
142
}
143

144
static int test_concat_4()
145
{
146
    ncnn::Mat a[] = {
147
        RandomMat(15, 13, 13),
148
        RandomMat(15, 13, 20),
149
        RandomMat(15, 13, 24),
150
        RandomMat(15, 13, 48)
151
    };
152

153
    const int n = sizeof(a) / sizeof(a[0]);
154

155
    for (int i = 0; i < n; i++)
156
    {
157
        for (int j = 0; j < n; j++)
158
        {
159
            for (int k = 0; k < n; k++)
160
            {
161
                std::vector<ncnn::Mat> as(4);
162
                as[0] = a[i];
163
                as[1] = a[j];
164
                as[2] = a[k];
165
                as[3] = a[k];
166

167
                int ret = test_concat(as, 0) || test_concat(as, -3);
168
                if (ret != 0)
169
                    return ret;
170
            }
171
        }
172
    }
173

174
    return 0;
175
}
176

177
static int test_concat_5()
178
{
179
    ncnn::Mat a[] = {
180
        RandomMat(15, 15, 13),
181
        RandomMat(15, 16, 20),
182
        RandomMat(15, 17, 24),
183
        RandomMat(15, 18, 48)
184
    };
185

186
    const int n = sizeof(a) / sizeof(a[0]);
187

188
    for (int i = 0; i < n; i++)
189
    {
190
        std::vector<ncnn::Mat> as(3);
191
        as[0] = a[i];
192
        as[1] = a[i];
193
        as[2] = a[i];
194

195
        int ret = test_concat(as, 1) || test_concat(as, -2);
196
        if (ret != 0)
197
            return ret;
198
    }
199

200
    return 0;
201
}
202

203
static int test_concat_6()
204
{
205
    ncnn::Mat a[] = {
206
        RandomMat(15, 13, 13),
207
        RandomMat(16, 13, 20),
208
        RandomMat(17, 13, 24),
209
        RandomMat(18, 13, 48)
210
    };
211

212
    const int n = sizeof(a) / sizeof(a[0]);
213

214
    for (int i = 0; i < n; i++)
215
    {
216
        std::vector<ncnn::Mat> as(3);
217
        as[0] = a[i];
218
        as[1] = a[i];
219
        as[2] = a[i];
220

221
        int ret = test_concat(as, 2) || test_concat(as, -1);
222
        if (ret != 0)
223
            return ret;
224
    }
225

226
    return 0;
227
}
228

229
static int test_concat_7()
230
{
231
    ncnn::Mat a[] = {
232
        RandomMat(19, 29),
233
        RandomMat(19, 44),
234
        RandomMat(19, 56),
235
        RandomMat(19, 80)
236
    };
237

238
    const int n = sizeof(a) / sizeof(a[0]);
239

240
    for (int i = 0; i < n; i++)
241
    {
242
        for (int j = 0; j < n; j++)
243
        {
244
            for (int k = 0; k < n; k++)
245
            {
246
                std::vector<ncnn::Mat> as(4);
247
                as[0] = a[i];
248
                as[1] = a[j];
249
                as[2] = a[k];
250
                as[3] = a[k];
251

252
                int ret = test_concat(as, 0) || test_concat(as, -2);
253
                if (ret != 0)
254
                    return ret;
255
            }
256
        }
257
    }
258

259
    return 0;
260
}
261

262
static int test_concat_8()
263
{
264
    ncnn::Mat a[] = {
265
        RandomMat(19, 29),
266
        RandomMat(16, 44),
267
        RandomMat(17, 56),
268
        RandomMat(18, 80)
269
    };
270

271
    const int n = sizeof(a) / sizeof(a[0]);
272

273
    for (int i = 0; i < n; i++)
274
    {
275
        std::vector<ncnn::Mat> as(3);
276
        as[0] = a[i];
277
        as[1] = a[i];
278
        as[2] = a[i];
279

280
        int ret = test_concat(as, 1) || test_concat(as, -1);
281
        if (ret != 0)
282
            return ret;
283
    }
284

285
    return 0;
286
}
287

288
static int test_concat_9()
289
{
290
    ncnn::Mat a[] = {
291
        RandomMat(29),
292
        RandomMat(44),
293
        RandomMat(56),
294
        RandomMat(80)
295
    };
296

297
    const int n = sizeof(a) / sizeof(a[0]);
298

299
    for (int i = 0; i < n; i++)
300
    {
301
        for (int j = 0; j < n; j++)
302
        {
303
            for (int k = 0; k < n; k++)
304
            {
305
                std::vector<ncnn::Mat> as(4);
306
                as[0] = a[i];
307
                as[1] = a[j];
308
                as[2] = a[k];
309
                as[3] = a[k];
310

311
                int ret = test_concat(as, 0) || test_concat(as, -1);
312
                if (ret != 0)
313
                    return ret;
314
            }
315
        }
316
    }
317

318
    return 0;
319
}
320

321
int main()
322
{
323
    SRAND(7767517);
324

325
    return 0
326
           || test_concat_0()
327
           || test_concat_1()
328
           || test_concat_2()
329
           || test_concat_3()
330
           || test_concat_4()
331
           || test_concat_5()
332
           || test_concat_6()
333
           || test_concat_7()
334
           || test_concat_8()
335
           || test_concat_9();
336
}
337

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

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

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

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