ncnn

Форк
0
/
test_tile.cpp 
232 строки · 6.4 Кб
1
// Tencent is pleased to support the open source community by making ncnn available.
2
//
3
// Copyright (C) 2022 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_tile(const ncnn::Mat& a, int axis, int tiles)
18
{
19
    ncnn::ParamDict pd;
20
    pd.set(0, axis);
21
    pd.set(1, tiles);
22

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

25
    int ret = test_layer("Tile", pd, weights, a);
26
    if (ret != 0)
27
    {
28
        fprintf(stderr, "test_tile failed a.dims=%d a=(%d %d %d %d) axis=%d tiles=%d\n", a.dims, a.w, a.h, a.d, a.c, axis, tiles);
29
    }
30

31
    return ret;
32
}
33

34
static ncnn::Mat IntArrayMat(int a0)
35
{
36
    ncnn::Mat m(1);
37
    int* p = m;
38
    p[0] = a0;
39
    return m;
40
}
41

42
static ncnn::Mat IntArrayMat(int a0, int a1)
43
{
44
    ncnn::Mat m(2);
45
    int* p = m;
46
    p[0] = a0;
47
    p[1] = a1;
48
    return m;
49
}
50

51
static ncnn::Mat IntArrayMat(int a0, int a1, int a2)
52
{
53
    ncnn::Mat m(3);
54
    int* p = m;
55
    p[0] = a0;
56
    p[1] = a1;
57
    p[2] = a2;
58
    return m;
59
}
60

61
static ncnn::Mat IntArrayMat(int a0, int a1, int a2, int a3)
62
{
63
    ncnn::Mat m(4);
64
    int* p = m;
65
    p[0] = a0;
66
    p[1] = a1;
67
    p[2] = a2;
68
    p[3] = a3;
69
    return m;
70
}
71

72
static void print_int_array(const ncnn::Mat& a)
73
{
74
    const int* pa = a;
75

76
    fprintf(stderr, "[");
77
    for (int i = 0; i < a.w; i++)
78
    {
79
        fprintf(stderr, " %d", pa[i]);
80
    }
81
    fprintf(stderr, " ]");
82
}
83

84
static int test_tile(const ncnn::Mat& a, const ncnn::Mat& repeats)
85
{
86
    ncnn::ParamDict pd;
87
    pd.set(2, repeats);
88

89
    std::vector<ncnn::Mat> weights(0);
90

91
    int ret = test_layer("Tile", pd, weights, a);
92
    if (ret != 0)
93
    {
94
        fprintf(stderr, "test_tile failed a.dims=%d a=(%d %d %d %d) repeats=", a.dims, a.w, a.h, a.d, a.c);
95
        print_int_array(repeats);
96
        fprintf(stderr, "\n");
97
    }
98

99
    return ret;
100
}
101

102
static int test_tile_0()
103
{
104
    ncnn::Mat a = RandomMat(5, 6, 7, 24);
105
    ncnn::Mat b = RandomMat(7, 8, 9, 12);
106
    ncnn::Mat c = RandomMat(3, 4, 5, 13);
107

108
    return 0
109
           || test_tile(a, 0, 3)
110
           || test_tile(a, 1, 4)
111
           || test_tile(a, 2, 5)
112
           || test_tile(a, 3, 2)
113
           || test_tile(b, 0, 3)
114
           || test_tile(b, 1, 4)
115
           || test_tile(b, 2, 1)
116
           || test_tile(b, 3, 2)
117
           || test_tile(c, 0, 3)
118
           || test_tile(c, 1, 4)
119
           || test_tile(c, 2, 5)
120
           || test_tile(c, 3, 2)
121

122
           || test_tile(a, IntArrayMat(3))
123
           || test_tile(a, IntArrayMat(2, 4))
124
           || test_tile(a, IntArrayMat(2, 2, 5))
125
           || test_tile(a, IntArrayMat(3, 1, 3, 2))
126
           || test_tile(b, IntArrayMat(3, 1))
127
           || test_tile(b, IntArrayMat(4, 1, 4))
128
           || test_tile(b, IntArrayMat(2, 2, 2, 1))
129
           || test_tile(b, IntArrayMat(3, 2, 1))
130
           || test_tile(c, IntArrayMat(3))
131
           || test_tile(c, IntArrayMat(1, 1, 4))
132
           || test_tile(c, IntArrayMat(2, 2, 5))
133
           || test_tile(c, IntArrayMat(3, 2, 1, 9));
134
}
135

136
static int test_tile_1()
137
{
138
    ncnn::Mat a = RandomMat(5, 7, 24);
139
    ncnn::Mat b = RandomMat(7, 9, 12);
140
    ncnn::Mat c = RandomMat(3, 5, 13);
141

142
    return 0
143
           || test_tile(a, 0, 5)
144
           || test_tile(a, 1, 4)
145
           || test_tile(a, 2, 4)
146
           || test_tile(b, 0, 3)
147
           || test_tile(b, 1, 3)
148
           || test_tile(b, 2, 3)
149
           || test_tile(c, 0, 1)
150
           || test_tile(c, 1, 2)
151
           || test_tile(c, 2, 2)
152

153
           || test_tile(a, IntArrayMat(5))
154
           || test_tile(a, IntArrayMat(1, 4))
155
           || test_tile(a, IntArrayMat(2, 1, 4))
156
           || test_tile(a, IntArrayMat(1, 2, 1, 4))
157
           || test_tile(b, IntArrayMat(3))
158
           || test_tile(b, IntArrayMat(1, 3, 3))
159
           || test_tile(b, IntArrayMat(2, 3))
160
           || test_tile(b, IntArrayMat(2, 3, 3, 3))
161
           || test_tile(c, IntArrayMat(1))
162
           || test_tile(c, IntArrayMat(2, 1))
163
           || test_tile(c, IntArrayMat(2, 2, 2))
164
           || test_tile(c, IntArrayMat(2, 1, 2, 1));
165
}
166

167
static int test_tile_2()
168
{
169
    ncnn::Mat a = RandomMat(15, 24);
170
    ncnn::Mat b = RandomMat(17, 12);
171
    ncnn::Mat c = RandomMat(19, 13);
172

173
    return 0
174
           || test_tile(a, 0, 2)
175
           || test_tile(a, 1, 1)
176
           || test_tile(b, 0, 3)
177
           || test_tile(b, 1, 4)
178
           || test_tile(c, 0, 5)
179
           || test_tile(c, 1, 6)
180

181
           || test_tile(a, IntArrayMat(2))
182
           || test_tile(a, IntArrayMat(1, 1))
183
           || test_tile(a, IntArrayMat(4, 1, 1))
184
           || test_tile(a, IntArrayMat(2, 4, 4, 1))
185
           || test_tile(b, IntArrayMat(3))
186
           || test_tile(b, IntArrayMat(2, 4))
187
           || test_tile(b, IntArrayMat(2, 4, 3, 1))
188
           || test_tile(b, IntArrayMat(1, 2, 1, 4))
189
           || test_tile(c, IntArrayMat(5))
190
           || test_tile(c, IntArrayMat(6, 1))
191
           || test_tile(c, IntArrayMat(6, 1, 6))
192
           || test_tile(c, IntArrayMat(3, 2, 1, 1));
193
}
194

195
static int test_tile_3()
196
{
197
    ncnn::Mat a = RandomMat(128);
198
    ncnn::Mat b = RandomMat(124);
199
    ncnn::Mat c = RandomMat(127);
200

201
    return 0
202
           || test_tile(a, 0, 1)
203
           || test_tile(a, 0, 2)
204
           || test_tile(b, 0, 3)
205
           || test_tile(c, 0, 4)
206

207
           || test_tile(a, IntArrayMat(10))
208
           || test_tile(a, IntArrayMat(10, 1))
209
           || test_tile(a, IntArrayMat(5, 2, 1))
210
           || test_tile(a, IntArrayMat(2, 2, 2, 3))
211
           || test_tile(b, IntArrayMat(2))
212
           || test_tile(b, IntArrayMat(2, 2))
213
           || test_tile(b, IntArrayMat(2, 2, 1))
214
           || test_tile(b, IntArrayMat(4, 1, 2, 2))
215
           || test_tile(c, IntArrayMat(3))
216
           || test_tile(c, IntArrayMat(4, 3))
217
           || test_tile(c, IntArrayMat(1))
218
           || test_tile(c, IntArrayMat(1, 1))
219
           || test_tile(c, IntArrayMat(1, 1, 1))
220
           || test_tile(c, IntArrayMat(1, 3, 2, 2));
221
}
222

223
int main()
224
{
225
    SRAND(7767517);
226

227
    return 0
228
           || test_tile_0()
229
           || test_tile_1()
230
           || test_tile_2()
231
           || test_tile_3();
232
}
233

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

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

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

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