onnx_test.cpp 7.37 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);
}

Khalique's avatar
Khalique committed
172
173
174
175
176
177
178
void sum_test()
{
    migraphx::program p;
    auto input0 = p.add_parameter("0", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input1 = p.add_parameter("1", migraphx::shape{migraphx::shape::float_type, {3}});
    auto input2 = p.add_parameter("2", migraphx::shape{migraphx::shape::float_type, {3}});
}
Khalique's avatar
Khalique committed
179
180
auto l0 = p.add_instruction(migraphx::op::add{}, input0, input1);
p.add_instruction(migraphx::op::add{}, l0, input2);
Khalique's avatar
Khalique committed
181

Khalique's avatar
Khalique committed
182
183
184
auto prog = migraph::parse_onnx("sum_test.onnx");

EXPECT(p == prog);
Khalique's avatar
Khalique committed
185
186
}

Scott Thornton's avatar
Scott Thornton committed
187
188
189
190
int main()
{
    pytorch_conv_bias_test();
    pytorch_conv_relu_maxpool();
191
    pytorch_conv_bn_relu_maxpool();
Paul's avatar
Paul committed
192
    pytorch_conv_relu_maxpool_x2();
193
    leaky_relu_test();
Khalique's avatar
Khalique committed
194
    imagescaler_test();
195
196
    globalavgpool_test();
    globalmaxpool_test();
Khalique's avatar
Khalique committed
197
    transpose_test();
Khalique's avatar
Khalique committed
198
    dropout_test();
Khalique's avatar
Khalique committed
199
    sum_test();
Scott Thornton's avatar
Scott Thornton committed
200
}