"test/vscode:/vscode.git/clone" did not exist on "18fc2362b8d770b0663e71a9fcf9c4d6fb558795"
onnx_test.cpp 5.31 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
35
36
    auto l5       = p.add_instruction(migraph::op::add{}, l3, l4);
    auto l6       = p.add_instruction(migraph::op::activation{"relu"}, l5);
    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
58
    auto l6 = p.add_instruction(migraph::op::batch_norm_inference{1.0e-5f}, l5, p3, p4, p5, p6);
    auto l7 = p.add_instruction(migraph::op::activation{"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
75
    auto l5       = p.add_instruction(migraph::op::add{}, l3, l4);
    auto l6       = p.add_instruction(migraph::op::activation{"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
83
84
    auto l12 = p.add_instruction(migraph::op::add{}, l10, l11);
    auto l13 = p.add_instruction(migraph::op::activation{"relu"}, l12);
    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
107
108
109
110
111
112
113
114
115
116
117
118
119
void imagescaler_test()
{
    migraph::program p;
    migraph::shape s{migraph::shape::float_type, {1, 3, 16, 16}};
    auto l0 = p.add_parameter("0", s);
    auto scale_val = p.add_literal(0.5f);
    auto bias_vals = p.add_literal(migraph::literal{migraph::shape{migraph::shape::float_type, {3}}, {0.01, 0.02, 0.03}});
    auto scaled_tensor = p.add_instruction(migraph::op::scalar{s}, scale_val);
    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);
    p.add_instruction(migraph::op::add{}, img_scaled, bias_bcast);

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

    EXPECT(p == prog);
}

Scott Thornton's avatar
Scott Thornton committed
120
121
122
123
int main()
{
    pytorch_conv_bias_test();
    pytorch_conv_relu_maxpool();
124
    pytorch_conv_bn_relu_maxpool();
Paul's avatar
Paul committed
125
    pytorch_conv_relu_maxpool_x2();
126
    leaky_relu_test();
Khalique's avatar
Khalique committed
127
    imagescaler_test();
Scott Thornton's avatar
Scott Thornton committed
128
}