aboutsummaryrefslogtreecommitdiff
path: root/21.02/_inference_test_8inl_source.xhtml
blob: 7fae925d1aa4cf44e6cfc67a509934f8de0f1851 (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
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
<!-- 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: tests/InferenceTest.inl 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('_inference_test_8inl_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">InferenceTest.inl</div>  </div>
</div><!--header-->
<div class="contents">
<a href="_inference_test_8inl.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">#include &quot;<a class="code" href="_inference_test_8hpp.xhtml">InferenceTest.hpp</a>&quot;</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 &lt;<a class="code" href="_assert_8hpp.xhtml">armnn/utility/Assert.hpp</a>&gt;</span></div><div class="line"><a name="l00008"></a><span class="lineno">    8</span>&#160;<span class="preprocessor">#include &lt;<a class="code" href="_numeric_cast_8hpp.xhtml">armnn/utility/NumericCast.hpp</a>&gt;</span></div><div class="line"><a name="l00009"></a><span class="lineno">    9</span>&#160;<span class="preprocessor">#include &quot;<a class="code" href="_cxxopts_utils_8hpp.xhtml">CxxoptsUtils.hpp</a>&quot;</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;cxxopts/cxxopts.hpp&gt;</span></div><div class="line"><a name="l00012"></a><span class="lineno">   12</span>&#160;<span class="preprocessor">#include &lt;fmt/format.h&gt;</span></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="preprocessor">#include &lt;fstream&gt;</span></div><div class="line"><a name="l00015"></a><span class="lineno">   15</span>&#160;<span class="preprocessor">#include &lt;iostream&gt;</span></div><div class="line"><a name="l00016"></a><span class="lineno">   16</span>&#160;<span class="preprocessor">#include &lt;iomanip&gt;</span></div><div class="line"><a name="l00017"></a><span class="lineno">   17</span>&#160;<span class="preprocessor">#include &lt;array&gt;</span></div><div class="line"><a name="l00018"></a><span class="lineno">   18</span>&#160;<span class="preprocessor">#include &lt;chrono&gt;</span></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">using namespace </span><a class="code" href="namespacestd.xhtml">std</a>;</div><div class="line"><a name="l00021"></a><span class="lineno">   21</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacestd_1_1chrono.xhtml">std::chrono</a>;</div><div class="line"><a name="l00022"></a><span class="lineno">   22</span>&#160;<span class="keyword">using namespace </span><a class="code" href="namespacearmnn_1_1test.xhtml">armnn::test</a>;</div><div class="line"><a name="l00023"></a><span class="lineno">   23</span>&#160;</div><div class="line"><a name="l00024"></a><span class="lineno">   24</span>&#160;<span class="keyword">namespace </span><a class="code" href="namespacearmnn.xhtml">armnn</a></div><div class="line"><a name="l00025"></a><span class="lineno">   25</span>&#160;{</div><div class="line"><a name="l00026"></a><span class="lineno">   26</span>&#160;<span class="keyword">namespace </span>test</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;</div><div class="line"><a name="l00029"></a><span class="lineno"><a class="line" href="namespacearmnn_1_1test.xhtml#acf933608643ce27b3c68e3431d047d0a">   29</a></span>&#160;<span class="keyword">using</span> <a class="code" href="namespacearmnn_1_1test.xhtml#acf933608643ce27b3c68e3431d047d0a">TContainer</a> = mapbox::util::variant&lt;std::vector&lt;float&gt;, std::vector&lt;int&gt;, std::vector&lt;unsigned char&gt;&gt;;</div><div class="line"><a name="l00030"></a><span class="lineno">   30</span>&#160;</div><div class="line"><a name="l00031"></a><span class="lineno">   31</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TTestCaseDatabase, <span class="keyword">typename</span> TModel&gt;</div><div class="line"><a name="l00032"></a><span class="lineno"><a class="line" href="classarmnn_1_1test_1_1_classifier_test_case.xhtml#af79ae2b63d751cf7eb937ba7cd190217">   32</a></span>&#160;<a class="code" href="classarmnn_1_1test_1_1_classifier_test_case.xhtml">ClassifierTestCase&lt;TTestCaseDatabase, TModel&gt;::ClassifierTestCase</a>(</div><div class="line"><a name="l00033"></a><span class="lineno">   33</span>&#160;    <span class="keywordtype">int</span>&amp; numInferencesRef,</div><div class="line"><a name="l00034"></a><span class="lineno">   34</span>&#160;    <span class="keywordtype">int</span>&amp; numCorrectInferencesRef,</div><div class="line"><a name="l00035"></a><span class="lineno">   35</span>&#160;    <span class="keyword">const</span> std::vector&lt;unsigned int&gt;&amp; validationPredictions,</div><div class="line"><a name="l00036"></a><span class="lineno">   36</span>&#160;    std::vector&lt;unsigned int&gt;* validationPredictionsOut,</div><div class="line"><a name="l00037"></a><span class="lineno">   37</span>&#160;    TModel&amp; model,</div><div class="line"><a name="l00038"></a><span class="lineno">   38</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> testCaseId,</div><div class="line"><a name="l00039"></a><span class="lineno">   39</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> label,</div><div class="line"><a name="l00040"></a><span class="lineno">   40</span>&#160;    std::vector&lt;typename TModel::DataType&gt; modelInput)</div><div class="line"><a name="l00041"></a><span class="lineno">   41</span>&#160;    : <a class="code" href="classarmnn_1_1test_1_1_inference_model_test_case.xhtml">InferenceModelTestCase</a>&lt;TModel&gt;(</div><div class="line"><a name="l00042"></a><span class="lineno">   42</span>&#160;            model, testCaseId, <a class="code" href="namespacestd.xhtml">std</a>::vector&lt;<a class="code" href="classarmnn_1_1test_1_1_inference_model_test_case.xhtml#acf933608643ce27b3c68e3431d047d0a">TContainer</a>&gt;{ modelInput }, { model.GetOutputSize() })</div><div class="line"><a name="l00043"></a><span class="lineno">   43</span>&#160;    , m_Label(label)</div><div class="line"><a name="l00044"></a><span class="lineno">   44</span>&#160;    , m_QuantizationParams(model.GetQuantizationParams())</div><div class="line"><a name="l00045"></a><span class="lineno">   45</span>&#160;    , m_NumInferencesRef(numInferencesRef)</div><div class="line"><a name="l00046"></a><span class="lineno">   46</span>&#160;    , m_NumCorrectInferencesRef(numCorrectInferencesRef)</div><div class="line"><a name="l00047"></a><span class="lineno">   47</span>&#160;    , m_ValidationPredictions(validationPredictions)</div><div class="line"><a name="l00048"></a><span class="lineno">   48</span>&#160;    , m_ValidationPredictionsOut(validationPredictionsOut)</div><div class="line"><a name="l00049"></a><span class="lineno">   49</span>&#160;{</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;</div><div class="line"><a name="l00052"></a><span class="lineno">   52</span>&#160;<span class="keyword">struct </span>ClassifierResultProcessor</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">using</span> ResultMap = std::map&lt;float,int&gt;;</div><div class="line"><a name="l00055"></a><span class="lineno">   55</span>&#160;</div><div class="line"><a name="l00056"></a><span class="lineno">   56</span>&#160;    ClassifierResultProcessor(<span class="keywordtype">float</span> scale, <span class="keywordtype">int</span> offset)</div><div class="line"><a name="l00057"></a><span class="lineno">   57</span>&#160;        : m_Scale(scale)</div><div class="line"><a name="l00058"></a><span class="lineno">   58</span>&#160;        , m_Offset(offset)</div><div class="line"><a name="l00059"></a><span class="lineno">   59</span>&#160;    {}</div><div class="line"><a name="l00060"></a><span class="lineno">   60</span>&#160;</div><div class="line"><a name="l00061"></a><span class="lineno">   61</span>&#160;    <span class="keywordtype">void</span> operator()(<span class="keyword">const</span> std::vector&lt;float&gt;&amp; values)</div><div class="line"><a name="l00062"></a><span class="lineno">   62</span>&#160;    {</div><div class="line"><a name="l00063"></a><span class="lineno">   63</span>&#160;        SortPredictions(values, [](<span class="keywordtype">float</span> value)</div><div class="line"><a name="l00064"></a><span class="lineno">   64</span>&#160;                                {</div><div class="line"><a name="l00065"></a><span class="lineno">   65</span>&#160;                                    <span class="keywordflow">return</span> value;</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;    }</div><div class="line"><a name="l00068"></a><span class="lineno">   68</span>&#160;</div><div class="line"><a name="l00069"></a><span class="lineno">   69</span>&#160;    <span class="keywordtype">void</span> operator()(<span class="keyword">const</span> std::vector&lt;uint8_t&gt;&amp; values)</div><div class="line"><a name="l00070"></a><span class="lineno">   70</span>&#160;    {</div><div class="line"><a name="l00071"></a><span class="lineno">   71</span>&#160;        <span class="keyword">auto</span>&amp; scale = m_Scale;</div><div class="line"><a name="l00072"></a><span class="lineno">   72</span>&#160;        <span class="keyword">auto</span>&amp; offset = m_Offset;</div><div class="line"><a name="l00073"></a><span class="lineno">   73</span>&#160;        SortPredictions(values, [&amp;scale, &amp;offset](uint8_t value)</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="keywordflow">return</span> <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9bc35e069257a508e14ed82965a8661d">armnn::Dequantize</a>(value, scale, offset);</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;    }</div><div class="line"><a name="l00078"></a><span class="lineno">   78</span>&#160;</div><div class="line"><a name="l00079"></a><span class="lineno">   79</span>&#160;    <span class="keywordtype">void</span> operator()(<span class="keyword">const</span> std::vector&lt;int&gt;&amp; values)</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;        <a class="code" href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">IgnoreUnused</a>(values);</div><div class="line"><a name="l00082"></a><span class="lineno">   82</span>&#160;        <a class="code" href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a>(<span class="keyword">false</span>, <span class="stringliteral">&quot;Non-float predictions output not supported.&quot;</span>);</div><div class="line"><a name="l00083"></a><span class="lineno">   83</span>&#160;    }</div><div class="line"><a name="l00084"></a><span class="lineno">   84</span>&#160;</div><div class="line"><a name="l00085"></a><span class="lineno">   85</span>&#160;    ResultMap&amp; GetResultMap() { <span class="keywordflow">return</span> m_ResultMap; }</div><div class="line"><a name="l00086"></a><span class="lineno">   86</span>&#160;</div><div class="line"><a name="l00087"></a><span class="lineno">   87</span>&#160;<span class="keyword">private</span>:</div><div class="line"><a name="l00088"></a><span class="lineno">   88</span>&#160;    <span class="keyword">template</span>&lt;<span class="keyword">typename</span> Container, <span class="keyword">typename</span> Delegate&gt;</div><div class="line"><a name="l00089"></a><span class="lineno">   89</span>&#160;    <span class="keywordtype">void</span> SortPredictions(<span class="keyword">const</span> Container&amp; c, Delegate delegate)</div><div class="line"><a name="l00090"></a><span class="lineno">   90</span>&#160;    {</div><div class="line"><a name="l00091"></a><span class="lineno">   91</span>&#160;        <span class="keywordtype">int</span> index = 0;</div><div class="line"><a name="l00092"></a><span class="lineno">   92</span>&#160;        <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keyword">auto</span>&amp; value : c)</div><div class="line"><a name="l00093"></a><span class="lineno">   93</span>&#160;        {</div><div class="line"><a name="l00094"></a><span class="lineno">   94</span>&#160;            <span class="keywordtype">int</span> classification = index++;</div><div class="line"><a name="l00095"></a><span class="lineno">   95</span>&#160;            <span class="comment">// Take the first class with each probability</span></div><div class="line"><a name="l00096"></a><span class="lineno">   96</span>&#160;            <span class="comment">// This avoids strange results when looping over batched results produced</span></div><div class="line"><a name="l00097"></a><span class="lineno">   97</span>&#160;            <span class="comment">// with identical test data.</span></div><div class="line"><a name="l00098"></a><span class="lineno">   98</span>&#160;            ResultMap::iterator lb = m_ResultMap.lower_bound(value);</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="keywordflow">if</span> (lb == m_ResultMap.end() || !m_ResultMap.key_comp()(value, lb-&gt;first))</div><div class="line"><a name="l00101"></a><span class="lineno">  101</span>&#160;            {</div><div class="line"><a name="l00102"></a><span class="lineno">  102</span>&#160;                <span class="comment">// If the key is not already in the map, insert it.</span></div><div class="line"><a name="l00103"></a><span class="lineno">  103</span>&#160;                m_ResultMap.insert(lb, ResultMap::value_type(delegate(value), classification));</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;        }</div><div class="line"><a name="l00106"></a><span class="lineno">  106</span>&#160;    }</div><div class="line"><a name="l00107"></a><span class="lineno">  107</span>&#160;</div><div class="line"><a name="l00108"></a><span class="lineno">  108</span>&#160;    ResultMap m_ResultMap;</div><div class="line"><a name="l00109"></a><span class="lineno">  109</span>&#160;</div><div class="line"><a name="l00110"></a><span class="lineno">  110</span>&#160;    <span class="keywordtype">float</span> m_Scale=0.0f;</div><div class="line"><a name="l00111"></a><span class="lineno">  111</span>&#160;    <span class="keywordtype">int</span> m_Offset=0;</div><div class="line"><a name="l00112"></a><span class="lineno">  112</span>&#160;};</div><div class="line"><a name="l00113"></a><span class="lineno">  113</span>&#160;</div><div class="line"><a name="l00114"></a><span class="lineno">  114</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TTestCaseDatabase, <span class="keyword">typename</span> TModel&gt;</div><div class="line"><a name="l00115"></a><span class="lineno"><a class="line" href="classarmnn_1_1test_1_1_classifier_test_case.xhtml#a27343faac4033409ef6f5a60e025bf65">  115</a></span>&#160;<a class="code" href="namespacearmnn_1_1test.xhtml#a05b3d6105613d2d14099667a6b8ca67b">TestCaseResult</a> <a class="code" href="classarmnn_1_1test_1_1_classifier_test_case.xhtml#a27343faac4033409ef6f5a60e025bf65">ClassifierTestCase&lt;TTestCaseDatabase, TModel&gt;::ProcessResult</a>(<span class="keyword">const</span> <a class="code" href="structarmnn_1_1test_1_1_inference_test_options.xhtml">InferenceTestOptions</a>&amp; params)</div><div class="line"><a name="l00116"></a><span class="lineno">  116</span>&#160;{</div><div class="line"><a name="l00117"></a><span class="lineno">  117</span>&#160;    <span class="keyword">auto</span>&amp; output = this-&gt;<a class="code" href="classarmnn_1_1test_1_1_inference_model_test_case.xhtml#ae7a175231eff460f6d32272930049ca2">GetOutputs</a>()[0];</div><div class="line"><a name="l00118"></a><span class="lineno">  118</span>&#160;    <span class="keyword">const</span> <span class="keyword">auto</span> testCaseId = this-&gt;<a class="code" href="classarmnn_1_1test_1_1_inference_model_test_case.xhtml#a4ab19ef735b92c4d4f688f0659e5565e">GetTestCaseId</a>();</div><div class="line"><a name="l00119"></a><span class="lineno">  119</span>&#160;</div><div class="line"><a name="l00120"></a><span class="lineno">  120</span>&#160;    ClassifierResultProcessor resultProcessor(m_QuantizationParams.first, m_QuantizationParams.second);</div><div class="line"><a name="l00121"></a><span class="lineno">  121</span>&#160;    mapbox::util::apply_visitor(resultProcessor, output);</div><div class="line"><a name="l00122"></a><span class="lineno">  122</span>&#160;</div><div class="line"><a name="l00123"></a><span class="lineno">  123</span>&#160;    <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>) &lt;&lt; <span class="stringliteral">&quot;= Prediction values for test #&quot;</span> &lt;&lt; testCaseId;</div><div class="line"><a name="l00124"></a><span class="lineno">  124</span>&#160;    <span class="keyword">auto</span> it = resultProcessor.GetResultMap().rbegin();</div><div class="line"><a name="l00125"></a><span class="lineno">  125</span>&#160;    <span class="keywordflow">for</span> (<span class="keywordtype">int</span> i=0; i&lt;5 &amp;&amp; it != resultProcessor.GetResultMap().rend(); ++i)</div><div class="line"><a name="l00126"></a><span class="lineno">  126</span>&#160;    {</div><div class="line"><a name="l00127"></a><span class="lineno">  127</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>) &lt;&lt; <span class="stringliteral">&quot;Top(&quot;</span> &lt;&lt; (i+1) &lt;&lt; <span class="stringliteral">&quot;) prediction is &quot;</span> &lt;&lt; it-&gt;second &lt;&lt;</div><div class="line"><a name="l00128"></a><span class="lineno">  128</span>&#160;          <span class="stringliteral">&quot; with value: &quot;</span> &lt;&lt; (it-&gt;first);</div><div class="line"><a name="l00129"></a><span class="lineno">  129</span>&#160;        ++it;</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;</div><div class="line"><a name="l00132"></a><span class="lineno">  132</span>&#160;    <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> prediction = 0;</div><div class="line"><a name="l00133"></a><span class="lineno">  133</span>&#160;    mapbox::util::apply_visitor([&amp;](<span class="keyword">auto</span>&amp;&amp; value)</div><div class="line"><a name="l00134"></a><span class="lineno">  134</span>&#160;                         {</div><div class="line"><a name="l00135"></a><span class="lineno">  135</span>&#160;                             prediction = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span>&gt;(</div><div class="line"><a name="l00136"></a><span class="lineno">  136</span>&#160;                                     std::distance(value.begin(), std::max_element(value.begin(), value.end())));</div><div class="line"><a name="l00137"></a><span class="lineno">  137</span>&#160;                         },</div><div class="line"><a name="l00138"></a><span class="lineno">  138</span>&#160;                         output);</div><div class="line"><a name="l00139"></a><span class="lineno">  139</span>&#160;</div><div class="line"><a name="l00140"></a><span class="lineno">  140</span>&#160;    <span class="comment">// If we&#39;re just running the defaultTestCaseIds, each one must be classified correctly.</span></div><div class="line"><a name="l00141"></a><span class="lineno">  141</span>&#160;    <span class="keywordflow">if</span> (params.<a class="code" href="structarmnn_1_1test_1_1_inference_test_options.xhtml#ac9c49972e7f8db643b3c72aa782278df">m_IterationCount</a> == 0 &amp;&amp; prediction != m_Label)</div><div class="line"><a name="l00142"></a><span class="lineno">  142</span>&#160;    {</div><div class="line"><a name="l00143"></a><span class="lineno">  143</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>) &lt;&lt; <span class="stringliteral">&quot;Prediction for test case &quot;</span> &lt;&lt; testCaseId &lt;&lt; <span class="stringliteral">&quot; (&quot;</span> &lt;&lt; prediction &lt;&lt; <span class="stringliteral">&quot;)&quot;</span> &lt;&lt;</div><div class="line"><a name="l00144"></a><span class="lineno">  144</span>&#160;            <span class="stringliteral">&quot; is incorrect (should be &quot;</span> &lt;&lt; m_Label &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00145"></a><span class="lineno">  145</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="namespacearmnn_1_1test.xhtml#a05b3d6105613d2d14099667a6b8ca67bad7c8c85bf79bbe1b7188497c32c3b0ca">TestCaseResult::Failed</a>;</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;</div><div class="line"><a name="l00148"></a><span class="lineno">  148</span>&#160;    <span class="comment">// If a validation file was provided as input, it checks that the prediction matches.</span></div><div class="line"><a name="l00149"></a><span class="lineno">  149</span>&#160;    <span class="keywordflow">if</span> (!m_ValidationPredictions.empty() &amp;&amp; prediction != m_ValidationPredictions[testCaseId])</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;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>) &lt;&lt; <span class="stringliteral">&quot;Prediction for test case &quot;</span> &lt;&lt; testCaseId &lt;&lt; <span class="stringliteral">&quot; (&quot;</span> &lt;&lt; prediction &lt;&lt; <span class="stringliteral">&quot;)&quot;</span> &lt;&lt;</div><div class="line"><a name="l00152"></a><span class="lineno">  152</span>&#160;            <span class="stringliteral">&quot; doesn&#39;t match the prediction in the validation file (&quot;</span> &lt;&lt; m_ValidationPredictions[testCaseId] &lt;&lt; <span class="stringliteral">&quot;)&quot;</span>;</div><div class="line"><a name="l00153"></a><span class="lineno">  153</span>&#160;        <span class="keywordflow">return</span> <a class="code" href="namespacearmnn_1_1test.xhtml#a05b3d6105613d2d14099667a6b8ca67bad7c8c85bf79bbe1b7188497c32c3b0ca">TestCaseResult::Failed</a>;</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;</div><div class="line"><a name="l00156"></a><span class="lineno">  156</span>&#160;    <span class="comment">// If a validation file was requested as output, it stores the predictions.</span></div><div class="line"><a name="l00157"></a><span class="lineno">  157</span>&#160;    <span class="keywordflow">if</span> (m_ValidationPredictionsOut)</div><div class="line"><a name="l00158"></a><span class="lineno">  158</span>&#160;    {</div><div class="line"><a name="l00159"></a><span class="lineno">  159</span>&#160;        m_ValidationPredictionsOut-&gt;push_back(prediction);</div><div class="line"><a name="l00160"></a><span class="lineno">  160</span>&#160;    }</div><div class="line"><a name="l00161"></a><span class="lineno">  161</span>&#160;</div><div class="line"><a name="l00162"></a><span class="lineno">  162</span>&#160;    <span class="comment">// Updates accuracy stats.</span></div><div class="line"><a name="l00163"></a><span class="lineno">  163</span>&#160;    m_NumInferencesRef++;</div><div class="line"><a name="l00164"></a><span class="lineno">  164</span>&#160;    <span class="keywordflow">if</span> (prediction == m_Label)</div><div class="line"><a name="l00165"></a><span class="lineno">  165</span>&#160;    {</div><div class="line"><a name="l00166"></a><span class="lineno">  166</span>&#160;        m_NumCorrectInferencesRef++;</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;</div><div class="line"><a name="l00169"></a><span class="lineno">  169</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacearmnn_1_1test.xhtml#a05b3d6105613d2d14099667a6b8ca67baa60852f204ed8028c1c58808b746d115">TestCaseResult::Ok</a>;</div><div class="line"><a name="l00170"></a><span class="lineno">  170</span>&#160;}</div><div class="line"><a name="l00171"></a><span class="lineno">  171</span>&#160;</div><div class="line"><a name="l00172"></a><span class="lineno">  172</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TDatabase, <span class="keyword">typename</span> InferenceModel&gt;</div><div class="line"><a name="l00173"></a><span class="lineno">  173</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TConstructDatabaseCallable, <span class="keyword">typename</span> TConstructModelCallable&gt;</div><div class="line"><a name="l00174"></a><span class="lineno"><a class="line" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#a566acf29d57266042a6169d5a9635599">  174</a></span>&#160;<a class="code" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#a566acf29d57266042a6169d5a9635599">ClassifierTestCaseProvider&lt;TDatabase, InferenceModel&gt;::ClassifierTestCaseProvider</a>(</div><div class="line"><a name="l00175"></a><span class="lineno">  175</span>&#160;    TConstructDatabaseCallable constructDatabase, TConstructModelCallable constructModel)</div><div class="line"><a name="l00176"></a><span class="lineno">  176</span>&#160;    : m_ConstructModel(constructModel)</div><div class="line"><a name="l00177"></a><span class="lineno">  177</span>&#160;    , m_ConstructDatabase(constructDatabase)</div><div class="line"><a name="l00178"></a><span class="lineno">  178</span>&#160;    , m_NumInferences(0)</div><div class="line"><a name="l00179"></a><span class="lineno">  179</span>&#160;    , m_NumCorrectInferences(0)</div><div class="line"><a name="l00180"></a><span class="lineno">  180</span>&#160;{</div><div class="line"><a name="l00181"></a><span class="lineno">  181</span>&#160;}</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;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TDatabase, <span class="keyword">typename</span> InferenceModel&gt;</div><div class="line"><a name="l00184"></a><span class="lineno"><a class="line" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#a7b48e7fbef45acdb72258c3c8981c8b8">  184</a></span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#a7b48e7fbef45acdb72258c3c8981c8b8">ClassifierTestCaseProvider&lt;TDatabase, InferenceModel&gt;::AddCommandLineOptions</a>(</div><div class="line"><a name="l00185"></a><span class="lineno">  185</span>&#160;    cxxopts::Options&amp; options, std::vector&lt;std::string&gt;&amp; required)</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;    options</div><div class="line"><a name="l00188"></a><span class="lineno">  188</span>&#160;        .allow_unrecognised_options()</div><div class="line"><a name="l00189"></a><span class="lineno">  189</span>&#160;        .add_options()</div><div class="line"><a name="l00190"></a><span class="lineno">  190</span>&#160;            (<span class="stringliteral">&quot;validation-file-in&quot;</span>,</div><div class="line"><a name="l00191"></a><span class="lineno">  191</span>&#160;             <span class="stringliteral">&quot;Reads expected predictions from the given file and confirms they match the actual predictions.&quot;</span>,</div><div class="line"><a name="l00192"></a><span class="lineno">  192</span>&#160;             cxxopts::value&lt;std::string&gt;(m_ValidationFileIn)-&gt;default_value(<span class="stringliteral">&quot;&quot;</span>))</div><div class="line"><a name="l00193"></a><span class="lineno">  193</span>&#160;            (<span class="stringliteral">&quot;validation-file-out&quot;</span>, <span class="stringliteral">&quot;Predictions are saved to the given file for later use via --validation-file-in.&quot;</span>,</div><div class="line"><a name="l00194"></a><span class="lineno">  194</span>&#160;             cxxopts::value&lt;std::string&gt;(m_ValidationFileOut)-&gt;default_value(<span class="stringliteral">&quot;&quot;</span>))</div><div class="line"><a name="l00195"></a><span class="lineno">  195</span>&#160;            (<span class="stringliteral">&quot;d,data-dir&quot;</span>, <span class="stringliteral">&quot;Path to directory containing test data&quot;</span>, cxxopts::value&lt;std::string&gt;(m_DataDir));</div><div class="line"><a name="l00196"></a><span class="lineno">  196</span>&#160;</div><div class="line"><a name="l00197"></a><span class="lineno">  197</span>&#160;    required.emplace_back(<span class="stringliteral">&quot;data-dir&quot;</span>); <span class="comment">//add to required arguments to check</span></div><div class="line"><a name="l00198"></a><span class="lineno">  198</span>&#160;</div><div class="line"><a name="l00199"></a><span class="lineno">  199</span>&#160;    <a class="code" href="class_inference_model.xhtml#a22794efa5d496a49a33739dd99087841">InferenceModel::AddCommandLineOptions</a>(options, m_ModelCommandLineOptions, required);</div><div class="line"><a name="l00200"></a><span class="lineno">  200</span>&#160;}</div><div class="line"><a name="l00201"></a><span class="lineno">  201</span>&#160;</div><div class="line"><a name="l00202"></a><span class="lineno">  202</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TDatabase, <span class="keyword">typename</span> InferenceModel&gt;</div><div class="line"><a name="l00203"></a><span class="lineno"><a class="line" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#ad0077cdc7e406ec5e942e2a148edc077">  203</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#ad0077cdc7e406ec5e942e2a148edc077">ClassifierTestCaseProvider&lt;TDatabase, InferenceModel&gt;::ProcessCommandLineOptions</a>(</div><div class="line"><a name="l00204"></a><span class="lineno">  204</span>&#160;        <span class="keyword">const</span> <a class="code" href="structarmnn_1_1test_1_1_inference_test_options.xhtml">InferenceTestOptions</a>&amp; commonOptions)</div><div class="line"><a name="l00205"></a><span class="lineno">  205</span>&#160;{</div><div class="line"><a name="l00206"></a><span class="lineno">  206</span>&#160;    <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn_1_1test.xhtml#a8a678fb3a8864e31aeb77f857ae6fc43">ValidateDirectory</a>(m_DataDir))</div><div class="line"><a name="l00207"></a><span class="lineno">  207</span>&#160;    {</div><div class="line"><a name="l00208"></a><span class="lineno">  208</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00209"></a><span class="lineno">  209</span>&#160;    }</div><div class="line"><a name="l00210"></a><span class="lineno">  210</span>&#160;</div><div class="line"><a name="l00211"></a><span class="lineno">  211</span>&#160;    ReadPredictions();</div><div class="line"><a name="l00212"></a><span class="lineno">  212</span>&#160;</div><div class="line"><a name="l00213"></a><span class="lineno">  213</span>&#160;    m_Model = m_ConstructModel(commonOptions, m_ModelCommandLineOptions);</div><div class="line"><a name="l00214"></a><span class="lineno">  214</span>&#160;    <span class="keywordflow">if</span> (!m_Model)</div><div class="line"><a name="l00215"></a><span class="lineno">  215</span>&#160;    {</div><div class="line"><a name="l00216"></a><span class="lineno">  216</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00217"></a><span class="lineno">  217</span>&#160;    }</div><div class="line"><a name="l00218"></a><span class="lineno">  218</span>&#160;</div><div class="line"><a name="l00219"></a><span class="lineno">  219</span>&#160;    m_Database = std::make_unique&lt;TDatabase&gt;(m_ConstructDatabase(m_DataDir.c_str(), *m_Model));</div><div class="line"><a name="l00220"></a><span class="lineno">  220</span>&#160;    <span class="keywordflow">if</span> (!m_Database)</div><div class="line"><a name="l00221"></a><span class="lineno">  221</span>&#160;    {</div><div class="line"><a name="l00222"></a><span class="lineno">  222</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00223"></a><span class="lineno">  223</span>&#160;    }</div><div class="line"><a name="l00224"></a><span class="lineno">  224</span>&#160;</div><div class="line"><a name="l00225"></a><span class="lineno">  225</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00226"></a><span class="lineno">  226</span>&#160;}</div><div class="line"><a name="l00227"></a><span class="lineno">  227</span>&#160;</div><div class="line"><a name="l00228"></a><span class="lineno">  228</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TDatabase, <span class="keyword">typename</span> InferenceModel&gt;</div><div class="line"><a name="l00229"></a><span class="lineno">  229</span>&#160;std::unique_ptr&lt;IInferenceTestCase&gt;</div><div class="line"><a name="l00230"></a><span class="lineno"><a class="line" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#ab5ab4ef07d28ff282c5e3109deed810e">  230</a></span>&#160;<a class="code" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#ab5ab4ef07d28ff282c5e3109deed810e">ClassifierTestCaseProvider&lt;TDatabase, InferenceModel&gt;::GetTestCase</a>(<span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> testCaseId)</div><div class="line"><a name="l00231"></a><span class="lineno">  231</span>&#160;{</div><div class="line"><a name="l00232"></a><span class="lineno">  232</span>&#160;    std::unique_ptr&lt;typename TDatabase::TTestCaseData&gt; testCaseData = m_Database-&gt;GetTestCaseData(testCaseId);</div><div class="line"><a name="l00233"></a><span class="lineno">  233</span>&#160;    <span class="keywordflow">if</span> (testCaseData == <span class="keyword">nullptr</span>)</div><div class="line"><a name="l00234"></a><span class="lineno">  234</span>&#160;    {</div><div class="line"><a name="l00235"></a><span class="lineno">  235</span>&#160;        <span class="keywordflow">return</span> <span class="keyword">nullptr</span>;</div><div class="line"><a name="l00236"></a><span class="lineno">  236</span>&#160;    }</div><div class="line"><a name="l00237"></a><span class="lineno">  237</span>&#160;</div><div class="line"><a name="l00238"></a><span class="lineno">  238</span>&#160;    <span class="keywordflow">return</span> std::make_unique&lt;ClassifierTestCase&lt;TDatabase, InferenceModel&gt;&gt;(</div><div class="line"><a name="l00239"></a><span class="lineno">  239</span>&#160;        m_NumInferences,</div><div class="line"><a name="l00240"></a><span class="lineno">  240</span>&#160;        m_NumCorrectInferences,</div><div class="line"><a name="l00241"></a><span class="lineno">  241</span>&#160;        m_ValidationPredictions,</div><div class="line"><a name="l00242"></a><span class="lineno">  242</span>&#160;        m_ValidationFileOut.empty() ? nullptr : &amp;m_ValidationPredictionsOut,</div><div class="line"><a name="l00243"></a><span class="lineno">  243</span>&#160;        *m_Model,</div><div class="line"><a name="l00244"></a><span class="lineno">  244</span>&#160;        testCaseId,</div><div class="line"><a name="l00245"></a><span class="lineno">  245</span>&#160;        testCaseData-&gt;m_Label,</div><div class="line"><a name="l00246"></a><span class="lineno">  246</span>&#160;        std::move(testCaseData-&gt;m_InputImage));</div><div class="line"><a name="l00247"></a><span class="lineno">  247</span>&#160;}</div><div class="line"><a name="l00248"></a><span class="lineno">  248</span>&#160;</div><div class="line"><a name="l00249"></a><span class="lineno">  249</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TDatabase, <span class="keyword">typename</span> InferenceModel&gt;</div><div class="line"><a name="l00250"></a><span class="lineno"><a class="line" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#a57a7735851dc40abdb1328e6f97f7b0f">  250</a></span>&#160;<span class="keywordtype">bool</span> <a class="code" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#a57a7735851dc40abdb1328e6f97f7b0f">ClassifierTestCaseProvider&lt;TDatabase, InferenceModel&gt;::OnInferenceTestFinished</a>()</div><div class="line"><a name="l00251"></a><span class="lineno">  251</span>&#160;{</div><div class="line"><a name="l00252"></a><span class="lineno">  252</span>&#160;    <span class="keyword">const</span> <span class="keywordtype">double</span> accuracy = <a class="code" href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a>&lt;<span class="keywordtype">double</span>&gt;(m_NumCorrectInferences) /</div><div class="line"><a name="l00253"></a><span class="lineno">  253</span>&#160;        armnn::numeric_cast&lt;double&gt;(m_NumInferences);</div><div class="line"><a name="l00254"></a><span class="lineno">  254</span>&#160;    <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">info</a>) &lt;&lt; std::fixed &lt;&lt; std::setprecision(3) &lt;&lt; <span class="stringliteral">&quot;Overall accuracy: &quot;</span> &lt;&lt; accuracy;</div><div class="line"><a name="l00255"></a><span class="lineno">  255</span>&#160;</div><div class="line"><a name="l00256"></a><span class="lineno">  256</span>&#160;    <span class="comment">// If a validation file was requested as output, the predictions are saved to it.</span></div><div class="line"><a name="l00257"></a><span class="lineno">  257</span>&#160;    <span class="keywordflow">if</span> (!m_ValidationFileOut.empty())</div><div class="line"><a name="l00258"></a><span class="lineno">  258</span>&#160;    {</div><div class="line"><a name="l00259"></a><span class="lineno">  259</span>&#160;        std::ofstream validationFileOut(m_ValidationFileOut.c_str(), std::ios_base::trunc | std::ios_base::out);</div><div class="line"><a name="l00260"></a><span class="lineno">  260</span>&#160;        <span class="keywordflow">if</span> (validationFileOut.good())</div><div class="line"><a name="l00261"></a><span class="lineno">  261</span>&#160;        {</div><div class="line"><a name="l00262"></a><span class="lineno">  262</span>&#160;            <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> prediction : m_ValidationPredictionsOut)</div><div class="line"><a name="l00263"></a><span class="lineno">  263</span>&#160;            {</div><div class="line"><a name="l00264"></a><span class="lineno">  264</span>&#160;                validationFileOut &lt;&lt; prediction &lt;&lt; std::endl;</div><div class="line"><a name="l00265"></a><span class="lineno">  265</span>&#160;            }</div><div class="line"><a name="l00266"></a><span class="lineno">  266</span>&#160;        }</div><div class="line"><a name="l00267"></a><span class="lineno">  267</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00268"></a><span class="lineno">  268</span>&#160;        {</div><div class="line"><a name="l00269"></a><span class="lineno">  269</span>&#160;            <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">error</a>) &lt;&lt; <span class="stringliteral">&quot;Failed to open output validation file: &quot;</span> &lt;&lt; m_ValidationFileOut;</div><div class="line"><a name="l00270"></a><span class="lineno">  270</span>&#160;            <span class="keywordflow">return</span> <span class="keyword">false</span>;</div><div class="line"><a name="l00271"></a><span class="lineno">  271</span>&#160;        }</div><div class="line"><a name="l00272"></a><span class="lineno">  272</span>&#160;    }</div><div class="line"><a name="l00273"></a><span class="lineno">  273</span>&#160;</div><div class="line"><a name="l00274"></a><span class="lineno">  274</span>&#160;    <span class="keywordflow">return</span> <span class="keyword">true</span>;</div><div class="line"><a name="l00275"></a><span class="lineno">  275</span>&#160;}</div><div class="line"><a name="l00276"></a><span class="lineno">  276</span>&#160;</div><div class="line"><a name="l00277"></a><span class="lineno">  277</span>&#160;<span class="keyword">template</span> &lt;<span class="keyword">typename</span> TDatabase, <span class="keyword">typename</span> InferenceModel&gt;</div><div class="line"><a name="l00278"></a><span class="lineno">  278</span>&#160;<span class="keywordtype">void</span> <a class="code" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml">ClassifierTestCaseProvider&lt;TDatabase, InferenceModel&gt;::ReadPredictions</a>()</div><div class="line"><a name="l00279"></a><span class="lineno">  279</span>&#160;{</div><div class="line"><a name="l00280"></a><span class="lineno">  280</span>&#160;    <span class="comment">// Reads the expected predictions from the input validation file (if provided).</span></div><div class="line"><a name="l00281"></a><span class="lineno">  281</span>&#160;    <span class="keywordflow">if</span> (!m_ValidationFileIn.empty())</div><div class="line"><a name="l00282"></a><span class="lineno">  282</span>&#160;    {</div><div class="line"><a name="l00283"></a><span class="lineno">  283</span>&#160;        std::ifstream validationFileIn(m_ValidationFileIn.c_str(), std::ios_base::in);</div><div class="line"><a name="l00284"></a><span class="lineno">  284</span>&#160;        <span class="keywordflow">if</span> (validationFileIn.good())</div><div class="line"><a name="l00285"></a><span class="lineno">  285</span>&#160;        {</div><div class="line"><a name="l00286"></a><span class="lineno">  286</span>&#160;            <span class="keywordflow">while</span> (!validationFileIn.eof())</div><div class="line"><a name="l00287"></a><span class="lineno">  287</span>&#160;            {</div><div class="line"><a name="l00288"></a><span class="lineno">  288</span>&#160;                <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;</div><div class="line"><a name="l00289"></a><span class="lineno">  289</span>&#160;                validationFileIn &gt;&gt; i;</div><div class="line"><a name="l00290"></a><span class="lineno">  290</span>&#160;                m_ValidationPredictions.emplace_back(i);</div><div class="line"><a name="l00291"></a><span class="lineno">  291</span>&#160;            }</div><div class="line"><a name="l00292"></a><span class="lineno">  292</span>&#160;        }</div><div class="line"><a name="l00293"></a><span class="lineno">  293</span>&#160;        <span class="keywordflow">else</span></div><div class="line"><a name="l00294"></a><span class="lineno">  294</span>&#160;        {</div><div class="line"><a name="l00295"></a><span class="lineno">  295</span>&#160;            <span class="keywordflow">throw</span> <a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a>(fmt::format(<span class="stringliteral">&quot;Failed to open input validation file: {}&quot;</span></div><div class="line"><a name="l00296"></a><span class="lineno">  296</span>&#160;                , m_ValidationFileIn));</div><div class="line"><a name="l00297"></a><span class="lineno">  297</span>&#160;        }</div><div class="line"><a name="l00298"></a><span class="lineno">  298</span>&#160;    }</div><div class="line"><a name="l00299"></a><span class="lineno">  299</span>&#160;}</div><div class="line"><a name="l00300"></a><span class="lineno">  300</span>&#160;</div><div class="line"><a name="l00301"></a><span class="lineno">  301</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> TConstructTestCaseProv<span class="keywordtype">id</span>er&gt;</div><div class="line"><a name="l00302"></a><span class="lineno"><a class="line" href="namespacearmnn_1_1test.xhtml#a7ad751ee33bdcba0656fdb6e98eb17f1">  302</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="namespacearmnn_1_1test.xhtml#a7ad751ee33bdcba0656fdb6e98eb17f1">InferenceTestMain</a>(<span class="keywordtype">int</span> argc,</div><div class="line"><a name="l00303"></a><span class="lineno">  303</span>&#160;    <span class="keywordtype">char</span>* argv[],</div><div class="line"><a name="l00304"></a><span class="lineno">  304</span>&#160;    <span class="keyword">const</span> std::vector&lt;unsigned int&gt;&amp; defaultTestCaseIds,</div><div class="line"><a name="l00305"></a><span class="lineno">  305</span>&#160;    TConstructTestCaseProvider constructTestCaseProvider)</div><div class="line"><a name="l00306"></a><span class="lineno">  306</span>&#160;{</div><div class="line"><a name="l00307"></a><span class="lineno">  307</span>&#160;    <span class="comment">// Configures logging for both the ARMNN library and this test program.</span></div><div class="line"><a name="l00308"></a><span class="lineno">  308</span>&#160;<span class="preprocessor">#ifdef NDEBUG</span></div><div class="line"><a name="l00309"></a><span class="lineno">  309</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">armnn::LogSeverity</a> level = <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">armnn::LogSeverity::Info</a>;</div><div class="line"><a name="l00310"></a><span class="lineno">  310</span>&#160;<span class="preprocessor">#else</span></div><div class="line"><a name="l00311"></a><span class="lineno">  311</span>&#160;    <a class="code" href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">armnn::LogSeverity</a> level = <a class="code" href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba">armnn::LogSeverity::Debug</a>;</div><div class="line"><a name="l00312"></a><span class="lineno">  312</span>&#160;<span class="preprocessor">#endif</span></div><div class="line"><a name="l00313"></a><span class="lineno">  313</span>&#160;    <a class="code" href="namespacearmnn.xhtml#aa59f7a819c3e29d10ffc41e5c0616872">armnn::ConfigureLogging</a>(<span class="keyword">true</span>, <span class="keyword">true</span>, level);</div><div class="line"><a name="l00314"></a><span class="lineno">  314</span>&#160;</div><div class="line"><a name="l00315"></a><span class="lineno">  315</span>&#160;    <span class="keywordflow">try</span></div><div class="line"><a name="l00316"></a><span class="lineno">  316</span>&#160;    {</div><div class="line"><a name="l00317"></a><span class="lineno">  317</span>&#160;        std::unique_ptr&lt;IInferenceTestCaseProvider&gt; testCaseProvider = constructTestCaseProvider();</div><div class="line"><a name="l00318"></a><span class="lineno">  318</span>&#160;        <span class="keywordflow">if</span> (!testCaseProvider)</div><div class="line"><a name="l00319"></a><span class="lineno">  319</span>&#160;        {</div><div class="line"><a name="l00320"></a><span class="lineno">  320</span>&#160;            <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00321"></a><span class="lineno">  321</span>&#160;        }</div><div class="line"><a name="l00322"></a><span class="lineno">  322</span>&#160;</div><div class="line"><a name="l00323"></a><span class="lineno">  323</span>&#160;        <a class="code" href="structarmnn_1_1test_1_1_inference_test_options.xhtml">InferenceTestOptions</a> inferenceTestOptions;</div><div class="line"><a name="l00324"></a><span class="lineno">  324</span>&#160;        <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn_1_1test.xhtml#ae2e622d6018bd48beabd765d4f6e5714">ParseCommandLine</a>(argc, argv, *testCaseProvider, inferenceTestOptions))</div><div class="line"><a name="l00325"></a><span class="lineno">  325</span>&#160;        {</div><div class="line"><a name="l00326"></a><span class="lineno">  326</span>&#160;            <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00327"></a><span class="lineno">  327</span>&#160;        }</div><div class="line"><a name="l00328"></a><span class="lineno">  328</span>&#160;</div><div class="line"><a name="l00329"></a><span class="lineno">  329</span>&#160;        <span class="keyword">const</span> <span class="keywordtype">bool</span> success = <a class="code" href="namespacearmnn_1_1test.xhtml#ab5a7cac4237e83d4f0d67d01dfb8ba9f">InferenceTest</a>(inferenceTestOptions, defaultTestCaseIds, *testCaseProvider);</div><div class="line"><a name="l00330"></a><span class="lineno">  330</span>&#160;        <span class="keywordflow">return</span> success ? 0 : 1;</div><div class="line"><a name="l00331"></a><span class="lineno">  331</span>&#160;    }</div><div class="line"><a name="l00332"></a><span class="lineno">  332</span>&#160;    <span class="keywordflow">catch</span> (<a class="code" href="classarmnn_1_1_exception.xhtml">armnn::Exception</a> <span class="keyword">const</span>&amp; e)</div><div class="line"><a name="l00333"></a><span class="lineno">  333</span>&#160;    {</div><div class="line"><a name="l00334"></a><span class="lineno">  334</span>&#160;        <a class="code" href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a>(<a class="code" href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">fatal</a>) &lt;&lt; <span class="stringliteral">&quot;Armnn Error: &quot;</span> &lt;&lt; e.<a class="code" href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">what</a>();</div><div class="line"><a name="l00335"></a><span class="lineno">  335</span>&#160;        <span class="keywordflow">return</span> 1;</div><div class="line"><a name="l00336"></a><span class="lineno">  336</span>&#160;    }</div><div class="line"><a name="l00337"></a><span class="lineno">  337</span>&#160;}</div><div class="line"><a name="l00338"></a><span class="lineno">  338</span>&#160;</div><div class="line"><a name="l00339"></a><span class="lineno">  339</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00340"></a><span class="lineno">  340</span>&#160;<span class="comment">// This function allows us to create a classifier inference test based on:</span></div><div class="line"><a name="l00341"></a><span class="lineno">  341</span>&#160;<span class="comment">//  - a model file name</span></div><div class="line"><a name="l00342"></a><span class="lineno">  342</span>&#160;<span class="comment">//  - which can be a binary or a text file for protobuf formats</span></div><div class="line"><a name="l00343"></a><span class="lineno">  343</span>&#160;<span class="comment">//  - an input tensor name</span></div><div class="line"><a name="l00344"></a><span class="lineno">  344</span>&#160;<span class="comment">//  - an output tensor name</span></div><div class="line"><a name="l00345"></a><span class="lineno">  345</span>&#160;<span class="comment">//  - a set of test case ids</span></div><div class="line"><a name="l00346"></a><span class="lineno">  346</span>&#160;<span class="comment">//  - a callback method which creates an object that can return images</span></div><div class="line"><a name="l00347"></a><span class="lineno">  347</span>&#160;<span class="comment">//    called &#39;Database&#39; in these tests</span></div><div class="line"><a name="l00348"></a><span class="lineno">  348</span>&#160;<span class="comment">//  - and an input tensor shape</span></div><div class="line"><a name="l00349"></a><span class="lineno">  349</span>&#160;<span class="comment">//</span></div><div class="line"><a name="l00350"></a><span class="lineno">  350</span>&#160;<span class="keyword">template</span>&lt;<span class="keyword">typename</span> TDatabase,</div><div class="line"><a name="l00351"></a><span class="lineno">  351</span>&#160;         <span class="keyword">typename</span> TParser,</div><div class="line"><a name="l00352"></a><span class="lineno">  352</span>&#160;         <span class="keyword">typename</span> TConstructDatabaseCallable&gt;</div><div class="line"><a name="l00353"></a><span class="lineno"><a class="line" href="namespacearmnn_1_1test.xhtml#a47dfae02e22fcca1b6b784873b0328d9">  353</a></span>&#160;<span class="keywordtype">int</span> <a class="code" href="namespacearmnn_1_1test.xhtml#a47dfae02e22fcca1b6b784873b0328d9">ClassifierInferenceTestMain</a>(<span class="keywordtype">int</span> argc,</div><div class="line"><a name="l00354"></a><span class="lineno">  354</span>&#160;                                <span class="keywordtype">char</span>* argv[],</div><div class="line"><a name="l00355"></a><span class="lineno">  355</span>&#160;                                <span class="keyword">const</span> <span class="keywordtype">char</span>* modelFilename,</div><div class="line"><a name="l00356"></a><span class="lineno">  356</span>&#160;                                <span class="keywordtype">bool</span> isModelBinary,</div><div class="line"><a name="l00357"></a><span class="lineno">  357</span>&#160;                                <span class="keyword">const</span> <span class="keywordtype">char</span>* inputBindingName,</div><div class="line"><a name="l00358"></a><span class="lineno">  358</span>&#160;                                <span class="keyword">const</span> <span class="keywordtype">char</span>* outputBindingName,</div><div class="line"><a name="l00359"></a><span class="lineno">  359</span>&#160;                                <span class="keyword">const</span> std::vector&lt;unsigned int&gt;&amp; defaultTestCaseIds,</div><div class="line"><a name="l00360"></a><span class="lineno">  360</span>&#160;                                TConstructDatabaseCallable constructDatabase,</div><div class="line"><a name="l00361"></a><span class="lineno">  361</span>&#160;                                <span class="keyword">const</span> <a class="code" href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a>* inputTensorShape)</div><div class="line"><a name="l00362"></a><span class="lineno">  362</span>&#160;</div><div class="line"><a name="l00363"></a><span class="lineno">  363</span>&#160;{</div><div class="line"><a name="l00364"></a><span class="lineno">  364</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(modelFilename);</div><div class="line"><a name="l00365"></a><span class="lineno">  365</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(inputBindingName);</div><div class="line"><a name="l00366"></a><span class="lineno">  366</span>&#160;    <a class="code" href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a>(outputBindingName);</div><div class="line"><a name="l00367"></a><span class="lineno">  367</span>&#160;</div><div class="line"><a name="l00368"></a><span class="lineno">  368</span>&#160;    <span class="keywordflow">return</span> <a class="code" href="namespacearmnn_1_1test.xhtml#a7ad751ee33bdcba0656fdb6e98eb17f1">InferenceTestMain</a>(argc, argv, defaultTestCaseIds,</div><div class="line"><a name="l00369"></a><span class="lineno">  369</span>&#160;        [=]</div><div class="line"><a name="l00370"></a><span class="lineno">  370</span>&#160;        ()</div><div class="line"><a name="l00371"></a><span class="lineno">  371</span>&#160;        {</div><div class="line"><a name="l00372"></a><span class="lineno">  372</span>&#160;            <span class="keyword">using</span> <a class="code" href="class_inference_model.xhtml">InferenceModel</a> = <a class="code" href="class_inference_model.xhtml">InferenceModel&lt;TParser, typename TDatabase::DataType&gt;</a>;</div><div class="line"><a name="l00373"></a><span class="lineno">  373</span>&#160;            <span class="keyword">using</span> TestCaseProvider = <a class="code" href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml">ClassifierTestCaseProvider&lt;TDatabase, InferenceModel&gt;</a>;</div><div class="line"><a name="l00374"></a><span class="lineno">  374</span>&#160;</div><div class="line"><a name="l00375"></a><span class="lineno">  375</span>&#160;            <span class="keywordflow">return</span> make_unique&lt;TestCaseProvider&gt;(constructDatabase,</div><div class="line"><a name="l00376"></a><span class="lineno">  376</span>&#160;                [&amp;]</div><div class="line"><a name="l00377"></a><span class="lineno">  377</span>&#160;                (<span class="keyword">const</span> <a class="code" href="structarmnn_1_1test_1_1_inference_test_options.xhtml">InferenceTestOptions</a> &amp;commonOptions,</div><div class="line"><a name="l00378"></a><span class="lineno">  378</span>&#160;                 <span class="keyword">typename</span> <a class="code" href="struct_inference_model_1_1_command_line_options.xhtml">InferenceModel::CommandLineOptions</a> modelOptions)</div><div class="line"><a name="l00379"></a><span class="lineno">  379</span>&#160;                {</div><div class="line"><a name="l00380"></a><span class="lineno">  380</span>&#160;                    <span class="keywordflow">if</span> (!<a class="code" href="namespacearmnn_1_1test.xhtml#a8a678fb3a8864e31aeb77f857ae6fc43">ValidateDirectory</a>(modelOptions.m_ModelDir))</div><div class="line"><a name="l00381"></a><span class="lineno">  381</span>&#160;                    {</div><div class="line"><a name="l00382"></a><span class="lineno">  382</span>&#160;                        <span class="keywordflow">return</span> std::unique_ptr&lt;InferenceModel&gt;();</div><div class="line"><a name="l00383"></a><span class="lineno">  383</span>&#160;                    }</div><div class="line"><a name="l00384"></a><span class="lineno">  384</span>&#160;</div><div class="line"><a name="l00385"></a><span class="lineno">  385</span>&#160;                    <span class="keyword">typename</span> <a class="code" href="struct_inference_model_internal_1_1_params.xhtml">InferenceModel::Params</a> modelParams;</div><div class="line"><a name="l00386"></a><span class="lineno">  386</span>&#160;                    modelParams.<a class="code" href="struct_inference_model_internal_1_1_params.xhtml#a4fa312cf0d60fbd3988a7c76ab8e2980">m_ModelPath</a> = modelOptions.m_ModelDir + modelFilename;</div><div class="line"><a name="l00387"></a><span class="lineno">  387</span>&#160;                    modelParams.m_InputBindings  = { inputBindingName };</div><div class="line"><a name="l00388"></a><span class="lineno">  388</span>&#160;                    modelParams.m_OutputBindings = { outputBindingName };</div><div class="line"><a name="l00389"></a><span class="lineno">  389</span>&#160;</div><div class="line"><a name="l00390"></a><span class="lineno">  390</span>&#160;                    <span class="keywordflow">if</span> (inputTensorShape)</div><div class="line"><a name="l00391"></a><span class="lineno">  391</span>&#160;                    {</div><div class="line"><a name="l00392"></a><span class="lineno">  392</span>&#160;                        modelParams.m_InputShapes.push_back(*inputTensorShape);</div><div class="line"><a name="l00393"></a><span class="lineno">  393</span>&#160;                    }</div><div class="line"><a name="l00394"></a><span class="lineno">  394</span>&#160;</div><div class="line"><a name="l00395"></a><span class="lineno">  395</span>&#160;                    modelParams.m_IsModelBinary = isModelBinary;</div><div class="line"><a name="l00396"></a><span class="lineno">  396</span>&#160;                    modelParams.m_ComputeDevices = modelOptions.GetComputeDevicesAsBackendIds();</div><div class="line"><a name="l00397"></a><span class="lineno">  397</span>&#160;                    modelParams.m_VisualizePostOptimizationModel = modelOptions.m_VisualizePostOptimizationModel;</div><div class="line"><a name="l00398"></a><span class="lineno">  398</span>&#160;                    modelParams.m_EnableFp16TurboMode = modelOptions.m_EnableFp16TurboMode;</div><div class="line"><a name="l00399"></a><span class="lineno">  399</span>&#160;</div><div class="line"><a name="l00400"></a><span class="lineno">  400</span>&#160;                    <span class="keywordflow">return</span> std::make_unique&lt;InferenceModel&gt;(modelParams,</div><div class="line"><a name="l00401"></a><span class="lineno">  401</span>&#160;                                                            commonOptions.m_EnableProfiling,</div><div class="line"><a name="l00402"></a><span class="lineno">  402</span>&#160;                                                            commonOptions.m_DynamicBackendsPath);</div><div class="line"><a name="l00403"></a><span class="lineno">  403</span>&#160;            });</div><div class="line"><a name="l00404"></a><span class="lineno">  404</span>&#160;        });</div><div class="line"><a name="l00405"></a><span class="lineno">  405</span>&#160;}</div><div class="line"><a name="l00406"></a><span class="lineno">  406</span>&#160;</div><div class="line"><a name="l00407"></a><span class="lineno">  407</span>&#160;} <span class="comment">// namespace test</span></div><div class="line"><a name="l00408"></a><span class="lineno">  408</span>&#160;} <span class="comment">// namespace armnn</span></div><div class="ttc" id="namespacearmnn_1_1test_xhtml_ae2e622d6018bd48beabd765d4f6e5714"><div class="ttname"><a href="namespacearmnn_1_1test.xhtml#ae2e622d6018bd48beabd765d4f6e5714">armnn::test::ParseCommandLine</a></div><div class="ttdeci">bool ParseCommandLine(int argc, char **argv, IInferenceTestCaseProvider &amp;testCaseProvider, InferenceTestOptions &amp;outParams)</div><div class="ttdoc">Parse the command line of an ArmNN (or referencetests) inference test program. </div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8cpp_source.xhtml#l00028">InferenceTest.cpp:28</a></div></div>
<div class="ttc" id="namespacearmnn_1_1test_xhtml_a05b3d6105613d2d14099667a6b8ca67b"><div class="ttname"><a href="namespacearmnn_1_1test.xhtml#a05b3d6105613d2d14099667a6b8ca67b">armnn::test::TestCaseResult</a></div><div class="ttdeci">TestCaseResult</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8hpp_source.xhtml#l00071">InferenceTest.hpp:71</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_aa59f7a819c3e29d10ffc41e5c0616872"><div class="ttname"><a href="namespacearmnn.xhtml#aa59f7a819c3e29d10ffc41e5c0616872">armnn::ConfigureLogging</a></div><div class="ttdeci">void ConfigureLogging(bool printToStandardOutput, bool printToDebugOutput, LogSeverity severity)</div><div class="ttdoc">Configures the logging behaviour of the ARMNN library. </div><div class="ttdef"><b>Definition:</b> <a href="_utils_8cpp_source.xhtml#l00018">Utils.cpp:18</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_inference_model_test_case_xhtml_ae7a175231eff460f6d32272930049ca2"><div class="ttname"><a href="classarmnn_1_1test_1_1_inference_model_test_case.xhtml#ae7a175231eff460f6d32272930049ca2">armnn::test::InferenceModelTestCase::GetOutputs</a></div><div class="ttdeci">const std::vector&lt; TContainer &gt; &amp; GetOutputs() const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8hpp_source.xhtml#l00140">InferenceTest.hpp:140</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_classifier_test_case_xhtml"><div class="ttname"><a href="classarmnn_1_1test_1_1_classifier_test_case.xhtml">armnn::test::ClassifierTestCase</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8hpp_source.xhtml#l00150">InferenceTest.hpp:150</a></div></div>
<div class="ttc" id="structarmnn_1_1test_1_1_inference_test_options_xhtml"><div class="ttname"><a href="structarmnn_1_1test_1_1_inference_test_options.xhtml">armnn::test::InferenceTestOptions</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8hpp_source.xhtml#l00057">InferenceTest.hpp:57</a></div></div>
<div class="ttc" id="class_inference_model_xhtml_a22794efa5d496a49a33739dd99087841"><div class="ttname"><a href="class_inference_model.xhtml#a22794efa5d496a49a33739dd99087841">InferenceModel::AddCommandLineOptions</a></div><div class="ttdeci">static void AddCommandLineOptions(cxxopts::Options &amp;options, CommandLineOptions &amp;cLineOptions, std::vector&lt; std::string &gt; &amp;required)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00358">InferenceModel.hpp:358</a></div></div>
<div class="ttc" id="struct_inference_model_1_1_command_line_options_xhtml"><div class="ttname"><a href="struct_inference_model_1_1_command_line_options.xhtml">InferenceModel::CommandLineOptions</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00340">InferenceModel.hpp:340</a></div></div>
<div class="ttc" id="class_inference_model_xhtml"><div class="ttname"><a href="class_inference_model.xhtml">InferenceModel</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00332">InferenceModel.hpp:332</a></div></div>
<div class="ttc" id="classarmnn_1_1_exception_xhtml_abf843cbb29dec939d0731e491bab6f70"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml#abf843cbb29dec939d0731e491bab6f70">armnn::Exception::what</a></div><div class="ttdeci">virtual const char * what() const noexcept override</div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8cpp_source.xhtml#l00032">Exceptions.cpp:32</a></div></div>
<div class="ttc" id="_logging_8hpp_xhtml_a7b6ad073975f437ec38ca7d20154727f"><div class="ttname"><a href="_logging_8hpp.xhtml#a7b6ad073975f437ec38ca7d20154727f">ARMNN_LOG</a></div><div class="ttdeci">#define ARMNN_LOG(severity)</div><div class="ttdef"><b>Definition:</b> <a href="_logging_8hpp_source.xhtml#l00202">Logging.hpp:202</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_classifier_test_case_provider_xhtml_a566acf29d57266042a6169d5a9635599"><div class="ttname"><a href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#a566acf29d57266042a6169d5a9635599">armnn::test::ClassifierTestCaseProvider::ClassifierTestCaseProvider</a></div><div class="ttdeci">ClassifierTestCaseProvider(TConstructDatabaseCallable constructDatabase, TConstructModelCallable constructModel)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8inl_source.xhtml#l00174">InferenceTest.inl:174</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_a44affeeb090c3c6a3062830562672e84"><div class="ttname"><a href="namespacearmnn.xhtml#a44affeeb090c3c6a3062830562672e84">armnn::IgnoreUnused</a></div><div class="ttdeci">void IgnoreUnused(Ts &amp;&amp;...)</div><div class="ttdef"><b>Definition:</b> <a href="_ignore_unused_8hpp_source.xhtml#l00014">IgnoreUnused.hpp:14</a></div></div>
<div class="ttc" id="classarmnn_1_1_tensor_shape_xhtml"><div class="ttname"><a href="classarmnn_1_1_tensor_shape.xhtml">armnn::TensorShape</a></div><div class="ttdef"><b>Definition:</b> <a href="_tensor_8hpp_source.xhtml#l00020">Tensor.hpp:20</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_classifier_test_case_provider_xhtml_ad0077cdc7e406ec5e942e2a148edc077"><div class="ttname"><a href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#ad0077cdc7e406ec5e942e2a148edc077">armnn::test::ClassifierTestCaseProvider::ProcessCommandLineOptions</a></div><div class="ttdeci">virtual bool ProcessCommandLineOptions(const InferenceTestOptions &amp;commonOptions) override</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8inl_source.xhtml#l00203">InferenceTest.inl:203</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acb5e100e5a9a3e7f6d1fd97512215282">armnn::BoostLogSeverityMapping::error</a></div></div>
<div class="ttc" id="_numeric_cast_8hpp_xhtml"><div class="ttname"><a href="_numeric_cast_8hpp.xhtml">NumericCast.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3da4059b0251f66a18cb56f544728796875">armnn::LogSeverity::Info</a></div></div>
<div class="ttc" id="namespacestd_xhtml"><div class="ttname"><a href="namespacestd.xhtml">std</a></div><div class="ttdef"><b>Definition:</b> <a href="_backend_id_8hpp_source.xhtml#l00147">BackendId.hpp:147</a></div></div>
<div class="ttc" id="namespacearmnn_1_1test_xhtml_acf933608643ce27b3c68e3431d047d0a"><div class="ttname"><a href="namespacearmnn_1_1test.xhtml#acf933608643ce27b3c68e3431d047d0a">armnn::test::TContainer</a></div><div class="ttdeci">mapbox::util::variant&lt; std::vector&lt; float &gt;, std::vector&lt; int &gt;, std::vector&lt; unsigned char &gt; &gt; TContainer</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8inl_source.xhtml#l00029">InferenceTest.inl:29</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_classifier_test_case_provider_xhtml_a57a7735851dc40abdb1328e6f97f7b0f"><div class="ttname"><a href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#a57a7735851dc40abdb1328e6f97f7b0f">armnn::test::ClassifierTestCaseProvider::OnInferenceTestFinished</a></div><div class="ttdeci">virtual bool OnInferenceTestFinished() override</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8inl_source.xhtml#l00250">InferenceTest.inl:250</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml_a91c4dfde57907d7698c7531785690a7f"><div class="ttname"><a href="_assert_8hpp.xhtml#a91c4dfde57907d7698c7531785690a7f">ARMNN_ASSERT_MSG</a></div><div class="ttdeci">#define ARMNN_ASSERT_MSG(COND, MSG)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00015">Assert.hpp:15</a></div></div>
<div class="ttc" id="_inference_test_8hpp_xhtml"><div class="ttname"><a href="_inference_test_8hpp.xhtml">InferenceTest.hpp</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_classifier_test_case_xhtml_a27343faac4033409ef6f5a60e025bf65"><div class="ttname"><a href="classarmnn_1_1test_1_1_classifier_test_case.xhtml#a27343faac4033409ef6f5a60e025bf65">armnn::test::ClassifierTestCase::ProcessResult</a></div><div class="ttdeci">virtual TestCaseResult ProcessResult(const InferenceTestOptions &amp;params) override</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8inl_source.xhtml#l00115">InferenceTest.inl:115</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_inference_model_test_case_xhtml_a4ab19ef735b92c4d4f688f0659e5565e"><div class="ttname"><a href="classarmnn_1_1test_1_1_inference_model_test_case.xhtml#a4ab19ef735b92c4d4f688f0659e5565e">armnn::test::InferenceModelTestCase::GetTestCaseId</a></div><div class="ttdeci">unsigned int GetTestCaseId() const</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8hpp_source.xhtml#l00139">InferenceTest.hpp:139</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml_a5698be69cbd5dfe6c28fcd9867e8cbed"><div class="ttname"><a href="_assert_8hpp.xhtml#a5698be69cbd5dfe6c28fcd9867e8cbed">ARMNN_ASSERT</a></div><div class="ttdeci">#define ARMNN_ASSERT(COND)</div><div class="ttdef"><b>Definition:</b> <a href="_assert_8hpp_source.xhtml#l00014">Assert.hpp:14</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407adf6402fd9ecc60f5a2159fdf45711cd4">armnn::BoostLogSeverityMapping::fatal</a></div></div>
<div class="ttc" id="namespacearmnn_1_1test_xhtml_a47dfae02e22fcca1b6b784873b0328d9"><div class="ttname"><a href="namespacearmnn_1_1test.xhtml#a47dfae02e22fcca1b6b784873b0328d9">armnn::test::ClassifierInferenceTestMain</a></div><div class="ttdeci">int ClassifierInferenceTestMain(int argc, char *argv[], const char *modelFilename, bool isModelBinary, const char *inputBindingName, const char *outputBindingName, const std::vector&lt; unsigned int &gt; &amp;defaultTestCaseIds, TConstructDatabaseCallable constructDatabase, const armnn::TensorShape *inputTensorShape=nullptr)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8inl_source.xhtml#l00353">InferenceTest.inl:353</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4a9bc35e069257a508e14ed82965a8661d"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4a9bc35e069257a508e14ed82965a8661d">armnn::LayerType::Dequantize</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_classifier_test_case_provider_xhtml_a7b48e7fbef45acdb72258c3c8981c8b8"><div class="ttname"><a href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#a7b48e7fbef45acdb72258c3c8981c8b8">armnn::test::ClassifierTestCaseProvider::AddCommandLineOptions</a></div><div class="ttdeci">virtual void AddCommandLineOptions(cxxopts::Options &amp;options, std::vector&lt; std::string &gt; &amp;required) override</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8inl_source.xhtml#l00184">InferenceTest.inl:184</a></div></div>
<div class="ttc" id="_cxxopts_utils_8hpp_xhtml"><div class="ttname"><a href="_cxxopts_utils_8hpp.xhtml">CxxoptsUtils.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_1_1test_xhtml_a05b3d6105613d2d14099667a6b8ca67bad7c8c85bf79bbe1b7188497c32c3b0ca"><div class="ttname"><a href="namespacearmnn_1_1test.xhtml#a05b3d6105613d2d14099667a6b8ca67bad7c8c85bf79bbe1b7188497c32c3b0ca">armnn::test::TestCaseResult::Failed</a></div><div class="ttdoc">The test failed (e.g. </div></div>
<div class="ttc" id="namespacearmnn_1_1test_xhtml_ab5a7cac4237e83d4f0d67d01dfb8ba9f"><div class="ttname"><a href="namespacearmnn_1_1test.xhtml#ab5a7cac4237e83d4f0d67d01dfb8ba9f">armnn::test::InferenceTest</a></div><div class="ttdeci">bool InferenceTest(const InferenceTestOptions &amp;params, const std::vector&lt; unsigned int &gt; &amp;defaultTestCaseIds, IInferenceTestCaseProvider &amp;testCaseProvider)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8cpp_source.xhtml#l00115">InferenceTest.cpp:115</a></div></div>
<div class="ttc" id="namespacestd_1_1chrono_xhtml"><div class="ttname"><a href="namespacestd_1_1chrono.xhtml">chrono</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_inference_model_test_case_xhtml"><div class="ttname"><a href="classarmnn_1_1test_1_1_inference_model_test_case.xhtml">armnn::test::InferenceModelTestCase</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8hpp_source.xhtml#l00110">InferenceTest.hpp:110</a></div></div>
<div class="ttc" id="_assert_8hpp_xhtml"><div class="ttname"><a href="_assert_8hpp.xhtml">Assert.hpp</a></div></div>
<div class="ttc" id="namespacearmnn_1_1test_xhtml"><div class="ttname"><a href="namespacearmnn_1_1test.xhtml">armnn::test</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8cpp_source.xhtml#l00024">InferenceTest.cpp:24</a></div></div>
<div class="ttc" id="classarmnn_1_1_exception_xhtml"><div class="ttname"><a href="classarmnn_1_1_exception.xhtml">armnn::Exception</a></div><div class="ttdoc">Base class for all ArmNN exceptions so that users can filter to just those. </div><div class="ttdef"><b>Definition:</b> <a href="_exceptions_8hpp_source.xhtml#l00046">Exceptions.hpp:46</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_classifier_test_case_provider_xhtml_ab5ab4ef07d28ff282c5e3109deed810e"><div class="ttname"><a href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml#ab5ab4ef07d28ff282c5e3109deed810e">armnn::test::ClassifierTestCaseProvider::GetTestCase</a></div><div class="ttdeci">virtual std::unique_ptr&lt; IInferenceTestCase &gt; GetTestCase(unsigned int testCaseId) override</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8inl_source.xhtml#l00230">InferenceTest.inl:230</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c"><div class="ttname"><a href="namespacearmnn.xhtml#a4dc0adc6737b5944e7671bee71788407acaf9b6b99962bf5c2264824231d7a40c">armnn::BoostLogSeverityMapping::info</a></div></div>
<div class="ttc" id="structarmnn_1_1test_1_1_inference_test_options_xhtml_ac9c49972e7f8db643b3c72aa782278df"><div class="ttname"><a href="structarmnn_1_1test_1_1_inference_test_options.xhtml#ac9c49972e7f8db643b3c72aa782278df">armnn::test::InferenceTestOptions::m_IterationCount</a></div><div class="ttdeci">unsigned int m_IterationCount</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8hpp_source.xhtml#l00059">InferenceTest.hpp:59</a></div></div>
<div class="ttc" id="namespacearmnn_1_1test_xhtml_a8a678fb3a8864e31aeb77f857ae6fc43"><div class="ttname"><a href="namespacearmnn_1_1test.xhtml#a8a678fb3a8864e31aeb77f857ae6fc43">armnn::test::ValidateDirectory</a></div><div class="ttdeci">bool ValidateDirectory(std::string &amp;dir)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8cpp_source.xhtml#l00087">InferenceTest.cpp:87</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml_a4fa312cf0d60fbd3988a7c76ab8e2980"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml#a4fa312cf0d60fbd3988a7c76ab8e2980">InferenceModelInternal::Params::m_ModelPath</a></div><div class="ttdeci">std::string m_ModelPath</div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00085">InferenceModel.hpp:85</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a375ca3cff9f1b005d1412dc5f3cf5b6e"><div class="ttname"><a href="namespacearmnn.xhtml#a375ca3cff9f1b005d1412dc5f3cf5b6e">armnn::numeric_cast</a></div><div class="ttdeci">std::enable_if_t&lt; std::is_unsigned&lt; Source &gt;::value &amp;&amp;std::is_unsigned&lt; Dest &gt;::value, Dest &gt; numeric_cast(Source source)</div><div class="ttdef"><b>Definition:</b> <a href="_numeric_cast_8hpp_source.xhtml#l00035">NumericCast.hpp:35</a></div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_classifier_test_case_provider_xhtml"><div class="ttname"><a href="classarmnn_1_1test_1_1_classifier_test_case_provider.xhtml">armnn::test::ClassifierTestCaseProvider</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8hpp_source.xhtml#l00178">InferenceTest.hpp:178</a></div></div>
<div class="ttc" id="struct_inference_model_internal_1_1_params_xhtml"><div class="ttname"><a href="struct_inference_model_internal_1_1_params.xhtml">InferenceModelInternal::Params</a></div><div class="ttdef"><b>Definition:</b> <a href="_inference_model_8hpp_source.xhtml#l00083">InferenceModel.hpp:83</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a93a3ba385cad27c4774e5fe64c025d3d"><div class="ttname"><a href="namespacearmnn.xhtml#a93a3ba385cad27c4774e5fe64c025d3d">armnn::LogSeverity</a></div><div class="ttdeci">LogSeverity</div><div class="ttdef"><b>Definition:</b> <a href="_utils_8hpp_source.xhtml#l00013">Utils.hpp:13</a></div></div>
<div class="ttc" id="namespacearmnn_1_1test_xhtml_a7ad751ee33bdcba0656fdb6e98eb17f1"><div class="ttname"><a href="namespacearmnn_1_1test.xhtml#a7ad751ee33bdcba0656fdb6e98eb17f1">armnn::test::InferenceTestMain</a></div><div class="ttdeci">int InferenceTestMain(int argc, char *argv[], const std::vector&lt; unsigned int &gt; &amp;defaultTestCaseIds, TConstructTestCaseProvider constructTestCaseProvider)</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8inl_source.xhtml#l00302">InferenceTest.inl:302</a></div></div>
<div class="ttc" id="namespacearmnn_xhtml_a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba"><div class="ttname"><a href="namespacearmnn.xhtml#a56943a0946e5f15e5e58054b8e7a04a4aa603905470e2a5b8c13e96b579ef0dba">armnn::LayerType::Debug</a></div></div>
<div class="ttc" id="namespacearmnn_1_1test_xhtml_a05b3d6105613d2d14099667a6b8ca67baa60852f204ed8028c1c58808b746d115"><div class="ttname"><a href="namespacearmnn_1_1test.xhtml#a05b3d6105613d2d14099667a6b8ca67baa60852f204ed8028c1c58808b746d115">armnn::test::TestCaseResult::Ok</a></div><div class="ttdoc">The test completed without any errors. </div></div>
<div class="ttc" id="classarmnn_1_1test_1_1_inference_model_test_case_xhtml_acf933608643ce27b3c68e3431d047d0a"><div class="ttname"><a href="classarmnn_1_1test_1_1_inference_model_test_case.xhtml#acf933608643ce27b3c68e3431d047d0a">armnn::test::InferenceModelTestCase::TContainer</a></div><div class="ttdeci">mapbox::util::variant&lt; std::vector&lt; float &gt;, std::vector&lt; int &gt;, std::vector&lt; unsigned char &gt; &gt; TContainer</div><div class="ttdef"><b>Definition:</b> <a href="_inference_test_8hpp_source.xhtml#l00113">InferenceTest.hpp:113</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_59425e443f801f1f2fd8bbe4959a3ccf.xhtml">tests</a></li><li class="navelem"><a class="el" href="_inference_test_8inl.xhtml">InferenceTest.inl</a></li>
    <li class="footer">Generated on Fri Mar 19 2021 15:26:05 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>