aboutsummaryrefslogtreecommitdiff
path: root/21.02/_onnx_parser_8hpp_source.xhtml
blob: 1220f25f709dfff848f026ad758b94a671fcfaab (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
<!-- Copyright (c) 2020 ARM Limited. -->
<!--                                 -->
<!-- SPDX-License-Identifier: MIT    -->
<!--                                 -->
<!-- HTML header for doxygen 1.8.13-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<meta http-equiv="X-UA-Compatible" content="IE=9"/>
<meta name="generator" content="Doxygen 1.8.13"/>
<meta name="robots" content="NOINDEX, NOFOLLOW" />
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>ArmNN: src/armnnOnnxParser/OnnxParser.hpp Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="dynsections.js"></script>
<link href="navtree.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="resize.js"></script>
<script type="text/javascript" src="navtreedata.js"></script>
<script type="text/javascript" src="navtree.js"></script>
<script type="text/javascript">
  $(document).ready(initResizable);
</script>
<link href="search/search.css" rel="stylesheet" type="text/css"/>
<script type="text/javascript" src="search/searchdata.js"></script>
<script type="text/javascript" src="search/search.js"></script>
<script type="text/x-mathjax-config">
  MathJax.Hub.Config({
    extensions: ["tex2jax.js"],
    jax: ["input/TeX","output/HTML-CSS"],
});
</script><script type="text/javascript" src="http://cdn.mathjax.org/mathjax/latest/MathJax.js"></script>
<link href="doxygen.css" rel="stylesheet" type="text/css" />
<link href="stylesheet.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="top"><!-- do not remove this div, it is closed by doxygen! -->
<div id="titlearea">
<table cellspacing="0" cellpadding="0">
 <tbody>
 <tr style="height: 56px;">
  <img alt="ArmNN" src="Arm_NN_horizontal_blue.png" style="max-width: 10rem; margin-top: .5rem; margin-left 10px"/>
  <td style="padding-left: 0.5em;">
   <div id="projectname">
   &#160;<span id="projectnumber">21.02</span>
   </div>
  </td>
 </tr>
 </tbody>
</table>
</div>
<!-- end header part -->
<!-- Generated by Doxygen 1.8.13 -->
<script type="text/javascript">
var searchBox = new SearchBox("searchBox", "search",false,'Search');
</script>
<script type="text/javascript" src="menudata.js"></script>
<script type="text/javascript" src="menu.js"></script>
<script type="text/javascript">
$(function() {
  initMenu('',true,false,'search.php','Search');
  $(document).ready(function() { init_search(); });
});
</script>
<div id="main-nav"></div>
</div><!-- top -->
<div id="side-nav" class="ui-resizable side-nav-resizable">
  <div id="nav-tree">
    <div id="nav-tree-contents">
      <div id="nav-sync" class="sync"></div>
    </div>
  </div>
  <div id="splitbar" style="-moz-user-select:none;" 
       class="ui-resizable-handle">
  </div>
</div>
<script type="text/javascript">
$(document).ready(function(){initNavTree('_onnx_parser_8hpp_source.xhtml','');});
</script>
<div id="doc-content">
<!-- window showing the filter options -->
<div id="MSearchSelectWindow"
     onmouseover="return searchBox.OnSearchSelectShow()"
     onmouseout="return searchBox.OnSearchSelectHide()"
     onkeydown="return searchBox.OnSearchSelectKey(event)">
</div>

<!-- iframe showing the search results (closed by default) -->
<div id="MSearchResultsWindow">
<iframe src="javascript:void(0)" frameborder="0" 
        name="MSearchResults" id="MSearchResults">
</iframe>
</div>

<div class="header">
  <div class="headertitle">
<div class="title">OnnxParser.hpp</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_onnx_parser_8hpp.xhtml">Go to the documentation of this file.</a><div class="fragment"><div class="line"><a name="l00001"></a><span class="lineno">    1</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00002"></a><span class="lineno">    2</span>&#160;<span class="comment">// Copyright © 2017 Arm Ltd. All rights reserved.</span></div><div class="line"><a name="l00003"></a><span class="lineno">    3</span>&#160;<span class="comment">// SPDX-License-Identifier: MIT</span></div><div class="line"><a name="l00004"></a><span class="lineno">    4</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00005"></a><span class="lineno">    5</span>&#160;<span class="preprocessor">#pragma once</span></div><div class="line"><a name="l00006"></a><span class="lineno">    6</span>&#160;</div><div class="line"><a name="l00007"></a><span class="lineno">    7</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_i_onnx_parser_8hpp.xhtml">armnnOnnxParser/IOnnxParser.hpp</a>&quot;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &quot;google/protobuf/repeated_field.h&quot;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &lt;unordered_map&gt;</span></div><div class="line"><a name="l00010"></a><span class="lineno">   10</span>&#160;</div><div class="line"><a name="l00011"></a><span class="lineno">   11</span>&#160;<span class="preprocessor">#include &lt;onnx/onnx.pb.h&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;</div><div class="line"><a name="l00013"></a><span class="lineno">   13</span>&#160;</div><div class="line"><a name="l00014"></a><span class="lineno">   14</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;{</div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="keyword">class </span>TensorInfo;</div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="keyword">enum class</span> <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">ActivationFunction</a>;</div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;}</div><div class="line"><a name="l00019"></a><span class="lineno">   19</span>&#160;</div><div class="line"><a name="l00020"></a><span class="lineno">   20</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearmnn_onnx_parser.xhtml">armnnOnnxParser</a></div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;{</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;</div><div class="line"><a name="l00023"></a><span class="lineno"><a class="line" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">   23</a></span>&#160;<span class="keyword">using</span> <a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">ModelPtr</a> = std::unique_ptr&lt;onnx::ModelProto&gt;;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;</div><div class="line"><a name="l00025"></a><span class="lineno"><a class="line" href="classarmnn_onnx_parser_1_1_onnx_parser_impl.xhtml">   25</a></span>&#160;<span class="keyword">class </span><a class="code" href="classarmnn_onnx_parser_1_1_onnx_parser_impl.xhtml">OnnxParserImpl</a></div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;{</div><div class="line"><a name="l00027"></a><span class="lineno">   27</span>&#160;</div><div class="line"><a name="l00028"></a><span class="lineno">   28</span>&#160;<span class="keyword">using</span> OperationParsingFunction = void(<a class="code" href="classarmnn_onnx_parser_1_1_onnx_parser_impl.xhtml">OnnxParserImpl</a>::*)(<span class="keyword">const</span> onnx::NodeProto&amp; NodeProto);</div><div class="line"><a name="l00029"></a><span class="lineno">   29</span>&#160;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classarmnn_onnx_parser_1_1_onnx_parser_impl.xhtml#ac81510b21cb2b5719cce34474ad01675">   32</a></span>&#160;    <span class="keyword">using</span> <a class="code" href="classarmnn_onnx_parser_1_1_onnx_parser_impl.xhtml#ac81510b21cb2b5719cce34474ad01675">GraphPtr</a> = std::unique_ptr&lt;onnx::GraphProto&gt;;</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;<span class="comment">    /// Create the network from a protobuf binary file on disk</span></div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;<span class="comment"></span>    <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a> CreateNetworkFromBinaryFile(<span class="keyword">const</span> <span class="keywordtype">char</span>* graphFile);</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;<span class="comment">    /// Create the network from a protobuf text file on disk</span></div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;<span class="comment"></span>    <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a> CreateNetworkFromTextFile(<span class="keyword">const</span> <span class="keywordtype">char</span>* graphFile);</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;<span class="comment">    /// Create the network directly from protobuf text in a string. Useful for debugging/testing</span></div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;<span class="comment"></span>    <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a> CreateNetworkFromString(<span class="keyword">const</span> std::string&amp; protoText);</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;<span class="comment">    /// Retrieve binding info (layer id and tensor info) for the network input identified by the given layer name</span></div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;<span class="comment"></span>    <a class="code" href="namespacearmnn_onnx_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> GetNetworkInputBindingInfo(<span class="keyword">const</span> std::string&amp; name) <span class="keyword">const</span>;</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;<span class="comment">    /// Retrieve binding info (layer id and tensor info) for the network output identified by the given layer name</span></div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;<span class="comment"></span>    <a class="code" href="namespacearmnn_onnx_parser.xhtml#a9084adbf804022c874039ad40d1939e9">BindingPointInfo</a> GetNetworkOutputBindingInfo(<span class="keyword">const</span> std::string&amp; name) <span class="keyword">const</span>;</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;<span class="keyword">public</span>:</div><div class="line"><a name="l00050"></a><span class="lineno">   50</span>&#160;</div><div class="line"><a name="l00051"></a><span class="lineno">   51</span>&#160;    <a class="code" href="classarmnn_onnx_parser_1_1_onnx_parser_impl.xhtml">OnnxParserImpl</a>();</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;    ~<a class="code" href="classarmnn_onnx_parser_1_1_onnx_parser_impl.xhtml">OnnxParserImpl</a>() = <span class="keywordflow">default</span>;</div><div class="line"><a name="l00053"></a><span class="lineno">   53</span>&#160;</div><div class="line"><a name="l00054"></a><span class="lineno">   54</span>&#160;    <span class="keyword">static</span> <a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">ModelPtr</a> LoadModelFromBinaryFile(<span class="keyword">const</span> <span class="keywordtype">char</span> * fileName);</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;    <span class="keyword">static</span> <a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">ModelPtr</a> LoadModelFromTextFile(<span class="keyword">const</span> <span class="keywordtype">char</span> * fileName);</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    <span class="keyword">static</span> <a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">ModelPtr</a> LoadModelFromString(<span class="keyword">const</span> std::string&amp; inputString);</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;<span class="comment">    /// Retrieve inputs names</span></div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;<span class="comment"></span>    <span class="keyword">static</span> std::vector&lt;std::string&gt; GetInputs(<a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">ModelPtr</a>&amp; model);</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;<span class="comment">    /// Retrieve outputs names</span></div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;<span class="comment"></span>    <span class="keyword">static</span> std::vector&lt;std::string&gt; GetOutputs(<a class="code" href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">ModelPtr</a>&amp; model);</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;<span class="comment">    /// Retrieve version in X.Y.Z form</span></div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;<span class="comment"></span>    <span class="keyword">static</span> <span class="keyword">const</span> std::string <a class="code" href="namespacearmnn.xhtml#aa09a8bb02eed50715082d8b7fccd2f8d">GetVersion</a>();</div><div class="line"><a name="l00066"></a><span class="lineno">   66</span>&#160;</div><div class="line"><a name="l00067"></a><span class="lineno">   67</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;<span class="comment">    /// Parses a ModelProto loaded into memory from one of the other CreateNetwork*</span></div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;<span class="comment"></span>    <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a> CreateNetworkFromModel(onnx::ModelProto&amp; model);</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;<span class="comment">    /// Parse every node and make the connection between the resulting tensors</span></div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;<span class="comment"></span>    <span class="keywordtype">void</span> LoadGraph();</div><div class="line"><a name="l00074"></a><span class="lineno">   74</span>&#160;</div><div class="line"><a name="l00075"></a><span class="lineno">   75</span>&#160;    <span class="keywordtype">void</span> SetupInfo(<span class="keyword">const</span> google::protobuf::RepeatedPtrField&lt;onnx::ValueInfoProto &gt;* list);</div><div class="line"><a name="l00076"></a><span class="lineno">   76</span>&#160;</div><div class="line"><a name="l00077"></a><span class="lineno">   77</span>&#160;    std::vector&lt;armnn::TensorInfo&gt; ComputeOutputInfo(std::vector&lt;std::string&gt; outNames,</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;                                                     <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* layer,</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;                                                     std::vector&lt;armnn::TensorShape&gt; inputShapes);</div><div class="line"><a name="l00080"></a><span class="lineno">   80</span>&#160;</div><div class="line"><a name="l00081"></a><span class="lineno">   81</span>&#160;    <span class="keywordtype">void</span> DetectFullyConnected();</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Location&gt;</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;    <span class="keywordtype">void</span> GetInputAndParam(<span class="keyword">const</span> onnx::NodeProto&amp; node,</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;                          std::string* inputName,</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;                          std::string* constName,</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;                          <span class="keyword">const</span> Location&amp; location);</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> Location&gt;</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    <span class="keywordtype">void</span> To1DTensor(<span class="keyword">const</span> std::string &amp;name, <span class="keyword">const</span> Location&amp; location);</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;    <span class="comment">//Broadcast Preparation functions</span></div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;    std::pair&lt;std::string, std::string&gt; AddPrepareBroadcast(<span class="keyword">const</span> std::string&amp; input0, <span class="keyword">const</span> std::string&amp; input1);</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;    <span class="keywordtype">void</span> PrependForBroadcast(<span class="keyword">const</span> std::string&amp; outputName, <span class="keyword">const</span> std::string&amp; input0, <span class="keyword">const</span> std::string&amp; input1);</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;</div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;    <span class="keywordtype">void</span> AddConvLayerWithDepthwiseConv(<span class="keyword">const</span> onnx::NodeProto&amp; node, <span class="keyword">const</span> <a class="code" href="structarmnn_1_1_convolution2d_descriptor.xhtml">armnn::Convolution2dDescriptor</a>&amp; convDesc);</div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;    <span class="keywordtype">void</span> AddFullyConnected(<span class="keyword">const</span> onnx::NodeProto&amp; matmulNode, <span class="keyword">const</span> onnx::NodeProto* addNode = <span class="keyword">nullptr</span>);</div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;    <span class="keywordtype">void</span> AddPoolingLayer(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto, <a class="code" href="structarmnn_1_1_pooling2d_descriptor.xhtml">armnn::Pooling2dDescriptor</a>&amp; desc);</div><div class="line"><a name="l00099"></a><span class="lineno">   99</span>&#160;</div><div class="line"><a name="l00100"></a><span class="lineno">  100</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="namespacearmnn_serializer.xhtml#a2ebf69db263cabc10fd126b4fab4defa">CreateConstantLayer</a>(<span class="keyword">const</span> std::string&amp; tensorName, <span class="keyword">const</span> std::string&amp; layerName);</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;    <span class="keywordtype">void</span> <a class="code" href="namespacearmnn_serializer.xhtml#a82b0b6b4b39c80c748c22f0dd6f0b363">CreateReshapeLayer</a>(<span class="keyword">const</span> std::string&amp; inputName,</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;                            <span class="keyword">const</span> std::string&amp; outputName,</div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;                            <span class="keyword">const</span> std::string&amp; layerName);</div><div class="line"><a name="l00104"></a><span class="lineno">  104</span>&#160;</div><div class="line"><a name="l00105"></a><span class="lineno">  105</span>&#160;    <span class="keywordtype">void</span> ParseActivation(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto, <span class="keyword">const</span> <a class="code" href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">armnn::ActivationFunction</a> func);</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    <span class="keywordtype">void</span> ParseClip(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;    <span class="keywordtype">void</span> ParseSigmoid(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    <span class="keywordtype">void</span> ParseTanh(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;    <span class="keywordtype">void</span> ParseRelu(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordtype">void</span> ParseLeakyRelu(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;    <span class="keywordtype">void</span> ParseAdd(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;    <span class="keywordtype">void</span> ParseAveragePool(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;    <span class="keywordtype">void</span> ParseBatchNormalization(<span class="keyword">const</span> onnx::NodeProto&amp; node);</div><div class="line"><a name="l00115"></a><span class="lineno">  115</span>&#160;    <span class="keywordtype">void</span> ParseConstant(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;    <span class="keywordtype">void</span> ParseConv(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="keywordtype">void</span> ParseFlatten(<span class="keyword">const</span> onnx::NodeProto&amp; node);</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <span class="keywordtype">void</span> ParseGlobalAveragePool(<span class="keyword">const</span> onnx::NodeProto&amp; node);</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;    <span class="keywordtype">void</span> ParseMaxPool(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    <span class="keywordtype">void</span> ParseReshape(<span class="keyword">const</span> onnx::NodeProto&amp; nodeProto);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;    <span class="keywordtype">void</span> RegisterInputSlots(<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* layer, <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; tensorIndexes);</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    <span class="keywordtype">void</span> RegisterOutputSlots(<a class="code" href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a>* layer, <span class="keyword">const</span> std::vector&lt;std::string&gt;&amp; tensorIndexes);</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keywordtype">void</span> SetupInputLayers();</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    <span class="keywordtype">void</span> SetupOutputLayers();</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;    <span class="keywordtype">void</span> ResetParser();</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;    <span class="keywordtype">void</span> Cleanup();</div><div class="line"><a name="l00130"></a><span class="lineno">  130</span>&#160;</div><div class="line"><a name="l00131"></a><span class="lineno">  131</span>&#160;    std::pair&lt;armnn::ConstTensor, std::unique_ptr&lt;float[]&gt;&gt; <a class="code" href="namespacearmnn_serializer.xhtml#aed84c72e33487ad47e1e8c833e83027e">CreateConstTensor</a>(<span class="keyword">const</span> std::string name);</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    <span class="keyword">template</span> &lt;<span class="keyword">typename</span> TypeList, <span class="keyword">typename</span> Location&gt;</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;    <span class="keywordtype">void</span> ValidateInputs(<span class="keyword">const</span> onnx::NodeProto&amp; node,</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;                        TypeList validInputs,</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;                        <span class="keyword">const</span> Location&amp; location);</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;<span class="comment">    /// The network we&#39;re building. Gets cleared after it is passed to the user</span></div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;<span class="comment"></span>    <a class="code" href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a> m_Network;</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;<span class="comment">    /// Ptr to the graph we&#39;re building the network from</span></div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;<span class="comment"></span>    <a class="code" href="classarmnn_onnx_parser_1_1_onnx_parser_impl.xhtml#ac81510b21cb2b5719cce34474ad01675">GraphPtr</a> m_Graph;</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;<span class="comment">    /// Map of the information for every tensor</span></div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;<span class="comment"></span>    <span class="keyword">struct </span>OnnxTensor</div><div class="line"><a name="l00146"></a><span class="lineno">  146</span>&#160;    {</div><div class="line"><a name="l00147"></a><span class="lineno">  147</span>&#160;        std::unique_ptr&lt;armnn::TensorInfo&gt;          m_info;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;        std::unique_ptr&lt;const onnx::TensorProto&gt;    m_tensor;</div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;        <a class="code" href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">onnx::TensorProto::DataType</a>                 m_dtype;</div><div class="line"><a name="l00150"></a><span class="lineno">  150</span>&#160;</div><div class="line"><a name="l00151"></a><span class="lineno">  151</span>&#160;        OnnxTensor() : m_info(nullptr), m_tensor(nullptr), m_dtype(onnx::TensorProto::FLOAT) { }</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;        <span class="keywordtype">bool</span> isConstant() { <span class="keywordflow">return</span> m_tensor != <span class="keyword">nullptr</span>; }</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;    };</div><div class="line"><a name="l00154"></a><span class="lineno">  154</span>&#160;</div><div class="line"><a name="l00155"></a><span class="lineno">  155</span>&#160;    std::unordered_map&lt;std::string, OnnxTensor&gt; m_TensorsInfo;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;<span class="comment">    /// map of onnx operation names to parsing member functions</span></div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;<span class="comment"></span>    <span class="keyword">static</span> <span class="keyword">const</span> std::map&lt;std::string, OperationParsingFunction&gt; m_ParserFunctions;</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;<span class="comment">    /// A mapping of an output slot to each of the input slots it should be connected to</span></div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;<span class="comment">    /// The outputSlot is from the layer that creates this tensor as one of its ouputs</span></div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;<span class="comment">    /// The inputSlots are from the layers that use this tensor as one of their inputs</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;<span class="comment"></span>    <span class="keyword">struct </span>TensorSlots</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    {</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;        <a class="code" href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a>* outputSlot;</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        std::vector&lt;armnn::IInputSlot*&gt; inputSlots;</div><div class="line"><a name="l00167"></a><span class="lineno">  167</span>&#160;</div><div class="line"><a name="l00168"></a><span class="lineno">  168</span>&#160;        TensorSlots() : outputSlot(nullptr) { }</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    };<span class="comment"></span></div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;<span class="comment">    /// Map of the tensor names to their connections for the connections of the layers of the graph</span></div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;<span class="comment"></span>    std::unordered_map&lt;std::string, TensorSlots&gt; m_TensorConnections;</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="comment">    /// Map of the tensor names to their node and index in graph.node()</span></div><div class="line"><a name="l00174"></a><span class="lineno">  174</span>&#160;<span class="comment"></span>    std::unordered_map&lt;std::string, std::pair&lt;const onnx::NodeProto*, int&gt;&gt; m_OutputsMap;</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;<span class="comment"></span></div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;<span class="comment">    /// Number of times a specific node (identified by his index number) was used as input</span></div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;<span class="comment">    /// and list of the nodes it was fused with</span></div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;<span class="comment"></span>    <span class="keyword">struct </span>UsageSummary</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    {</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;        std::vector&lt;size_t&gt; fusedWithNodes;</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;        <span class="keywordtype">size_t</span> inputForNodes;</div><div class="line"><a name="l00182"></a><span class="lineno">  182</span>&#160;</div><div class="line"><a name="l00183"></a><span class="lineno">  183</span>&#160;        UsageSummary() : fusedWithNodes({}), inputForNodes(0) { }</div><div class="line"><a name="l00184"></a><span class="lineno">  184</span>&#160;</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    };</div><div class="line"><a name="l00186"></a><span class="lineno">  186</span>&#160;</div><div class="line"><a name="l00187"></a><span class="lineno">  187</span>&#160;    std::vector&lt;UsageSummary&gt; m_OutputsFusedAndUsed;</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;};</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;}</div><div class="ttc" id="classarmnn_1_1_i_connectable_layer_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_connectable_layer.xhtml">armnn::IConnectableLayer</a></div><div class="ttdoc">Interface for a layer that is connectable to other layers via InputSlots and OutputSlots. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00062">INetwork.hpp:62</a></div></div>
<div class="ttc" id="structarmnn_1_1_convolution2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_convolution2d_descriptor.xhtml">armnn::Convolution2dDescriptor</a></div><div class="ttdoc">A Convolution2dDescriptor for the Convolution2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00408">Descriptors.hpp:408</a></div></div>
<div class="ttc" id="namespacearmnn_serializer_xhtml_aed84c72e33487ad47e1e8c833e83027e"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#aed84c72e33487ad47e1e8c833e83027e">armnnSerializer::CreateConstTensor</a></div><div class="ttdeci">flatbuffers::Offset&lt; ConstTensor &gt; CreateConstTensor(flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; armnnSerializer::TensorInfo &gt; info=0, armnnSerializer::ConstTensorData data_type=armnnSerializer::ConstTensorData_NONE, flatbuffers::Offset&lt; void &gt; data=0)</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l02056">ArmnnSchema_generated.h:2056</a></div></div>
<div class="ttc" id="classarmnn_onnx_parser_1_1_onnx_parser_impl_xhtml"><div class="ttname"><a href="classarmnn_onnx_parser_1_1_onnx_parser_impl.xhtml">armnnOnnxParser::OnnxParserImpl</a></div><div class="ttdef"><b>Definition:</b> <a href="_onnx_parser_8hpp_source.xhtml#l00025">OnnxParser.hpp:25</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml"><div class="ttname"><a href="namespacearmnn.xhtml">armnn</a></div><div class="ttdoc">Copyright (c) 2021 ARM Limited and Contributors. </div><div class="ttdef"><b>Definition:</b> <a href="01__00__software__tools_8dox_source.xhtml#l00006">01_00_software_tools.dox:6</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_aa09a8bb02eed50715082d8b7fccd2f8d"><div class="ttname"><a href="namespacearmnn.xhtml#aa09a8bb02eed50715082d8b7fccd2f8d">armnn::GetVersion</a></div><div class="ttdeci">const std::string GetVersion()</div><div class="ttdef"><b>Definition:</b> <a href="_utils_8cpp_source.xhtml#l00077">Utils.cpp:77</a></div></div>
<div class="ttc" id="classarmnn_onnx_parser_1_1_onnx_parser_impl_xhtml_ac81510b21cb2b5719cce34474ad01675"><div class="ttname"><a href="classarmnn_onnx_parser_1_1_onnx_parser_impl.xhtml#ac81510b21cb2b5719cce34474ad01675">armnnOnnxParser::OnnxParserImpl::GraphPtr</a></div><div class="ttdeci">std::unique_ptr&lt; onnx::GraphProto &gt; GraphPtr</div><div class="ttdef"><b>Definition:</b> <a href="_onnx_parser_8hpp_source.xhtml#l00032">OnnxParser.hpp:32</a></div></div>
<div class="ttc" id="namespacearmnn_onnx_parser_xhtml_a503ae4f55dae1486e53978657083b35d"><div class="ttname"><a href="namespacearmnn_onnx_parser.xhtml#a503ae4f55dae1486e53978657083b35d">armnnOnnxParser::ModelPtr</a></div><div class="ttdeci">std::unique_ptr&lt; onnx::ModelProto &gt; ModelPtr</div><div class="ttdef"><b>Definition:</b> <a href="_onnx_parser_8hpp_source.xhtml#l00023">OnnxParser.hpp:23</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ad8ed01ff3ff33333d8e19db4d2818bb6"><div class="ttname"><a href="namespacearmnn.xhtml#ad8ed01ff3ff33333d8e19db4d2818bb6">armnn::DataType</a></div><div class="ttdeci">DataType</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00032">Types.hpp:32</a></div></div>
<div class="ttc" id="namespacearmnn_serializer_xhtml_a82b0b6b4b39c80c748c22f0dd6f0b363"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a82b0b6b4b39c80c748c22f0dd6f0b363">armnnSerializer::CreateReshapeLayer</a></div><div class="ttdeci">flatbuffers::Offset&lt; ReshapeLayer &gt; CreateReshapeLayer(flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; armnnSerializer::LayerBase &gt; base=0, flatbuffers::Offset&lt; armnnSerializer::ReshapeDescriptor &gt; descriptor=0)</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l04941">ArmnnSchema_generated.h:4941</a></div></div>
<div class="ttc" id="classarmnn_1_1_i_output_slot_xhtml"><div class="ttname"><a href="classarmnn_1_1_i_output_slot.xhtml">armnn::IOutputSlot</a></div><div class="ttdoc">An output connection slot for a layer. </div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00038">INetwork.hpp:38</a></div></div>
<div class="ttc" id="_i_onnx_parser_8hpp_xhtml"><div class="ttname"><a href="_i_onnx_parser_8hpp.xhtml">IOnnxParser.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_onnx_parser_xhtml"><div class="ttname"><a href="namespacearmnn_onnx_parser.xhtml">armnnOnnxParser</a></div><div class="ttdef"><b>Definition:</b> <a href="_i_onnx_parser_8hpp_source.xhtml#l00014">IOnnxParser.hpp:14</a></div></div>
<div class="ttc" id="namespacearmnn_serializer_xhtml_a2ebf69db263cabc10fd126b4fab4defa"><div class="ttname"><a href="namespacearmnn_serializer.xhtml#a2ebf69db263cabc10fd126b4fab4defa">armnnSerializer::CreateConstantLayer</a></div><div class="ttdeci">flatbuffers::Offset&lt; ConstantLayer &gt; CreateConstantLayer(flatbuffers::FlatBufferBuilder &amp;_fbb, flatbuffers::Offset&lt; armnnSerializer::LayerBase &gt; base=0, flatbuffers::Offset&lt; armnnSerializer::ConstTensor &gt; input=0)</div><div class="ttdef"><b>Definition:</b> <a href="_armnn_schema__generated_8h_source.xhtml#l02781">ArmnnSchema_generated.h:2781</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_ace74f6f9feb95a964a49d79458232703"><div class="ttname"><a href="namespacearmnn.xhtml#ace74f6f9feb95a964a49d79458232703">armnn::INetworkPtr</a></div><div class="ttdeci">std::unique_ptr&lt; INetwork, void(*)(INetwork *network)&gt; INetworkPtr</div><div class="ttdef"><b>Definition:</b> <a href="_i_network_8hpp_source.xhtml#l00173">INetwork.hpp:173</a></div></div>
<div class="ttc" id="namespacearmnn_onnx_parser_xhtml_a9084adbf804022c874039ad40d1939e9"><div class="ttname"><a href="namespacearmnn_onnx_parser.xhtml#a9084adbf804022c874039ad40d1939e9">armnnOnnxParser::BindingPointInfo</a></div><div class="ttdeci">armnn::BindingPointInfo BindingPointInfo</div><div class="ttdef"><b>Definition:</b> <a href="_i_onnx_parser_8hpp_source.xhtml#l00017">IOnnxParser.hpp:17</a></div></div>
<div class="ttc" id="structarmnn_1_1_pooling2d_descriptor_xhtml"><div class="ttname"><a href="structarmnn_1_1_pooling2d_descriptor.xhtml">armnn::Pooling2dDescriptor</a></div><div class="ttdoc">A Pooling2dDescriptor for the Pooling2dLayer. </div><div class="ttdef"><b>Definition:</b> <a href="_descriptors_8hpp_source.xhtml#l00329">Descriptors.hpp:329</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56297e0f7b215eea46c818cb7528d9ea"><div class="ttname"><a href="namespacearmnn.xhtml#a56297e0f7b215eea46c818cb7528d9ea">armnn::ActivationFunction</a></div><div class="ttdeci">ActivationFunction</div><div class="ttdef"><b>Definition:</b> <a href="_types_8hpp_source.xhtml#l00056">Types.hpp:56</a></div></div>
</div><!-- fragment --></div><!-- contents -->
</div><!-- doc-content -->
<!-- start footer part -->
<div id="nav-path" class="navpath"><!-- id is needed for treeview function! -->
  <ul>
    <li class="navelem"><a class="el" href="dir_68267d1309a1af8e8297ef4c3efbcdba.xhtml">src</a></li><li class="navelem"><a class="el" href="dir_29e3193d5087607956cb928081b12830.xhtml">armnnOnnxParser</a></li><li class="navelem"><a class="el" href="_onnx_parser_8hpp.xhtml">OnnxParser.hpp</a></li>
    <li class="footer">Generated on Fri Mar 19 2021 15:25:37 for ArmNN by
    <a href="http://www.doxygen.org/index.html">
    <img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.8.13 </li>
  </ul>
</div>
</body>
</html>