onnx_test.cpp 8.27 KB
Newer Older
Scott Thornton's avatar
Scott Thornton committed
1
2
#include <iostream>
#include <vector>
Paul's avatar
Paul committed
3
4
5
6
7
#include <migraphx/literal.hpp>
#include <migraphx/operators.hpp>
#include <migraphx/program.hpp>
#include <migraphx/instruction.hpp>
#include <migraphx/onnx.hpp>
Scott Thornton's avatar
Scott Thornton committed
8
9
10
11
#include "test.hpp"

void pytorch_conv_bias_test()
{
Paul's avatar
Paul committed
12
13
14
15
    migraphx::program p;
    auto l0       = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1       = p.add_parameter("1", {migraphx::shape::float_type, {1, 3, 5, 5}});
    auto l2       = p.add_parameter("2", {migraphx::shape::float_type, {1}});
Scott Thornton's avatar
Scott Thornton committed
16
    uint64_t axis = 1;
Paul's avatar
Paul committed
17
18
19
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape()}, l2);
    p.add_instruction(migraphx::op::add{}, l3, l4);
Scott Thornton's avatar
Scott Thornton committed
20

Paul's avatar
Paul committed
21
    auto prog = migraphx::parse_onnx("conv.onnx");
Scott Thornton's avatar
Scott Thornton committed
22
23
24
25
26
    EXPECT(p == prog);
}

void pytorch_conv_relu_maxpool()
{
Paul's avatar
Paul committed
27
28
29
30
    migraphx::program p;
    auto l0       = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1       = p.add_parameter("1", {migraphx::shape::float_type, {1, 3, 5, 5}});
    auto l2       = p.add_parameter("2", {migraphx::shape::float_type, {1}});
Scott Thornton's avatar
Scott Thornton committed
31
    uint64_t axis = 1;
Paul's avatar
Paul committed
32
33
34
35
36
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape()}, l2);
    auto l5       = p.add_instruction(migraphx::op::add{}, l3, l4);
    auto l6       = p.add_instruction(migraphx::op::relu{}, l5);
    p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l6);
Scott Thornton's avatar
Scott Thornton committed
37

Paul's avatar
Paul committed
38
    auto prog = migraphx::parse_onnx("conv_relu_maxpool.onnx");
Scott Thornton's avatar
Scott Thornton committed
39
40
41
    EXPECT(p == prog);
}

42
43
void pytorch_conv_bn_relu_maxpool()
{
Paul's avatar
Paul committed
44
45
46
47
48
49
50
51
52
    migraphx::program p;
    auto l0 = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1 = p.add_parameter("1", {migraphx::shape::float_type, {1, 3, 5, 5}});
    auto l2 = p.add_parameter("2", {migraphx::shape::float_type, {1}});

    auto p3       = p.add_parameter("3", {migraphx::shape::float_type, {1}});
    auto p4       = p.add_parameter("4", {migraphx::shape::float_type, {1}});
    auto p5       = p.add_parameter("5", {migraphx::shape::float_type, {1}});
    auto p6       = p.add_parameter("6", {migraphx::shape::float_type, {1}});
53
    uint64_t axis = 1;
Paul's avatar
Paul committed
54
55
56
57
58
59
60
61
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape()}, l2);
    auto l5       = p.add_instruction(migraphx::op::add{}, l3, l4);
    auto l6 = p.add_instruction(migraphx::op::batch_norm_inference{1.0e-5f}, l5, p3, p4, p5, p6);
    auto l7 = p.add_instruction(migraphx::op::relu{}, l6);
    p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l7);

    auto prog = migraphx::parse_onnx("conv_bn_relu_maxpool.onnx");
62
63
64
    EXPECT(p == prog);
}

Paul's avatar
Paul committed
65
void pytorch_conv_relu_maxpool_x2()
Scott Thornton's avatar
Scott Thornton committed
66
{
Paul's avatar
Paul committed
67
68
69
70
    migraphx::program p;
    auto l0       = p.add_parameter("0", {migraphx::shape::float_type, {1, 3, 32, 32}});
    auto l1       = p.add_parameter("1", {migraphx::shape::float_type, {5, 3, 5, 5}});
    auto l2       = p.add_parameter("2", {migraphx::shape::float_type, {5}});
Scott Thornton's avatar
Scott Thornton committed
71
    uint64_t axis = 1;
Paul's avatar
Paul committed
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
    auto l3       = p.add_instruction(migraphx::op::convolution{}, l0, l1);
    auto l4       = p.add_instruction(migraphx::op::broadcast{axis, l3->get_shape()}, l2);
    auto l5       = p.add_instruction(migraphx::op::add{}, l3, l4);
    auto l6       = p.add_instruction(migraphx::op::relu{}, l5);
    auto l7 = p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l6);

    auto l8  = p.add_parameter("3", {migraphx::shape::float_type, {1, 5, 5, 5}});
    auto l9  = p.add_parameter("4", {migraphx::shape::float_type, {1}});
    auto l10 = p.add_instruction(migraphx::op::convolution{}, l7, l8);
    auto l11 = p.add_instruction(migraphx::op::broadcast{axis, l10->get_shape()}, l9);
    auto l12 = p.add_instruction(migraphx::op::add{}, l10, l11);
    auto l13 = p.add_instruction(migraphx::op::relu{}, l12);
    p.add_instruction(migraphx::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l13);

    auto prog = migraphx::parse_onnx("conv_relu_maxpoolX2.onnx");
Scott Thornton's avatar
Scott Thornton committed
87
88
89
90

    EXPECT(p == prog);
}

91
92
void leaky_relu_test()
{
Paul's avatar
Paul committed
93
    migraphx::program p;
94
    float alpha = 0.01f;
Paul's avatar
Paul committed
95
96
    auto l0     = p.add_parameter("0", {migraphx::shape::float_type, {3}});
    p.add_instruction(migraphx::op::leaky_relu{alpha}, l0);
97

Paul's avatar
Paul committed
98
    auto prog = migraphx::parse_onnx("leaky_relu.onnx");
99
100
101
102

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
103
104
void imagescaler_test()
{
Paul's avatar
Paul committed
105
106
    migraphx::program p;
    migraphx::shape s{migraphx::shape::float_type, {1, 3, 16, 16}};
Khalique's avatar
Khalique committed
107
    auto l0        = p.add_parameter("0", s);
Khalique's avatar
Khalique committed
108
    auto scale_val = p.add_literal(0.5f);
Khalique's avatar
Khalique committed
109
    auto bias_vals = p.add_literal(
Paul's avatar
Paul committed
110
111
112
113
114
        migraphx::literal{migraphx::shape{migraphx::shape::float_type, {3}}, {0.01, 0.02, 0.03}});
    auto scaled_tensor = p.add_instruction(migraphx::op::scalar{s}, scale_val);
    auto img_scaled    = p.add_instruction(migraphx::op::mul{}, l0, scaled_tensor);
    auto bias_bcast    = p.add_instruction(migraphx::op::broadcast{1, s}, bias_vals);
    p.add_instruction(migraphx::op::add{}, img_scaled, bias_bcast);
Khalique's avatar
Khalique committed
115

Paul's avatar
Paul committed
116
    auto prog = migraphx::parse_onnx("imagescaler_test.onnx");
Khalique's avatar
Khalique committed
117
118
119
120

    EXPECT(p == prog);
}

121
122
void globalavgpool_test()
{
Paul's avatar
Paul committed
123
124
125
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    auto op    = migraphx::op::pooling{"average"};
126
    auto lens  = input->get_shape().lens();
Khalique's avatar
Khalique committed
127
    op.lengths = {lens[2], lens[3]};
128
129
    p.add_instruction(op, input);

Paul's avatar
Paul committed
130
    auto prog = migraphx::parse_onnx("globalavgpool_test.onnx");
131
132
133
134
135
136

    EXPECT(p == prog);
}

void globalmaxpool_test()
{
Paul's avatar
Paul committed
137
138
139
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 16, 16}});
    auto op    = migraphx::op::pooling{"max"};
140
    auto lens  = input->get_shape().lens();
Khalique's avatar
Khalique committed
141
    op.lengths = {lens[2], lens[3]};
142
143
    p.add_instruction(op, input);

Paul's avatar
Paul committed
144
    auto prog = migraphx::parse_onnx("globalmaxpool_test.onnx");
145
146
147
148

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
149
150
void transpose_test()
{
Paul's avatar
Paul committed
151
152
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 2, 2, 3}});
Khalique's avatar
Khalique committed
153
    std::vector<int64_t> perm{0, 3, 1, 2};
Paul's avatar
Paul committed
154
    p.add_instruction(migraphx::op::transpose{perm}, input);
Khalique's avatar
Khalique committed
155

Paul's avatar
Paul committed
156
    auto prog = migraphx::parse_onnx("transpose_test.onnx");
Khalique's avatar
Khalique committed
157
158
159
160

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
161
162
void dropout_test()
{
Paul's avatar
Paul committed
163
164
165
    migraphx::program p;
    auto input = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {1, 3, 2, 2}});
    p.add_instruction(migraphx::op::identity{}, input);
Khalique's avatar
Khalique committed
166

Paul's avatar
Paul committed
167
    auto prog = migraphx::parse_onnx("dropout_test.onnx");
Khalique's avatar
Khalique committed
168
169
170
171

    EXPECT(p == prog);
}

172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
void sinh_test()
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::sinh{}, input);

    auto prog = migraphx::parse_onnx("sinh_test.onnx");

    EXPECT(p == prog);
}

void cosh_test()
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {1}});
    p.add_instruction(migraphx::op::cosh{}, input);

    auto prog = migraphx::parse_onnx("cosh_test.onnx");

    EXPECT(p == prog);
}

void asin_test()
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::asin{}, input);

    auto prog = migraphx::parse_onnx("asin_test.onnx");

    EXPECT(p == prog);
}

void acos_test()
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::acos{}, input);

    auto prog = migraphx::parse_onnx("acos_test.onnx");

    EXPECT(p == prog);
}

void atan_test()
{
    migraphx::program p;
    auto input = p.add_parameter("x", migraphx::shape{migraphx::shape::float_type, {10}});
    p.add_instruction(migraphx::op::atan{}, input);

    auto prog = migraphx::parse_onnx("atan_test.onnx");

    EXPECT(p == prog);
}

Scott Thornton's avatar
Scott Thornton committed
227
228
229
230
int main()
{
    pytorch_conv_bias_test();
    pytorch_conv_relu_maxpool();
231
    pytorch_conv_bn_relu_maxpool();
Paul's avatar
Paul committed
232
    pytorch_conv_relu_maxpool_x2();
233
    leaky_relu_test();
Khalique's avatar
Khalique committed
234
    imagescaler_test();
235
236
    globalavgpool_test();
    globalmaxpool_test();
Khalique's avatar
Khalique committed
237
    transpose_test();
Khalique's avatar
Khalique committed
238
    dropout_test();
239
240
241
242
243
    sinh_test();
    cosh_test();
    asin_test();
    acos_test();
    atan_test();
Scott Thornton's avatar
Scott Thornton committed
244
}