"vscode:/vscode.git/clone" did not exist on "7e1d5e5308fa3549dfed1821188d588260a03c8a"
onnx_test.cpp 6.13 KB
Newer Older
Scott Thornton's avatar
Scott Thornton committed
1
2
3
4
5
#include <iostream>
#include <vector>
#include <migraph/literal.hpp>
#include <migraph/operators.hpp>
#include <migraph/program.hpp>
Scott Thornton's avatar
Scott Thornton committed
6
#include <migraph/instruction.hpp>
Scott Thornton's avatar
Scott Thornton committed
7
8
9
10
11
12
13
14
15
16
#include <migraph/onnx.hpp>
#include "test.hpp"

void pytorch_conv_bias_test()
{
    migraph::program p;
    auto l0       = p.add_parameter("0", {migraph::shape::float_type, {1, 3, 32, 32}});
    auto l1       = p.add_parameter("1", {migraph::shape::float_type, {1, 3, 5, 5}});
    auto l2       = p.add_parameter("2", {migraph::shape::float_type, {1}});
    uint64_t axis = 1;
17
    auto l3       = p.add_instruction(migraph::op::convolution{}, l0, l1);
Scott Thornton's avatar
Scott Thornton committed
18
    auto l4       = p.add_instruction(migraph::op::broadcast{axis, l3->get_shape()}, l2);
19
    p.add_instruction(migraph::op::add{}, l3, l4);
Scott Thornton's avatar
Scott Thornton committed
20
21
22
23
24
25
26
27
28
29
30
31

    auto prog = migraph::parse_onnx("conv.onnx");
    EXPECT(p == prog);
}

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

    auto prog = migraph::parse_onnx("conv_relu_maxpool.onnx");
    EXPECT(p == prog);
}

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

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

    auto prog = migraph::parse_onnx("conv_bn_relu_maxpool.onnx");
    EXPECT(p == prog);
}

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

    auto l8  = p.add_parameter("3", {migraph::shape::float_type, {1, 5, 5, 5}});
    auto l9  = p.add_parameter("4", {migraph::shape::float_type, {1}});
80
    auto l10 = p.add_instruction(migraph::op::convolution{}, l7, l8);
Scott Thornton's avatar
Scott Thornton committed
81
    auto l11 = p.add_instruction(migraph::op::broadcast{axis, l10->get_shape()}, l9);
82
    auto l12 = p.add_instruction(migraph::op::add{}, l10, l11);
Khalique's avatar
Khalique committed
83
    auto l13 = p.add_instruction(migraph::op::relu{}, l12);
84
    p.add_instruction(migraph::op::pooling{"max", {{0, 0}}, {{2, 2}}, {{2, 2}}}, l13);
Scott Thornton's avatar
Scott Thornton committed
85
86
87
88
89
90

    auto prog = migraph::parse_onnx("conv_relu_maxpoolX2.onnx");

    EXPECT(p == prog);
}

91
92
93
94
95
96
97
98
99
100
101
102
void leaky_relu_test()
{
    migraph::program p;
    float alpha = 0.01f;
    auto l0     = p.add_parameter("0", {migraph::shape::float_type, {3}});
    p.add_instruction(migraph::op::leaky_relu{alpha}, l0);

    auto prog = migraph::parse_onnx("leaky_relu.onnx");

    EXPECT(p == prog);
}

Khalique's avatar
Khalique committed
103
104
105
106
void imagescaler_test()
{
    migraph::program p;
    migraph::shape s{migraph::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
110
    auto bias_vals = p.add_literal(
        migraph::literal{migraph::shape{migraph::shape::float_type, {3}}, {0.01, 0.02, 0.03}});
Khalique's avatar
Khalique committed
111
    auto scaled_tensor = p.add_instruction(migraph::op::scalar{s}, scale_val);
Khalique's avatar
Khalique committed
112
113
    auto img_scaled    = p.add_instruction(migraph::op::mul{}, l0, scaled_tensor);
    auto bias_bcast    = p.add_instruction(migraph::op::broadcast{1, s}, bias_vals);
Khalique's avatar
Khalique committed
114
115
116
117
118
119
120
    p.add_instruction(migraph::op::add{}, img_scaled, bias_bcast);

    auto prog = migraph::parse_onnx("imagescaler_test.onnx");

    EXPECT(p == prog);
}

121
122
123
124
125
126
void globalavgpool_test()
{
    migraph::program p;
    auto input = p.add_parameter("0", migraph::shape{migraph::shape::float_type, {1, 3, 16, 16}});
    auto op    = migraph::op::pooling{"average"};
    auto lens  = input->get_shape().lens();
Khalique's avatar
Khalique committed
127
    op.lengths = {lens[2], lens[3]};
128
129
130
131
132
133
134
135
136
137
138
139
140
    p.add_instruction(op, input);

    auto prog = migraph::parse_onnx("globalavgpool_test.onnx");

    EXPECT(p == prog);
}

void globalmaxpool_test()
{
    migraph::program p;
    auto input = p.add_parameter("0", migraph::shape{migraph::shape::float_type, {1, 3, 16, 16}});
    auto op    = migraph::op::pooling{"max"};
    auto lens  = input->get_shape().lens();
Khalique's avatar
Khalique committed
141
    op.lengths = {lens[2], lens[3]};
142
143
144
145
146
147
148
    p.add_instruction(op, input);

    auto prog = migraph::parse_onnx("globalmaxpool_test.onnx");

    EXPECT(p == prog);
}

Scott Thornton's avatar
Scott Thornton committed
149
150
151
152
int main()
{
    pytorch_conv_bias_test();
    pytorch_conv_relu_maxpool();
153
    pytorch_conv_bn_relu_maxpool();
Paul's avatar
Paul committed
154
    pytorch_conv_relu_maxpool_x2();
155
    leaky_relu_test();
Khalique's avatar
Khalique committed
156
    imagescaler_test();
157
158
    globalavgpool_test();
    globalmaxpool_test();
Scott Thornton's avatar
Scott Thornton committed
159
}