1 // Copyright (C) 2018-2019 Intel Corporation
2 // SPDX-License-Identifier: Apache-2.0
5 #include <gtest/gtest.h>
7 #include <ie_ir_reader.hpp>
8 #include "tests_common.hpp"
12 #include <transform/transformations/conv_bias_fusion.hpp>
13 #include <transform/transformations/matmul_bias_fusion.hpp>
14 #include <transform/transformations/quantizeconv_dequantize_fusion.hpp>
15 #include <transform/transformations/convert_quantize_conv_elimination.hpp>
16 #include <ngraph/pass/constant_folding.hpp>
17 #include <ngraph/pass/visualize_tree.hpp>
18 #include <ngraph/frontend/onnx_import/onnx.hpp>
20 using namespace testing;
21 using namespace InferenceEngine;
23 class NGraphReaderTests : public TestsCommon {
25 void TearDown() override {}
26 void SetUp() override {}
28 void compareICNNNetworks(const ICNNNetwork& newNetwork, const ICNNNetwork& oldNetwork) {
29 auto compareParamVal = [](const std::string& val1, const std::string& val2) -> bool {
30 std::vector<std::string> vals1, vals2;
31 std::stringstream ss1(val1);
33 while (getline(ss1, field, ',' )) {
34 std::stringstream fs(field);
37 vals1.emplace_back(value);
40 std::stringstream ss2(val2);
41 while (getline(ss2, field, ',' )) {
42 std::stringstream fs(field);
45 vals2.emplace_back(value);
48 if (vals1.size() != vals2.size())
51 for (size_t i = 0; i < vals1.size(); i++) {
53 float v1 = std::stof(vals1[i]);
54 float v2 = std::stof(vals2[i]);
55 if (abs(v2 - v1) > 0.00001f)
58 if (vals1[i] != vals2[i])
64 std::vector<std::string> err_log;
65 CNNNetwork network((ICNNNetwork*)&newNetwork);
66 CNNNetwork refNetwork((ICNNNetwork*)&oldNetwork);
67 if (newNetwork.layerCount() != oldNetwork.layerCount())
68 THROW_IE_EXCEPTION << "ICNNNetworks have different numbers of layers! " + std::to_string(newNetwork.layerCount()) + " and " + std::to_string(oldNetwork.layerCount());
69 auto newIterator = network.begin();
70 auto oldIterator = refNetwork.begin();
71 for (; newIterator != network.end() && oldIterator != refNetwork.end(); newIterator++, oldIterator++) {
72 CNNLayerPtr layer = *newIterator;
73 CNNLayerPtr oldLayer = *oldIterator;
74 if (layer->type != oldLayer->type) {
75 err_log.push_back("Layer " + oldLayer->name + " and old layer " + oldLayer->name + " have different type: " + layer->type + " and " + oldLayer->type);
77 if (layer->precision != oldLayer->precision) {
78 err_log.push_back("Layer " + oldLayer->name + " and old layer " + oldLayer->name + " have different precision");
80 bool success = layer->type == oldLayer->type &&
81 layer->insData.size() == oldLayer->insData.size() &&
82 layer->outData.size() == oldLayer->outData.size() &&
83 layer->precision == oldLayer->precision;
85 for (size_t i = 0; i < layer->insData.size() && success; i++) {
86 auto lockedOldData = oldLayer->insData[i].lock();
87 auto lockedData = layer->insData[i].lock();
88 success = success && lockedOldData->getTensorDesc() == lockedData->getTensorDesc();
89 if (lockedOldData->getTensorDesc() != lockedData->getTensorDesc()) {
90 err_log.push_back("Layer " + oldLayer->name + " and old layer " + oldLayer->name + " have different tensor desc for locked data");
93 for (size_t i = 0; i < layer->outData.size() && success; i++) {
94 if (oldLayer->outData[i]->getTensorDesc() != layer->outData[i]->getTensorDesc()) {
95 err_log.push_back("Layer " + oldLayer->name + " and old layer " + oldLayer->name + " have different tensor desc");
97 success = success && oldLayer->outData[i]->getTensorDesc() == layer->outData[i]->getTensorDesc();
99 for (const auto& item : layer->params) {
102 if (oldLayer->params.find(item.first) != oldLayer->params.end()) {
103 if (!compareParamVal(oldLayer->params[item.first], item.second)) {
105 err_log.push_back("Layer " + layer->name + " in new network differ from reference parameter " + item.first + " (new, old): " + item.second + ", " + oldLayer->params[item.first]);
109 err_log.push_back("Layer " + oldLayer->name + " in old net has no " + item.first + " attribute.");
114 for (auto & it: err_log) {
115 std::cout << "ERROR: " << it << std::endl;
117 THROW_IE_EXCEPTION << "ICNNNetworks have different layers!";
121 InputsDataMap newInput;
122 OutputsDataMap newOutput;
123 newNetwork.getInputsInfo(newInput);
124 newNetwork.getOutputsInfo(newOutput);
125 InputsDataMap oldInput;
126 OutputsDataMap oldOutput;
127 oldNetwork.getInputsInfo(oldInput);
128 oldNetwork.getOutputsInfo(oldOutput);
130 bool success = newInput.size() == oldInput.size();
131 for (const auto& it : newInput) {
134 success = success && oldInput.find(it.first) != oldInput.end();
137 THROW_IE_EXCEPTION << "ICNNNetworks have different inputs!";
139 success = newOutput.size() == oldOutput.size();
140 for (const auto& it : newOutput) {
143 success = success && oldOutput.find(it.first) != oldOutput.end();
146 THROW_IE_EXCEPTION << "ICNNNetworks have different outputs!";
150 TEST_F(NGraphReaderTests, ReadScalarNetwork) {
151 std::string model = R"V0G0N(
152 <net name="Activation" version="10">
154 <layer name="in1" type="Parameter" id="0">
156 <port id="0" precision="FP32" />
159 <layer name="prior" id="2" type="ReLU" >
161 <port id="1" precision="FP32" />
164 <port id="2" precision="FP32" />
167 <layer name="output" type="Result" id="3">
169 <port id="0" precision="FP32" />
174 <edge from-layer="0" from-port="0" to-layer="2" to-port="1"/>
175 <edge from-layer="2" from-port="2" to-layer="3" to-port="0"/>
182 auto nGraph = reader.read(model, blob);
183 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
184 CNNNetwork cnetwork(network.get());
188 TEST_F(NGraphReaderTests, ReadIncorrectNetwork) {
189 std::string model = R"V0G0N(
190 <net name="Activation" version="10">
192 <layer name="in1" type="Parameter" id="0">
194 <port id="0" precision="FP32">
202 <layer name="activation" id="4" type="ShapeOf">
204 <port id="1" precision="FP32">
212 <port id="2" precision="I64">
217 <layer name="prior" id="2" type="ReLU">
219 <port id="1" precision="FP32">
227 <port id="2" precision="FP32">
235 <layer name="output" type="Result" id="3">
237 <port id="0" precision="FP32">
247 <edge from-layer="0" from-port="0" to-layer="4" to-port="1"/>
248 <edge from-layer="4" from-port="2" to-layer="2" to-port="1"/>
249 <edge from-layer="2" from-port="2" to-layer="3" to-port="0"/>
256 ASSERT_THROW(reader.read(model, blob), InferenceEngine::details::InferenceEngineException);
259 TEST_F(NGraphReaderTests, ReadPriorBoxClusteredNetwork) {
260 std::string model = R"V0G0N(
261 <net name="PriorBoxClusteredNet" version="10">
263 <layer id="0" name="in1" type="Parameter">
265 <port id="0" precision="FP32">
273 <layer id="1" name="in2" type="Parameter">
275 <port id="0" precision="FP32">
283 <layer id="2" name="ch_concat_mixed_7_chconcat_anchors/0_port" type="ShapeOf">
285 <port id="0" precision="FP32">
293 <port id="1" precision="I64">
298 <layer id="3" name="1344813449_const" type="Const">
299 <data offset="0" size="8"/>
301 <port id="1" precision="I64">
306 <layer id="4" name="1345813459_const" type="Const">
307 <data offset="8" size="8"/>
309 <port id="1" precision="I64">
314 <layer id="9" name="1345813459_const" type="Const">
315 <data offset="16" size="8"/>
317 <port id="1" precision="I64">
322 <layer id="5" name="ch_concat_mixed_7_chconcat_anchors/ss_0_port" type="StridedSlice">
323 <data begin_mask="1" ellipsis_mask="0" end_mask="0" new_axis_mask="0" shrink_axis_mask="0"/>
325 <port id="0" precision="I64">
328 <port id="1" precision="I64">
331 <port id="2" precision="I64">
334 <port id="3" precision="I64">
339 <port id="4" precision="I64">
344 <layer id="6" name="ch_concat_mixed_7_chconcat_anchors/1_port" type="ShapeOf">
346 <port id="0" precision="FP32">
354 <port id="1" precision="I64">
359 <layer id="7" name="ch_concat_mixed_7_chconcat_anchors/ss_1_port" type="StridedSlice">
360 <data begin_mask="1" ellipsis_mask="0" end_mask="0" new_axis_mask="0" shrink_axis_mask="0"/>
362 <port id="0" precision="I64">
365 <port id="1" precision="I64">
368 <port id="2" precision="I64">
371 <port id="3" precision="I64">
376 <port id="4" precision="I64">
381 <layer id="8" name="prior" type="PriorBoxClustered">
382 <data clip="0" flip="0" height="44.0,10.0,30.0,19.0,94.0,32.0,61.0,53.0,17.0" offset="0.5" step="16.0" variance="0.1,0.1,0.2,0.2"
383 width="86.0,13.0,57.0,39.0,68.0,34.0,142.0,50.0,23.0"/>
385 <port id="0" precision="I64">
388 <port id="1" precision="I64">
393 <port id="2" precision="FP32">
400 <layer id="10" name="output" type="Result">
402 <port id="0" precision="FP32">
411 <edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
412 <edge from-layer="1" from-port="0" to-layer="6" to-port="0"/>
413 <edge from-layer="2" from-port="1" to-layer="5" to-port="0"/>
414 <edge from-layer="6" from-port="1" to-layer="7" to-port="0"/>
415 <edge from-layer="3" from-port="1" to-layer="5" to-port="1"/>
416 <edge from-layer="3" from-port="1" to-layer="7" to-port="1"/>
417 <edge from-layer="4" from-port="1" to-layer="5" to-port="2"/>
418 <edge from-layer="4" from-port="1" to-layer="7" to-port="2"/>
419 <edge from-layer="9" from-port="1" to-layer="5" to-port="3"/>
420 <edge from-layer="9" from-port="1" to-layer="7" to-port="3"/>
421 <edge from-layer="5" from-port="4" to-layer="8" to-port="0"/>
422 <edge from-layer="7" from-port="4" to-layer="8" to-port="1"/>
423 <edge from-layer="8" from-port="2" to-layer="10" to-port="0"/>
427 std::string modelV5 = R"V0G0N(
428 <net name="Activation" version="5" precision="FP32" batch="1">
430 <layer id="0" name="in1" type="Input" precision="FP32">
440 <layer id="1" name="in2" type="Input" precision="FP32">
450 <layer name="prior" id="2" type="PriorBoxClustered" precision="FP32">
451 <data clip="0" step_h="16.000000" step_w="16.000000" flip="0" height="44,10,30,19,94,32,61,53,17" offset="0.500000" step="16.000000" variance="0.1,0.1,0.2,0.2" width="86,13,57,39,68,34,142,50,23"/>
476 <edge from-layer="0" from-port="0" to-layer="2" to-port="1"/>
477 <edge from-layer="1" from-port="0" to-layer="2" to-port="2"/>
484 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {30}, Layout::C));
486 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
488 // Set shape constant for broadcast1
489 int64_t * buffer = (int64_t *)(weights->buffer());
494 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
495 auto nGraph = reader.read(model, weights);
497 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
499 InferenceEngine::CNNNetReader net_reader;
500 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
502 compareICNNNetworks(*network, net_reader.getNetwork());
505 TEST_F(NGraphReaderTests, DISABLED_ReadProposalNetwork) {
506 std::string model = R"V0G0N(
507 <net name="PriorBoxNet" version="10">
509 <layer id="0" name="in1" type="Parameter">
511 <port id="0" precision="FP32">
519 <layer id="1" name="in2" type="Parameter">
521 <port id="0" precision="FP32">
529 <layer id="2" name="in3" type="Const">
530 <data offset="0" size="48"/>
532 <port id="0" precision="I64">
538 <layer name="proposal" type="Proposal" precision="FP32" id="3">
539 <data feat_stride="16" base_size="16" min_size="16" ratio="2.669000" scale="4.000000,6.000000,9.000000,16.000000,24.000000,32.000000" pre_nms_topn="6000" post_nms_topn="200" nms_thresh="0.600000"/>
565 <layer id="4" name="output" type="Result">
567 <port id="0" precision="FP32">
575 <edge from-layer="0" from-port="0" to-layer="3" to-port="1"/>
576 <edge from-layer="1" from-port="0" to-layer="3" to-port="2"/>
577 <edge from-layer="2" from-port="0" to-layer="3" to-port="3"/>
578 <edge from-layer="3" from-port="4" to-layer="4" to-port="0"/>
582 std::string modelV5 = R"V0G0N(
583 <net name="Activation" version="5" precision="FP32" batch="1">
585 <layer id="0" name="in1" precision="FP32" type="Input">
595 <layer id="1" name="in2" precision="FP32" type="Input">
605 <layer id="2" name="in3" precision="I64" type="Const">
606 <data offset="0" size="48"/>
614 <layer name="proposal" type="Proposal" precision="FP32" id="3">
615 <data feat_stride="16" base_size="16" min_size="16" ratio="2.669000" scale="4.000000,6.000000,9.000000,16.000000,24.000000,32.000000" pre_nms_topn="6000" post_nms_topn="200" nms_thresh="0.600000"/>
643 <edge from-layer="0" from-port="0" to-layer="3" to-port="1"/>
644 <edge from-layer="1" from-port="0" to-layer="3" to-port="2"/>
645 <edge from-layer="2" from-port="0" to-layer="3" to-port="3"/>
652 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {48}, Layout::C));
654 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
656 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
657 auto nGraph = reader.read(model, weights);
659 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
661 InferenceEngine::CNNNetReader net_reader;
662 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
664 compareICNNNetworks(*network, net_reader.getNetwork());
667 TEST_F(NGraphReaderTests, ReadPriorBoxNetwork) {
668 std::string model = R"V0G0N(
669 <net name="PriorBoxNet" version="10">
671 <layer id="0" name="in1" type="Parameter">
673 <port id="0" precision="FP32">
681 <layer id="1" name="in2" type="Parameter">
683 <port id="0" precision="FP32">
691 <layer id="2" name="ch_concat_mixed_7_chconcat_anchors/0_port" type="ShapeOf">
693 <port id="0" precision="FP32">
701 <port id="1" precision="I64">
706 <layer id="3" name="1344813449_const" type="Const">
707 <data offset="0" size="8"/>
709 <port id="1" precision="I64">
714 <layer id="4" name="1345813459_const" type="Const">
715 <data offset="8" size="8"/>
717 <port id="1" precision="I64">
722 <layer id="9" name="1345813459_const" type="Const">
723 <data offset="16" size="8"/>
725 <port id="1" precision="I64">
730 <layer id="5" name="ch_concat_mixed_7_chconcat_anchors/ss_0_port" type="StridedSlice">
731 <data begin_mask="1" ellipsis_mask="0" end_mask="0" new_axis_mask="0" shrink_axis_mask="0"/>
733 <port id="0" precision="I64">
736 <port id="1" precision="I64">
739 <port id="2" precision="I64">
742 <port id="3" precision="I64">
747 <port id="4" precision="I64">
752 <layer id="6" name="ch_concat_mixed_7_chconcat_anchors/1_port" type="ShapeOf">
754 <port id="0" precision="FP32">
762 <port id="1" precision="I64">
767 <layer id="7" name="ch_concat_mixed_7_chconcat_anchors/ss_1_port" type="StridedSlice">
768 <data begin_mask="1" ellipsis_mask="0" end_mask="0" new_axis_mask="0" shrink_axis_mask="0"/>
770 <port id="0" precision="I64">
773 <port id="1" precision="I64">
776 <port id="2" precision="I64">
779 <port id="3" precision="I64">
784 <port id="4" precision="I64">
789 <layer id="8" name="prior" type="PriorBox">
790 <data aspect_ratio="1.0,2.0,0.5" clip="0" flip="0" img_h="0" img_size="0" img_w="0" max_size="" min_size="51.2,72.407552" offset="0.5" scale_all_sizes="0" step="17.066666666666666" step_h="0" step_w="0" variance="0.100000,0.100000,0.200000,0.200000"/>
792 <port id="0" precision="I64">
795 <port id="1" precision="I64">
800 <port id="2" precision="FP32">
807 <layer id="10" name="output" type="Result">
809 <port id="0" precision="FP32">
818 <edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
819 <edge from-layer="1" from-port="0" to-layer="6" to-port="0"/>
820 <edge from-layer="2" from-port="1" to-layer="5" to-port="0"/>
821 <edge from-layer="6" from-port="1" to-layer="7" to-port="0"/>
822 <edge from-layer="3" from-port="1" to-layer="5" to-port="1"/>
823 <edge from-layer="3" from-port="1" to-layer="7" to-port="1"/>
824 <edge from-layer="4" from-port="1" to-layer="5" to-port="2"/>
825 <edge from-layer="4" from-port="1" to-layer="7" to-port="2"/>
826 <edge from-layer="9" from-port="1" to-layer="5" to-port="3"/>
827 <edge from-layer="9" from-port="1" to-layer="7" to-port="3"/>
828 <edge from-layer="5" from-port="4" to-layer="8" to-port="0"/>
829 <edge from-layer="7" from-port="4" to-layer="8" to-port="1"/>
830 <edge from-layer="8" from-port="2" to-layer="10" to-port="0"/>
834 std::string modelV5 = R"V0G0N(
835 <net name="Activation" version="5" precision="FP32" batch="1">
837 <layer id="0" name="in1" type="Input" precision="FP32">
847 <layer id="1" name="in2" type="Input" precision="FP32">
857 <layer name="prior" id="2" type="PriorBox" precision="FP32">
858 <data aspect_ratio="1,2,0.5" clip="0" flip="0" img_h="0" img_size="0" img_w="0" max_size="" min_size="51.200001,72.407555" offset="0.500000" scale_all_sizes="0" step="17.066668" step_h="0" step_w="0" variance="0.1,0.1,0.2,0.2"/>
883 <edge from-layer="0" from-port="0" to-layer="2" to-port="1"/>
884 <edge from-layer="1" from-port="0" to-layer="2" to-port="2"/>
891 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {30}, Layout::C));
893 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
895 // Set shape constant for broadcast1
896 int64_t * buffer = (int64_t *)(weights->buffer());
901 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
902 auto nGraph = reader.read(model, weights);
904 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
906 InferenceEngine::CNNNetReader net_reader;
907 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
909 compareICNNNetworks(*network, net_reader.getNetwork());
912 TEST_F(NGraphReaderTests, ReadSplitNetwork) {
913 std::string model = R"V0G0N(
914 <net name="Activation" version="10">
916 <layer name="in1" type="Parameter" id="0">
918 <port id="0" precision="FP32">
926 <layer name="split" id="2" type="Split">
929 <port id="1" precision="FP32">
937 <port id="2" precision="FP32">
943 <port id="3" precision="FP32">
951 <layer name="output1" type="Result" id="1">
953 <port id="0" precision="FP32">
961 <layer name="output" type="Result" id="3">
963 <port id="0" precision="FP32">
973 <edge from-layer="0" from-port="0" to-layer="2" to-port="1"/>
974 <edge from-layer="2" from-port="2" to-layer="3" to-port="0"/>
975 <edge from-layer="2" from-port="3" to-layer="1" to-port="0"/>
979 std::string modelV5 = R"V0G0N(
980 <net name="Activation" version="5" precision="FP32" batch="1">
982 <layer name="in1" type="Input" precision="FP32" id="0">
992 <layer name="split" id="2" type="Split" precision="FP32">
1019 <edge from-layer="0" from-port="0" to-layer="2" to-port="1"/>
1027 auto nGraph = reader.read(model, blob);
1028 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
1030 InferenceEngine::CNNNetReader net_reader;
1031 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
1033 compareICNNNetworks(*network, net_reader.getNetwork());
1036 TEST_F(NGraphReaderTests, DISABLED_ReadDetectionOutputNetwork) {
1037 std::string model = R"V0G0N(
1038 <net name="Activation" version="10">
1040 <layer name="in1" type="Parameter" id="0">
1042 <port id="0" precision="FP32">
1048 <layer name="in2" type="Parameter" id="1">
1050 <port id="0" precision="FP32">
1056 <layer name="in3" type="Parameter" id="4">
1058 <port id="0" precision="FP32">
1065 <layer name="detectionOut" id="2" type="DetectionOutput" precision="FP32">
1066 <data num_classes="2" share_location="1" background_label_id="0" nms_threshold="0.450000" top_k="400" input_height="1" input_width="1" code_type="caffe.PriorBoxParameter.CENTER_SIZE" variance_encoded_in_target="0" keep_top_k="200" confidence_threshold="0.010000"/>
1091 <port id="6" precision="FP32">
1099 <layer name="output" type="Result" id="3">
1101 <port id="0" precision="FP32">
1111 <edge from-layer="0" from-port="0" to-layer="2" to-port="1"/>
1112 <edge from-layer="1" from-port="0" to-layer="2" to-port="2"/>
1113 <edge from-layer="4" from-port="0" to-layer="2" to-port="3"/>
1114 <edge from-layer="2" from-port="6" to-layer="3" to-port="0"/>
1118 std::string modelV5 = R"V0G0N(
1119 <net name="Activation" version="5" precision="FP32" batch="1">
1121 <layer name="in1" type="Input" precision="FP32" id="0">
1129 <layer name="in2" type="Input" precision="FP32" id="1">
1137 <layer name="in3" type="Input" precision="FP32" id="4">
1146 <layer name="detectionOut" id="2" type="DetectionOutput" precision="FP32">
1147 <data num_classes="2" clip_after_nms="0" clip_before_nms="0" decrease_label_id="0" normalized="0" objectness_score="0.000000" share_location="1" background_label_id="0" nms_threshold="0.450000" top_k="400" input_height="1" input_width="1" code_type="caffe.PriorBoxParameter.CENTER_SIZE" variance_encoded_in_target="0" keep_top_k="200" confidence_threshold="0.010000"/>
1164 <port id="6" precision="FP32">
1174 <edge from-layer="0" from-port="0" to-layer="2" to-port="1"/>
1175 <edge from-layer="1" from-port="0" to-layer="2" to-port="2"/>
1176 <edge from-layer="4" from-port="0" to-layer="2" to-port="3"/>
1184 auto nGraph = reader.read(model, blob);
1185 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
1187 InferenceEngine::CNNNetReader net_reader;
1188 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
1190 compareICNNNetworks(*network, net_reader.getNetwork());
1193 TEST_F(NGraphReaderTests, ReadConcatNetwork) {
1194 std::string model = R"V0G0N(
1195 <net name="Activation" version="10">
1197 <layer name="in1" type="Parameter" id="0">
1199 <port id="0" precision="FP32">
1207 <layer name="in2" type="Parameter" id="1">
1209 <port id="0" precision="FP32">
1217 <layer name="concat" id="2" type="Concat">
1220 <port id="1" precision="FP32">
1226 <port id="2" precision="FP32">
1234 <port id="3" precision="FP32">
1242 <layer name="output" type="Result" id="3">
1244 <port id="0" precision="FP32">
1254 <edge from-layer="0" from-port="0" to-layer="2" to-port="1"/>
1255 <edge from-layer="1" from-port="0" to-layer="2" to-port="2"/>
1256 <edge from-layer="2" from-port="3" to-layer="3" to-port="0"/>
1260 std::string modelV5 = R"V0G0N(
1261 <net name="Activation" version="5" precision="FP32" batch="1">
1263 <layer name="in1" type="Input" precision="FP32" id="0">
1273 <layer name="in2" type="Input" precision="FP32" id="1">
1283 <layer name="concat" id="2" type="Concat" precision="FP32">
1310 <edge from-layer="0" from-port="0" to-layer="2" to-port="1"/>
1311 <edge from-layer="1" from-port="0" to-layer="2" to-port="2"/>
1319 auto nGraph = reader.read(model, blob);
1320 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
1322 InferenceEngine::CNNNetReader net_reader;
1323 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
1325 compareICNNNetworks(*network, net_reader.getNetwork());
1328 TEST_F(NGraphReaderTests, DISABLED_ReadTopKNetwork) {
1329 std::string model = R"V0G0N(
1330 <net name="Activation" version="10">
1332 <layer name="in1" type="Parameter" id="0">
1334 <port id="0" precision="FP32">
1342 <layer id="4" name="1345813459_const" type="Const">
1343 <data offset="0" size="8"/>
1345 <port id="1" precision="I64" />
1348 <layer name="activation" id="1" type="TopK">
1349 <data axis="1" mode="max" sorting="value"/>
1351 <port id="1" precision="FP32">
1357 <port id="2" precision="I64" />
1360 <port id="3" precision="FP32">
1368 <layer name="output" type="Result" id="2">
1370 <port id="0" precision="FP32">
1380 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1381 <edge from-layer="4" from-port="1" to-layer="1" to-port="2"/>
1382 <edge from-layer="1" from-port="3" to-layer="2" to-port="0"/>
1386 std::string modelV5 = R"V0G0N(
1387 <net name="Activation" version="5" precision="FP32" batch="1">
1389 <layer name="in1" type="Input" precision="FP32" id="0">
1399 <layer name="activation" id="1" type="ArgMax" precision="FP32">
1400 <data alpha="0.000000" beta="0.750000" local-size="5" region="across" />
1420 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1428 auto nGraph = reader.read(model, blob);
1429 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
1431 InferenceEngine::CNNNetReader net_reader;
1432 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
1434 compareICNNNetworks(*network, net_reader.getNetwork());
1437 TEST_F(NGraphReaderTests, ReadMVNNetwork) {
1438 std::string model = R"V0G0N(
1439 <net name="Activation" version="10">
1441 <layer name="in1" type="Parameter" id="0">
1443 <port id="0" precision="FP32">
1451 <layer name="activation" id="1" type="MVN">
1452 <data across_channels="1" eps="0.75" normalize_variance="1" />
1454 <port id="1" precision="FP32">
1462 <port id="2" precision="FP32">
1470 <layer name="output" type="Result" id="2">
1472 <port id="0" precision="FP32">
1482 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1483 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
1487 std::string modelV5 = R"V0G0N(
1488 <net name="Activation" version="5" precision="FP32" batch="1">
1490 <layer name="in1" type="Input" precision="FP32" id="0">
1500 <layer name="activation" id="1" type="MVN" precision="FP32">
1501 <data across_channels="1" eps="0.75" normalize_variance="1" />
1521 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1529 auto nGraph = reader.read(model, blob);
1530 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
1532 InferenceEngine::CNNNetReader net_reader;
1533 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
1535 compareICNNNetworks(*network, net_reader.getNetwork());
1538 TEST_F(NGraphReaderTests, ReadLrnNetwork) {
1539 std::string model = R"V0G0N(
1540 <net name="Activation" version="10">
1542 <layer name="in1" type="Parameter" id="0">
1544 <port id="0" precision="FP32">
1552 <layer name="activation" id="1" type="LRN">
1553 <data alpha="0" beta="0.75" local-size="5" bias="1" />
1555 <port id="1" precision="FP32">
1563 <port id="2" precision="FP32">
1571 <layer name="output" type="Result" id="2">
1573 <port id="0" precision="FP32">
1583 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1584 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
1588 std::string modelV5 = R"V0G0N(
1589 <net name="Activation" version="5" precision="FP32" batch="1">
1591 <layer name="in1" type="Input" precision="FP32" id="0">
1601 <layer name="activation" id="1" type="Norm" precision="FP32">
1602 <data alpha="0.000000" beta="0.750000" local-size="5" region="across" />
1622 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1630 auto nGraph = reader.read(model, blob);
1631 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
1633 InferenceEngine::CNNNetReader net_reader;
1634 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
1636 compareICNNNetworks(*network, net_reader.getNetwork());
1639 TEST_F(NGraphReaderTests, DISABLED_ReadLrnNetwork2) {
1640 std::string model = R"V0G0N(
1641 <net name="LRN" version="10">
1643 <layer name="in1" type="Parameter" id="0">
1645 <port id="0" precision="FP32">
1653 <layer name="lrn" id="1" type="LRN">
1654 <data alpha="0" beta="0.75" local-size="5" bias="1" />
1656 <port id="1" precision="FP32">
1664 <port id="2" precision="FP32">
1672 <layer name="output" type="Result" id="2">
1674 <port id="0" precision="FP32">
1684 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1685 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
1689 std::string modelV5 = R"V0G0N(
1690 <net name="Activation" version="5" precision="FP32" batch="1">
1692 <layer id="0" name="in1" type="Input" precision="FP32">
1702 <layer id="1" name="lrn" type="LRN" precision="FP32">
1703 <data alpha="0.000000" beta="0.750000" local-size="5" region="across" />
1721 <layer id="2" name="data1" precision="FP32" type="Const">
1731 <custom offset="0" size="5808"/>
1734 <layer id="3" name="add" precision="FP32" type="Eltwise">
1735 <data operation="sum"/>
1761 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1762 <edge from-layer="1" from-port="2" to-layer="3" to-port="0"/>
1763 <edge from-layer="2" from-port="3" to-layer="3" to-port="1"/>
1771 auto nGraph = reader.read(model, blob);
1772 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
1774 InferenceEngine::CNNNetReader net_reader;
1775 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
1777 compareICNNNetworks(*network, net_reader.getNetwork());
1781 TEST_F(NGraphReaderTests, ReadClampNetwork) {
1782 std::string model = R"V0G0N(
1783 <net name="Activation" version="10">
1785 <layer name="in1" type="Parameter" id="0">
1787 <port id="0" precision="FP32">
1795 <layer name="activation" id="1" type="Clamp">
1796 <data max="6" min="0" />"
1798 <port id="1" precision="FP32">
1806 <port id="2" precision="FP32">
1814 <layer name="output" type="Result" id="2">
1816 <port id="0" precision="FP32">
1826 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1827 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
1831 std::string modelV5 = R"V0G0N(
1832 <net name="Activation" version="5" precision="FP32" batch="1">
1834 <layer name="in1" type="Input" precision="FP32" id="0">
1844 <layer name="activation" id="1" type="Clamp" precision="FP32">
1845 <data max="6.000000" min="0.000000" />"
1865 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1873 auto nGraph = reader.read(model, blob);
1874 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
1876 InferenceEngine::CNNNetReader net_reader;
1877 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
1879 compareICNNNetworks(*network, net_reader.getNetwork());
1882 TEST_F(NGraphReaderTests, ReadSigmoidNetwork) {
1883 std::string model = R"V0G0N(
1884 <net name="Activation" version="10">
1886 <layer name="in1" type="Parameter" id="0">
1888 <port id="0" precision="FP32">
1896 <layer name="activation" id="1" type="Sigmoid">
1898 <port id="1" precision="FP32">
1906 <port id="2" precision="FP32">
1914 <layer name="output" type="Result" id="2">
1916 <port id="0" precision="FP32">
1926 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1927 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
1931 std::string modelV5 = R"V0G0N(
1932 <net name="Activation" version="5" precision="FP32" batch="1">
1934 <layer name="in1" type="Input" precision="FP32" id="0">
1944 <layer name="activation" id="1" type="Sigmoid" precision="FP32">
1964 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
1972 auto nGraph = reader.read(model, blob);
1973 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
1975 InferenceEngine::CNNNetReader net_reader;
1976 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
1978 compareICNNNetworks(*network, net_reader.getNetwork());
1981 TEST_F(NGraphReaderTests, ReadPReLUNetwork) {
1982 std::string model = R"V0G0N(
1983 <net name="Activation" version="10">
1985 <layer name="in1" type="Parameter" id="0">
1987 <port id="0" precision="FP32">
1995 <layer id="3" name="data" type="Const">
1996 <data offset="0" size="256"/>
1998 <port id="1" precision="FP32">
2005 <layer name="activation" id="1" type="PRelU">
2007 <port id="1" precision="FP32">
2013 <port id="3" precision="FP32">
2020 <port id="2" precision="FP32">
2028 <layer name="output" type="Result" id="2">
2030 <port id="0" precision="FP32">
2040 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2041 <edge from-layer="3" from-port="1" to-layer="1" to-port="3"/>
2042 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
2046 std::string modelV5 = R"V0G0N(
2047 <net name="Activation" version="5" precision="FP32" batch="1">
2049 <layer name="in1" type="Input" precision="FP32" id="0">
2059 <layer name="activation" id="1" type="PReLU" precision="FP32">
2077 <weights offset="0" size="256"/>
2082 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2088 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {256}, Layout::C));
2089 weights->allocate();
2090 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
2092 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
2094 auto nGraph = reader.read(model, weights);
2095 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
2097 InferenceEngine::CNNNetReader net_reader;
2098 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
2099 net_reader.SetWeights(tWeights);
2101 compareICNNNetworks(*network, net_reader.getNetwork());
2104 TEST_F(NGraphReaderTests, ReadELUNetwork) {
2105 std::string model = R"V0G0N(
2106 <net name="Activation" version="10">
2108 <layer name="in1" type="Parameter" id="0">
2110 <port id="0" precision="FP32">
2118 <layer name="activation" id="1" type="ELU">
2121 <port id="1" precision="FP32">
2129 <port id="2" precision="FP32">
2137 <layer name="output" type="Result" id="2">
2139 <port id="0" precision="FP32">
2149 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2150 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
2154 std::string modelV5 = R"V0G0N(
2155 <net name="Activation" version="5" precision="FP32" batch="1">
2157 <layer name="in1" type="Input" precision="FP32" id="0">
2167 <layer name="activation" id="1" type="ELU" precision="FP32">
2168 <data alpha="1.000000"/>
2188 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2196 auto nGraph = reader.read(model, blob);
2197 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
2199 InferenceEngine::CNNNetReader net_reader;
2200 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
2202 compareICNNNetworks(*network, net_reader.getNetwork());
2205 TEST_F(NGraphReaderTests, ReadShapeOfNetwork) {
2206 std::string model = R"V0G0N(
2207 <net name="Activation" version="10">
2209 <layer name="in1" type="Parameter" id="0">
2211 <port id="0" precision="FP32">
2219 <layer name="activation" id="1" type="ShapeOf">
2221 <port id="1" precision="FP32">
2229 <port id="2" precision="I64">
2234 <layer name="output" type="Result" id="2">
2236 <port id="0" precision="I64">
2243 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2244 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
2248 std::string modelV5 = R"V0G0N(
2249 <net name="Activation" version="5" precision="FP32" batch="1">
2251 <layer name="in1" type="Input" precision="FP32" id="0">
2261 <layer name="activation" id="1" type="ShapeOf" precision="I64">
2278 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2286 auto nGraph = reader.read(model, blob);
2287 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
2289 InferenceEngine::CNNNetReader net_reader;
2290 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
2292 compareICNNNetworks(*network, net_reader.getNetwork());
2295 TEST_F(NGraphReaderTests, ReadLeakyReLUNetwork) {
2296 std::string model = R"V0G0N(
2297 <net name="Activation" version="10">
2299 <layer name="in1" type="Parameter" id="0">
2301 <port id="0" precision="FP32">
2309 <layer name="activation" id="1" type="LeakyReLU">
2310 <data negative_slope="0.1" />
2312 <port id="1" precision="FP32">
2320 <port id="2" precision="FP32">
2328 <layer name="output" type="Result" id="2">
2330 <port id="0" precision="FP32">
2340 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2341 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
2345 std::string modelV5 = R"V0G0N(
2346 <net name="Activation" version="5" precision="FP32" batch="1">
2348 <layer name="in1" type="Input" precision="FP32" id="0">
2358 <layer name="activation" id="1" type="ReLU" precision="FP32">
2359 <data negative_slope="0.1" />
2379 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2387 auto nGraph = reader.read(model, blob);
2388 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
2390 InferenceEngine::CNNNetReader net_reader;
2391 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
2393 compareICNNNetworks(*network, net_reader.getNetwork());
2396 TEST_F(NGraphReaderTests, ReadTanhNetwork) {
2397 std::string model = R"V0G0N(
2398 <net name="Activation" version="10">
2400 <layer name="in1" type="Parameter" id="0">
2402 <port id="0" precision="FP32">
2410 <layer name="activation" id="1" type="Tanh">
2412 <port id="1" precision="FP32">
2420 <port id="2" precision="FP32">
2428 <layer name="output" type="Result" id="2">
2430 <port id="0" precision="FP32">
2440 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2441 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
2445 std::string modelV5 = R"V0G0N(
2446 <net name="Activation" version="5" precision="FP32" batch="1">
2448 <layer name="in1" type="Input" precision="FP32" id="0">
2458 <layer name="activation" id="1" type="TanH" precision="FP32">
2478 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2486 auto nGraph = reader.read(model, blob);
2487 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
2489 InferenceEngine::CNNNetReader net_reader;
2490 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
2492 compareICNNNetworks(*network, net_reader.getNetwork());
2495 TEST_F(NGraphReaderTests, ReadExpNetwork) {
2496 std::string model = R"V0G0N(
2497 <net name="Activation" version="10">
2499 <layer name="in1" type="Parameter" id="0">
2501 <port id="0" precision="FP32">
2509 <layer name="activation" id="1" type="Exp">
2511 <port id="1" precision="FP32">
2519 <port id="2" precision="FP32">
2527 <layer name="output" type="Result" id="2">
2529 <port id="0" precision="FP32">
2539 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2540 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
2544 std::string modelV5 = R"V0G0N(
2545 <net name="Activation" version="5" precision="FP32" batch="1">
2547 <layer name="in1" type="Input" precision="FP32" id="0">
2557 <layer name="activation" id="1" type="Exp" precision="FP32">
2577 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2585 auto nGraph = reader.read(model, blob);
2586 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
2588 InferenceEngine::CNNNetReader net_reader;
2589 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
2591 compareICNNNetworks(*network, net_reader.getNetwork());
2594 TEST_F(NGraphReaderTests, ReadReLUNetwork) {
2595 std::string model = R"V0G0N(
2596 <net name="Activation" version="10">
2598 <layer name="in1" type="Parameter" id="0">
2600 <port id="0" precision="FP32">
2608 <layer name="activation" id="1" type="ReLU">
2610 <port id="1" precision="FP32">
2618 <port id="2" precision="FP32">
2626 <layer name="output" type="Result" id="2">
2628 <port id="0" precision="FP32">
2638 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2639 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
2643 std::string modelV5 = R"V0G0N(
2644 <net name="Activation" version="5" precision="FP32" batch="1">
2646 <layer name="in1" type="Input" precision="FP32" id="0">
2656 <layer name="activation" id="1" type="ReLU" precision="FP32">
2676 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2684 auto nGraph = reader.read(model, blob);
2685 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
2687 InferenceEngine::CNNNetReader net_reader;
2688 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
2690 compareICNNNetworks(*network, net_reader.getNetwork());
2693 TEST_F(NGraphReaderTests, ReadBroadcastNetwork) {
2694 std::string model = R"V0G0N(
2695 <net name="Activation" version="10">
2697 <layer id="0" name="data_add_5451_const" type="Const">
2698 <data offset="0" size="256"/>
2700 <port id="1" precision="FP32">
2707 <layer id="1" name="Add1_/Fused_Add_/Broadcast/Shape7264_const" type="Const">
2708 <data offset="256" size="32"/>
2710 <port id="1" precision="I64">
2715 <layer id="2" name="Add1_/Fused_Add_/Broadcast/Axis7265_const" type="Const">
2716 <data offset="288" size="32"/>
2718 <port id="1" precision="I64">
2723 <layer id="3" name="Add1_/Fused_Add_/Broadcast/" type="Broadcast">
2725 <port id="0" precision="FP32">
2730 <port id="1" precision="I64">
2733 <port id="2" precision="I64">
2738 <port id="3" precision="FP32">
2746 <layer name="output" type="Result" id="4">
2748 <port id="0" precision="FP32">
2758 <edge from-layer="0" from-port="1" to-layer="3" to-port="0"/>
2759 <edge from-layer="1" from-port="1" to-layer="3" to-port="1"/>
2760 <edge from-layer="2" from-port="1" to-layer="3" to-port="2"/>
2761 <edge from-layer="3" from-port="3" to-layer="4" to-port="0"/>
2767 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {320}, Layout::C));
2768 weights->allocate();
2769 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
2771 auto nGraph = reader.read(model, weights);
2774 TEST_F(NGraphReaderTests, ReadSoftMaxNetwork) {
2775 std::string model = R"V0G0N(
2776 <net name="Activation" version="10">
2778 <layer name="in1" type="Parameter" id="0">
2780 <port id="0" precision="FP32">
2786 <layer name="softmax" id="1" type="SoftMax">
2789 <port id="1" precision="FP32">
2795 <port id="2" precision="FP32">
2801 <layer name="output" type="Result" id="2">
2803 <port id="0" precision="FP32">
2811 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2812 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
2816 std::string modelV5 = R"V0G0N(
2817 <net name="Activation" version="5" precision="FP32" batch="1">
2819 <layer name="in1" type="Input" precision="FP32" id="0">
2827 <layer name="softmax" id="1" type="SoftMax" precision="FP32">
2844 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2852 auto nGraph = reader.read(model, blob);
2853 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
2855 InferenceEngine::CNNNetReader net_reader;
2856 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
2858 compareICNNNetworks(*network, net_reader.getNetwork());
2861 TEST_F(NGraphReaderTests, ReadMaxPoolNetwork) {
2862 std::string model = R"V0G0N(
2863 <net name="Activation" version="10">
2865 <layer name="in1" type="Parameter" id="0">
2867 <port id="0" precision="FP32">
2875 <layer name="pool" id="1" type="MaxPool">
2876 <data kernel="3,3" pads_begin="1,1" pads_end="1,1" strides="2,2"/>
2878 <port id="1" precision="FP32">
2886 <port id="2" precision="FP32">
2894 <layer name="output" type="Result" id="2">
2896 <port id="0" precision="FP32">
2906 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2907 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
2911 std::string modelV5 = R"V0G0N(
2912 <net name="Activation" version="5" precision="FP32" batch="1">
2914 <layer name="in1" type="Input" precision="FP32" id="0">
2924 <layer name="pool" id="1" type="Pooling" precision="FP32">
2925 <data kernel="3,3" rounding_type="floor" pads_begin="1,1" pads_end="1,1" strides="2,2" pool-method="max"/>
2945 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
2953 auto nGraph = reader.read(model, blob);
2954 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
2956 InferenceEngine::CNNNetReader net_reader;
2957 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
2959 compareICNNNetworks(*network, net_reader.getNetwork());
2961 TEST_F(NGraphReaderTests, ReadAvgPoolNetwork) {
2962 std::string model = R"V0G0N(
2963 <net name="Activation" version="10">
2965 <layer name="in1" type="Parameter" id="0">
2967 <port id="0" precision="FP32">
2975 <layer name="pool" id="1" type="AvgPool">
2976 <data kernel="3,3" pads_begin="1,1" pads_end="1,1" strides="2,2" exclude-pad="true"/>
2978 <port id="1" precision="FP32">
2986 <port id="2" precision="FP32">
2994 <layer name="output" type="Result" id="2">
2996 <port id="0" precision="FP32">
3006 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
3007 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
3011 std::string modelV5 = R"V0G0N(
3012 <net name="Activation" version="5" precision="FP32" batch="1">
3014 <layer name="in1" type="Input" precision="FP32" id="0">
3024 <layer name="pool" id="1" type="Pooling" precision="FP32">
3025 <data kernel="3,3" pads_begin="1,1" pads_end="1,1" strides="2,2" pool-method="avg" exclude-pad="true" rounding_type="floor"/>
3045 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
3053 auto nGraph = reader.read(model, blob);
3054 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
3056 InferenceEngine::CNNNetReader net_reader;
3057 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
3059 compareICNNNetworks(*network, net_reader.getNetwork());
3062 TEST_F(NGraphReaderTests, ReadReLUNetworkWithoutTopologicalOrder) {
3063 std::string model = R"V0G0N(
3064 <net name="Activation" version="10">
3066 <layer name="output" type="Result" id="2">
3068 <port id="0" precision="FP32">
3076 <layer name="activation" id="1" type="ReLU">
3078 <port id="1" precision="FP32">
3086 <port id="2" precision="FP32">
3094 <layer name="in1" type="Parameter" id="0">
3096 <port id="0" precision="FP32">
3106 <edge from-layer="1" from-port="2" to-layer="2" to-port="0"/>
3107 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
3111 std::string modelV5 = R"V0G0N(
3112 <net name="Activation" version="5" precision="FP32" batch="1">
3114 <layer name="activation" id="1" type="ReLU" precision="FP32">
3132 <layer name="in1" type="Input" precision="FP32" id="0">
3144 <edge from-layer="0" from-port="0" to-layer="1" to-port="1"/>
3152 auto nGraph = reader.read(model, blob);
3153 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
3155 InferenceEngine::CNNNetReader net_reader;
3156 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
3158 compareICNNNetworks(*network, net_reader.getNetwork());
3161 TEST_F(NGraphReaderTests, ReadTileNetwork) {
3162 std::string model = R"V0G0N(
3163 <net name="Transpose" version="10">
3165 <layer id="0" name="data" type="Parameter">
3167 <port id="0" precision="FP32">
3175 <layer id="1" name="const1" type="Const">
3176 <data offset="0" size="32"/>
3178 <port id="1" precision="I64">
3183 <layer id="3" name="tile" type="Tile">
3185 <port id="0" precision="FP32">
3191 <port id="1" precision="I64">
3196 <port id="3" precision="FP32">
3204 <layer name="output" type="Result" id="2">
3206 <port id="0" precision="FP32">
3216 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
3217 <edge from-layer="1" from-port="1" to-layer="3" to-port="1"/>
3218 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
3222 std::string modelV5 = R"V0G0N(
3223 <net name="Transpose" version="5" precision="FP32" batch="1">
3225 <layer id="0" name="data" precision="FP32" type="Input">
3235 <layer id="3" name="tile" precision="FP32" type="Tile">
3236 <data axis="1" tiles="2"/>
3256 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
3262 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {32}, Layout::C));
3263 weights->allocate();
3264 auto *data = weights->buffer().as<int64_t *>();
3270 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
3272 auto nGraph = reader.read(model, weights);
3273 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
3275 InferenceEngine::CNNNetReader net_reader;
3276 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
3277 net_reader.SetWeights(tWeights);
3279 compareICNNNetworks(*network, net_reader.getNetwork());
3282 TEST_F(NGraphReaderTests, ReadTileNetwork2) {
3283 std::string model = R"V0G0N(
3284 <net name="Transpose" version="10">
3286 <layer id="0" name="data" type="Parameter">
3288 <port id="0" precision="FP32">
3296 <layer id="1" name="const1" type="Const">
3297 <data offset="0" size="32"/>
3299 <port id="1" precision="I64">
3304 <layer id="3" name="tile" type="Tile">
3306 <port id="0" precision="FP32">
3312 <port id="1" precision="I64">
3317 <port id="3" precision="FP32">
3325 <layer name="output" type="Result" id="2">
3327 <port id="0" precision="FP32">
3337 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
3338 <edge from-layer="1" from-port="1" to-layer="3" to-port="1"/>
3339 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
3343 std::string modelV5 = R"V0G0N(
3344 <net name="Transpose" version="5" precision="FP32" batch="1">
3346 <layer id="0" name="data" precision="FP32" type="Input">
3356 <layer id="1" name="tile" precision="FP32" type="Tile">
3357 <data axis="3" tiles="4"/>
3375 <layer id="2" name="tile_3" precision="FP32" type="Tile">
3376 <data axis="2" tiles="3"/>
3394 <layer id="3" name="tile_3_2" precision="FP32" type="Tile">
3395 <data axis="0" tiles="2"/>
3415 <edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
3416 <edge from-layer="1" from-port="3" to-layer="2" to-port="0"/>
3417 <edge from-layer="2" from-port="3" to-layer="3" to-port="0"/>
3423 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {32}, Layout::C));
3424 weights->allocate();
3425 auto *data = weights->buffer().as<int64_t *>();
3431 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
3433 auto nGraph = reader.read(model, weights);
3434 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
3436 InferenceEngine::CNNNetReader net_reader;
3437 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
3438 net_reader.SetWeights(tWeights);
3440 compareICNNNetworks(*network, net_reader.getNetwork());
3443 TEST_F(NGraphReaderTests, ReadTransposeNetwork) {
3444 std::string model = R"V0G0N(
3445 <net name="Transpose" version="10">
3447 <layer id="0" name="data" type="Parameter">
3449 <port id="0" precision="FP32">
3457 <layer id="1" name="const1" type="Const">
3458 <data offset="0" size="32"/>
3460 <port id="1" precision="I64">
3465 <layer id="3" name="transp" type="Transpose">
3467 <port id="0" precision="FP32">
3473 <port id="1" precision="I64">
3478 <port id="3" precision="FP32">
3486 <layer name="output" type="Result" id="2">
3488 <port id="0" precision="FP32">
3498 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
3499 <edge from-layer="1" from-port="1" to-layer="3" to-port="1"/>
3500 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
3504 std::string modelV5 = R"V0G0N(
3505 <net name="Transpose" version="5" precision="FP32" batch="1">
3507 <layer id="0" name="data" precision="FP32" type="Input">
3517 <layer id="3" name="transp" precision="FP32" type="Permute">
3518 <data order="3,2,1,0"/>
3538 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
3544 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {32}, Layout::C));
3545 weights->allocate();
3546 auto *data = weights->buffer().as<int64_t *>();
3552 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
3554 auto nGraph = reader.read(model, weights);
3555 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
3557 InferenceEngine::CNNNetReader net_reader;
3558 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
3559 net_reader.SetWeights(tWeights);
3561 compareICNNNetworks(*network, net_reader.getNetwork());
3564 TEST_F(NGraphReaderTests, ReadReshapeNetwork) {
3565 std::string model = R"V0G0N(
3566 <net name="Reshape" version="10">
3568 <layer id="0" name="data" type="Parameter">
3570 <port id="0" precision="FP32">
3578 <layer id="1" name="const1" type="Const">
3579 <data offset="0" size="16"/>
3581 <port id="1" precision="I64">
3586 <layer id="3" name="reshape1" type="Reshape">
3588 <port id="0" precision="FP32">
3594 <port id="1" precision="I64">
3599 <port id="3" precision="FP32">
3605 <layer name="output" type="Result" id="2">
3607 <port id="0" precision="FP32">
3615 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
3616 <edge from-layer="1" from-port="1" to-layer="3" to-port="1"/>
3617 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
3621 std::string modelV5 = R"V0G0N(
3622 <net name="Convolution" version="5" precision="FP32" batch="1">
3624 <layer id="0" name="data" precision="FP32" type="Input">
3634 <layer id="1" name="const1" precision="I64" type="Const">
3641 <custom offset="0" size="16"/>
3644 <layer id="3" name="reshape1" precision="FP32" type="Reshape">
3665 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
3666 <edge from-layer="1" from-port="0" to-layer="3" to-port="1"/>
3672 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {16}, Layout::C));
3673 weights->allocate();
3674 auto *data = weights->buffer().as<int64_t *>();
3678 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
3680 auto nGraph = reader.read(model, weights);
3681 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
3683 InferenceEngine::CNNNetReader net_reader;
3684 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
3685 net_reader.SetWeights(tWeights);
3687 compareICNNNetworks(*network, net_reader.getNetwork());
3690 TEST_F(NGraphReaderTests, ReadSqueeze) {
3691 std::string model = R"V0G0N(
3692 <net name="Reshape" version="10">
3694 <layer id="0" name="data" type="Parameter">
3696 <port id="0" precision="FP32">
3704 <layer id="1" name="const1" precision="I64" type="Const">
3705 <data offset="0" size="8"/>
3712 <layer id="2" name="squeeze" precision="FP32" type="Squeeze">
3732 <layer name="output" type="Result" id="3">
3734 <port id="0" precision="FP32">
3743 <edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
3744 <edge from-layer="1" from-port="1" to-layer="2" to-port="1"/>
3745 <edge from-layer="2" from-port="2" to-layer="3" to-port="0"/>
3749 std::string modelV5 = R"V0G0N(
3750 <net name="Convolution" version="5" precision="FP32" batch="1">
3752 <layer id="0" name="data" precision="FP32" type="Input">
3762 <layer id="1" name="const1" precision="I64" type="Const">
3769 <custom offset="0" size="8"/>
3772 <layer id="3" name="squeeze" precision="FP32" type="Squeeze">
3794 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
3795 <edge from-layer="1" from-port="0" to-layer="3" to-port="1"/>
3801 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {24}, Layout::C));
3802 weights->allocate();
3803 auto *data = weights->buffer().as<int64_t *>();
3806 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
3808 auto nGraph = reader.read(model, weights);
3809 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
3811 InferenceEngine::CNNNetReader net_reader;
3812 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
3813 net_reader.SetWeights(tWeights);
3815 compareICNNNetworks(*network, net_reader.getNetwork());
3818 TEST_F(NGraphReaderTests, ReadInterpolateNetwork) {
3819 std::string model = R"V0G0N(
3820 <net name="Reshape" version="10">
3822 <layer id="0" name="data" type="Parameter" precision="FP32">
3832 <layer id="1" name="const1" type="Const" precision="I64">
3833 <data offset="0" size="16"/>
3840 <layer id="3" name="interpolate" type="Interpolate" precision="FP32">
3841 <data axes="2,3" align_corners="0" pads_begin="0" pads_end="0" mode="linear"/>
3862 <layer name="output" type="Result" id="2" precision="FP32">
3874 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
3875 <edge from-layer="1" from-port="1" to-layer="3" to-port="1"/>
3876 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
3880 std::string modelV5 = R"V0G0N(
3881 <net name="Convolution" version="5" precision="FP32" batch="1">
3883 <layer id="0" name="data" precision="FP32" type="Input">
3893 <layer id="1" name="interpolate" precision="FP32" type="Interp">
3894 <data align_corners="0" pad_beg="0" pad_end="0" mode="linear" width="60" height="50"/>
3914 <edge from-layer="0" from-port="0" to-layer="1" to-port="0"/>
3920 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {16}, Layout::C));
3921 weights->allocate();
3922 auto *data = weights->buffer().as<int64_t *>();
3926 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
3928 auto nGraph = reader.read(model, weights);
3929 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
3931 InferenceEngine::CNNNetReader net_reader;
3932 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
3933 net_reader.SetWeights(tWeights);
3935 compareICNNNetworks(*network, net_reader.getNetwork());
3938 TEST_F(NGraphReaderTests, ReadMatMulNetwork) {
3939 std::string model = R"V0G0N(
3940 <net name="Convolution" version="10">
3942 <layer id="0" name="data" type="Parameter">
3944 <port id="0" precision="FP32">
3950 <layer id="1" name="embedded_input__const" type="Const">
3951 <data offset="0" size="8192000"/>
3953 <port id="1" precision="FP32">
3959 <layer id="3" name="fc" type="MatMul">
3961 <port id="0" precision="FP32">
3965 <port id="1" precision="FP32">
3971 <port id="3" precision="FP32">
3977 <layer name="output" type="Result" id="2">
3979 <port id="0" precision="FP32">
3987 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
3988 <edge from-layer="1" from-port="1" to-layer="3" to-port="1"/>
3989 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
3993 std::string modelV5 = R"V0G0N(
3994 <net name="Convolution" version="5" precision="FP32" batch="1">
3996 <layer id="0" name="data" precision="FP32" type="Input">
4004 <layer id="3" name="fc" precision="FP32" type="FullyConnected">
4005 <data alpha="0" beta="0" out-size="1000"/>
4018 <weights offset="0" size="8192000" />
4022 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4028 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {8192000}, Layout::C));
4029 weights->allocate();
4030 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
4032 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
4034 auto nGraph = reader.read(model, weights);
4035 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
4037 InferenceEngine::CNNNetReader net_reader;
4038 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
4039 net_reader.SetWeights(tWeights);
4041 compareICNNNetworks(*network, net_reader.getNetwork());
4044 TEST_F(NGraphReaderTests, ReadDeconvolution3DNetwork) {
4045 std::string model = R"V0G0N(
4046 <net name="Convolution" version="10">
4048 <layer id="0" name="data" type="Parameter">
4050 <port id="0" precision="FP32">
4059 <layer id="1" name="embedded_input__const" type="Const">
4060 <data offset="0" size="33554432"/>
4062 <port id="1" precision="FP32">
4071 <layer id="3" name="deconv1" precision="FP32" type="Deconvolution">
4072 <data auto_pad="same_upper" kernel="4,4,4" output="256" pads_begin="1,1,1" pads_end="1,1,1" strides="2,2,2"/>
4099 <layer name="output" type="Result" id="2">
4101 <port id="0" precision="FP32">
4112 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4113 <edge from-layer="1" from-port="1" to-layer="3" to-port="1"/>
4114 <edge from-layer="3" from-port="2" to-layer="2" to-port="0"/>
4118 std::string modelV5 = R"V0G0N(
4119 <net name="Convolution" version="5" precision="FP32" batch="1">
4121 <layer id="0" name="data" precision="FP32" type="Input">
4132 <layer id="3" name="deconv1" precision="FP32" type="Deconvolution">
4133 <data dilations="1,1,1" auto_pad="same_upper" kernel="4,4,4" output="256" pads_begin="1,1,1" pads_end="1,1,1" strides="2,2,2"/>
4152 <weights offset="0" size="33554432" />
4156 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4162 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {33554432}, Layout::C));
4163 weights->allocate();
4164 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
4166 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
4168 auto nGraph = reader.read(model, weights);
4169 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
4171 InferenceEngine::CNNNetReader net_reader;
4172 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
4173 net_reader.SetWeights(tWeights);
4175 compareICNNNetworks(*network, net_reader.getNetwork());
4178 TEST_F(NGraphReaderTests, ReadDeconvolution2DNetwork) {
4179 std::string model = R"V0G0N(
4180 <net name="Convolution" version="10">
4182 <layer id="0" name="data" type="Parameter">
4184 <port id="0" precision="FP32">
4192 <layer id="1" name="embedded_input__const" type="Const">
4193 <data offset="0" size="8388608"/>
4195 <port id="1" precision="FP32">
4203 <layer id="3" name="deconv1" precision="FP32" type="Deconvolution">
4204 <data auto_pad="same_upper" kernel="4,4" output="256" pads_begin="1,1" pads_end="1,1" strides="2,2"/>
4228 <layer name="output" type="Result" id="2">
4230 <port id="0" precision="FP32">
4240 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4241 <edge from-layer="1" from-port="1" to-layer="3" to-port="1"/>
4242 <edge from-layer="3" from-port="2" to-layer="2" to-port="0"/>
4246 std::string modelV5 = R"V0G0N(
4247 <net name="Convolution" version="5" precision="FP32" batch="1">
4249 <layer id="0" name="data" precision="FP32" type="Input">
4259 <layer id="3" name="deconv1" precision="FP32" type="Deconvolution">
4260 <data dilations="1,1" auto_pad="same_upper" kernel="4,4" output="256" pads_begin="1,1" pads_end="1,1" strides="2,2"/>
4277 <weights offset="0" size="8388608" />
4281 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4287 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {33554432}, Layout::C));
4288 weights->allocate();
4289 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
4291 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
4293 auto nGraph = reader.read(model, weights);
4294 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
4296 InferenceEngine::CNNNetReader net_reader;
4297 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
4298 net_reader.SetWeights(tWeights);
4300 compareICNNNetworks(*network, net_reader.getNetwork());
4303 TEST_F(NGraphReaderTests, ReadConvolutionNetwork) {
4304 std::string model = R"V0G0N(
4305 <net name="Convolution" version="10">
4307 <layer id="0" name="data" type="Parameter">
4309 <port id="0" precision="FP32">
4317 <layer id="1" name="embedded_input__const" type="Const">
4318 <data offset="0" size="139392"/>
4320 <port id="1" precision="FP32">
4328 <layer id="3" name="conv1" type="Convolution">
4329 <data dilations="1,1" group="1" kernel="11,11" output="96" pads_begin="0,0" pads_end="0,0" strides="4,4"/>
4331 <port id="0" precision="FP32">
4337 <port id="1" precision="FP32">
4345 <port id="3" precision="FP32">
4353 <layer name="output" type="Result" id="2">
4355 <port id="0" precision="FP32">
4365 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4366 <edge from-layer="1" from-port="1" to-layer="3" to-port="1"/>
4367 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
4371 std::string modelV5 = R"V0G0N(
4372 <net name="Convolution" version="5" precision="FP32" batch="1">
4374 <layer id="0" name="data" precision="FP32" type="Input">
4384 <layer id="3" name="conv1" precision="FP32" type="Convolution">
4385 <data dilations="1,1" group="1" kernel="11,11" output="96" pads_begin="0,0" pads_end="0,0" strides="4,4"/>
4402 <weights offset="0" size="139392" />
4406 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4412 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {139392}, Layout::C));
4413 weights->allocate();
4414 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
4416 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
4418 auto nGraph = reader.read(model, weights);
4419 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
4421 InferenceEngine::CNNNetReader net_reader;
4422 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
4423 net_reader.SetWeights(tWeights);
4425 compareICNNNetworks(*network, net_reader.getNetwork());
4428 TEST_F(NGraphReaderTests, ReadMaximumNetwork) {
4429 std::string model = R"V0G0N(
4430 <net name="Multiply" version="10">
4432 <layer id="0" name="data" type="Parameter">
4434 <port id="0" precision="FP32">
4442 <layer id="1" name="data1" type="Const">
4443 <data offset="0" size="3211264"/>
4445 <port id="0" precision="FP32">
4453 <layer id="3" name="div" type="Maximum">
4455 <port id="0" precision="FP32">
4461 <port id="1" precision="FP32">
4469 <port id="3" precision="FP32">
4477 <layer name="output" type="Result" id="2">
4479 <port id="0" precision="FP32">
4489 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4490 <edge from-layer="1" from-port="0" to-layer="3" to-port="1"/>
4491 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
4495 std::string modelV5 = R"V0G0N(
4496 <net name="Convolution" version="5" precision="FP32" batch="1">
4498 <layer id="0" name="data" precision="FP32" type="Input">
4508 <layer id="2" name="data1" precision="FP32" type="Const">
4518 <custom offset="0" size="3211264"/>
4521 <layer id="3" name="div" precision="FP32" type="Eltwise">
4522 <data operation="max"/>
4548 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4549 <edge from-layer="2" from-port="3" to-layer="3" to-port="1"/>
4555 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {3211264}, Layout::C));
4556 weights->allocate();
4557 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
4559 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
4561 auto nGraph = reader.read(model, weights);
4562 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
4564 InferenceEngine::CNNNetReader net_reader;
4565 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
4566 net_reader.SetWeights(tWeights);
4568 compareICNNNetworks(*network, net_reader.getNetwork());
4571 TEST_F(NGraphReaderTests, ReadDivideNetwork) {
4572 std::string model = R"V0G0N(
4573 <net name="Multiply" version="10">
4575 <layer id="0" name="data" type="Parameter">
4577 <port id="0" precision="FP32">
4585 <layer id="1" name="data1" type="Const">
4586 <data offset="0" size="3211264"/>
4588 <port id="0" precision="FP32">
4596 <layer id="3" name="div" type="Divide">
4598 <port id="0" precision="FP32">
4604 <port id="1" precision="FP32">
4612 <port id="3" precision="FP32">
4620 <layer name="output" type="Result" id="2">
4622 <port id="0" precision="FP32">
4632 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4633 <edge from-layer="1" from-port="0" to-layer="3" to-port="1"/>
4634 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
4638 std::string modelV5 = R"V0G0N(
4639 <net name="Convolution" version="5" precision="FP32" batch="1">
4641 <layer id="0" name="data" precision="FP32" type="Input">
4651 <layer id="2" name="data1" precision="FP32" type="Const">
4661 <custom offset="0" size="3211264"/>
4664 <layer id="3" name="div" precision="FP32" type="Eltwise">
4665 <data operation="div"/>
4691 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4692 <edge from-layer="2" from-port="3" to-layer="3" to-port="1"/>
4698 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {3211264}, Layout::C));
4699 weights->allocate();
4700 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
4702 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
4704 auto nGraph = reader.read(model, weights);
4705 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
4707 InferenceEngine::CNNNetReader net_reader;
4708 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
4709 net_reader.SetWeights(tWeights);
4711 compareICNNNetworks(*network, net_reader.getNetwork());
4714 TEST_F(NGraphReaderTests, ReadPowNetwork) {
4715 std::string model = R"V0G0N(
4716 <net name="Multiply" version="10">
4718 <layer id="0" name="data" type="Parameter">
4720 <port id="0" precision="FP32">
4728 <layer id="1" name="data1" type="Const">
4729 <data offset="0" size="3211264"/>
4731 <port id="0" precision="FP32">
4739 <layer id="3" name="pow" type="Pow">
4741 <port id="0" precision="FP32">
4747 <port id="1" precision="FP32">
4755 <port id="3" precision="FP32">
4763 <layer name="output" type="Result" id="2">
4765 <port id="0" precision="FP32">
4775 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4776 <edge from-layer="1" from-port="0" to-layer="3" to-port="1"/>
4777 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
4781 std::string modelV5 = R"V0G0N(
4782 <net name="Convolution" version="5" precision="FP32" batch="1">
4784 <layer id="0" name="data" precision="FP32" type="Input">
4794 <layer id="2" name="data1" precision="FP32" type="Const">
4804 <custom offset="0" size="3211264"/>
4807 <layer id="3" name="pow" precision="FP32" type="Eltwise">
4808 <data operation="pow"/>
4834 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4835 <edge from-layer="2" from-port="3" to-layer="3" to-port="1"/>
4841 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {3211264}, Layout::C));
4842 weights->allocate();
4843 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
4845 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
4847 auto nGraph = reader.read(model, weights);
4848 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
4850 InferenceEngine::CNNNetReader net_reader;
4851 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
4852 net_reader.SetWeights(tWeights);
4854 compareICNNNetworks(*network, net_reader.getNetwork());
4857 TEST_F(NGraphReaderTests, ReadMultiplyNetwork) {
4858 std::string model = R"V0G0N(
4859 <net name="Multiply" version="10">
4861 <layer id="0" name="data" type="Parameter">
4863 <port id="0" precision="FP32">
4871 <layer id="1" name="data1" type="Const">
4872 <data offset="0" size="3211264"/>
4874 <port id="0" precision="FP32">
4882 <layer id="3" name="mul" type="Multiply">
4884 <port id="0" precision="FP32">
4890 <port id="1" precision="FP32">
4898 <port id="3" precision="FP32">
4906 <layer name="output" type="Result" id="2">
4908 <port id="0" precision="FP32">
4918 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4919 <edge from-layer="1" from-port="0" to-layer="3" to-port="1"/>
4920 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
4924 std::string modelV5 = R"V0G0N(
4925 <net name="Convolution" version="5" precision="FP32" batch="1">
4927 <layer id="0" name="data" precision="FP32" type="Input">
4937 <layer id="2" name="data1" precision="FP32" type="Const">
4947 <custom offset="0" size="3211264"/>
4950 <layer id="3" name="mul" precision="FP32" type="Eltwise">
4951 <data operation="prod"/>
4977 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
4978 <edge from-layer="2" from-port="3" to-layer="3" to-port="1"/>
4984 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {3211264}, Layout::C));
4985 weights->allocate();
4986 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
4988 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
4990 auto nGraph = reader.read(model, weights);
4991 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
4993 InferenceEngine::CNNNetReader net_reader;
4994 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
4995 net_reader.SetWeights(tWeights);
4997 compareICNNNetworks(*network, net_reader.getNetwork());
5000 TEST_F(NGraphReaderTests, ReadAddNoBroadcastNetwork) {
5001 std::string model = R"V0G0N(
5002 <net name="Add" version="10">
5004 <layer id="0" name="data" type="Parameter">
5006 <port id="0" precision="FP32">
5014 <layer id="1" name="data1" type="Const">
5015 <data offset="0" size="3211264"/>
5017 <port id="0" precision="FP32">
5025 <layer id="3" name="add" type="Add">
5027 <port id="0" precision="FP32">
5033 <port id="1" precision="FP32">
5041 <port id="3" precision="FP32">
5049 <layer name="output" type="Result" id="2">
5051 <port id="0" precision="FP32">
5061 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
5062 <edge from-layer="1" from-port="0" to-layer="3" to-port="1"/>
5063 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
5067 std::string modelV5 = R"V0G0N(
5068 <net name="Convolution" version="5" precision="FP32" batch="1">
5070 <layer id="0" name="data" precision="FP32" type="Input">
5080 <layer id="2" name="data1" precision="FP32" type="Const">
5090 <custom offset="0" size="3211264"/>
5093 <layer id="3" name="add" precision="FP32" type="Eltwise">
5094 <data operation="sum"/>
5120 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
5121 <edge from-layer="2" from-port="3" to-layer="3" to-port="1"/>
5127 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {3211264}, Layout::C));
5128 weights->allocate();
5129 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
5131 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
5133 auto nGraph = reader.read(model, weights);
5134 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
5136 InferenceEngine::CNNNetReader net_reader;
5137 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
5138 net_reader.SetWeights(tWeights);
5140 compareICNNNetworks(*network, net_reader.getNetwork());
5143 TEST_F(NGraphReaderTests, DISABLED_ReadAddNetwork) {
5144 std::string model = R"V0G0N(
5145 <net name="Add" version="10">
5147 <layer id="0" name="data" type="Parameter">
5149 <port id="0" precision="FP32">
5157 <layer id="1" name="data1" type="Const">
5158 <data offset="0" size="256"/>
5160 <port id="0" precision="FP32">
5167 <layer id="3" name="add" type="Add">
5169 <port id="0" precision="FP32">
5175 <port id="1" precision="FP32">
5182 <port id="3" precision="FP32">
5190 <layer name="output" type="Result" id="2">
5192 <port id="0" precision="FP32">
5202 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
5203 <edge from-layer="1" from-port="0" to-layer="3" to-port="1"/>
5204 <edge from-layer="3" from-port="3" to-layer="2" to-port="0"/>
5208 std::string modelV5 = R"V0G0N(
5209 <net name="Convolution" version="5">
5211 <layer id="0" name="data" type="Input">
5213 <port id="0" precision="FP32">
5221 <layer id="2" name="data1" type="Const">
5223 <port id="3" precision="FP32">
5230 <custom offset="0" size="256"/>
5233 <layer id="3" name="add" type="Eltwise">
5234 <data operation="sum"/>
5236 <port id="0" precision="FP32">
5242 <port id="1" precision="FP32">
5249 <port id="3" precision="FP32">
5259 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
5260 <edge from-layer="2" from-port="3" to-layer="3" to-port="1"/>
5266 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {139392}, Layout::C));
5267 weights->allocate();
5268 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
5270 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
5272 auto nGraph = reader.read(model, weights);
5273 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
5275 InferenceEngine::CNNNetReader net_reader;
5276 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
5277 net_reader.SetWeights(tWeights);
5279 compareICNNNetworks(*network, net_reader.getNetwork());
5282 TEST_F(NGraphReaderTests, ConvBiasFusion) {
5283 std::string model = R"V0G0N(
5284 <net name="ConvBias" version="10">
5286 <layer id="0" name="data" type="Parameter">
5288 <port id="0" precision="FP32">
5296 <layer id="1" name="conv_weights" type="Const">
5297 <data offset="0" size="139392"/>
5299 <port id="1" precision="FP32">
5307 <layer id="2" name="conv" type="Convolution">
5308 <data dilations="1,1" group="1" kernel="11,11" output="96" pads_begin="0,0" pads_end="0,0" strides="4,4"/>
5310 <port id="0" precision="FP32">
5316 <port id="1" precision="FP32">
5324 <port id="3" precision="FP32">
5332 <layer id="4" name="data_add_5451_const" type="Const">
5333 <data offset="139392" size="384"/>
5335 <port id="1" precision="FP32">
5342 <layer id="5" name="Add1_/Fused_Add_/Broadcast/Shape7264_const" type="Const">
5343 <data offset="139776" size="32"/>
5345 <port id="1" precision="I64">
5350 <layer id="6" name="Add1_/Fused_Add_/Broadcast/Axis7265_const" type="Const">
5351 <data offset="139808" size="32"/>
5353 <port id="1" precision="I64">
5358 <layer id="7" name="Add1_/Fused_Add_/Broadcast/" type="Broadcast">
5360 <port id="0" precision="FP32">
5365 <port id="1" precision="I64">
5368 <port id="2" precision="I64">
5373 <port id="3" precision="FP32">
5381 <layer id="3" name="add" type="Add">
5383 <port id="0" precision="FP32">
5389 <port id="1" precision="FP32">
5397 <port id="3" precision="FP32">
5405 <layer id="8" name="output" type="Result">
5407 <port id="0" precision="FP32">
5417 <edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
5418 <edge from-layer="1" from-port="1" to-layer="2" to-port="1"/>
5419 <edge from-layer="4" from-port="1" to-layer="7" to-port="0"/>
5420 <edge from-layer="5" from-port="1" to-layer="7" to-port="1"/>
5421 <edge from-layer="6" from-port="1" to-layer="7" to-port="2"/>
5422 <edge from-layer="7" from-port="3" to-layer="3" to-port="1"/>
5423 <edge from-layer="2" from-port="3" to-layer="3" to-port="0"/>
5424 <edge from-layer="3" from-port="3" to-layer="8" to-port="0"/>
5428 std::string modelV5 = R"V0G0N(
5429 <net name="Convolution" version="5" precision="FP32" batch="1">
5431 <layer id="0" name="data" precision="FP32" type="Input">
5441 <layer id="3" name="add" precision="FP32" type="Convolution">
5442 <data dilations="1,1" group="1" kernel="11,11" output="96" pads_begin="0,0" pads_end="0,0" strides="4,4"/>
5459 <weights offset="0" size="139392" />
5463 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
5469 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {139840}, Layout::C));
5470 weights->allocate();
5471 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
5472 auto nGraph = reader.read(model, weights);
5473 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
5475 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
5477 InferenceEngine::CNNNetReader net_reader;
5478 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
5479 net_reader.SetWeights(tWeights);
5481 compareICNNNetworks(*network, net_reader.getNetwork());
5484 TEST_F(NGraphReaderTests, ConvBiasFusionFP16) {
5485 std::string model = R"V0G0N(
5486 <net name="ConvBias" version="10">
5488 <layer id="0" name="data" type="Parameter">
5490 <port id="0" precision="FP16">
5498 <layer id="1" name="conv_weights" type="Const">
5499 <data offset="0" size="69696"/>
5501 <port id="1" precision="FP16">
5509 <layer id="2" name="conv" type="Convolution">
5510 <data dilations="1,1" group="1" kernel="11,11" output="96" pads_begin="0,0" pads_end="0,0" strides="4,4"/>
5512 <port id="0" precision="FP16">
5518 <port id="1" precision="FP16">
5526 <port id="3" precision="FP16">
5534 <layer id="4" name="data_add_5451_const" type="Const">
5535 <data offset="139392" size="384"/>
5537 <port id="1" precision="FP16">
5544 <layer id="5" name="Add1_/Fused_Add_/Broadcast/Shape7264_const" type="Const">
5545 <data offset="139776" size="32"/>
5547 <port id="1" precision="I64">
5552 <layer id="6" name="Add1_/Fused_Add_/Broadcast/Axis7265_const" type="Const">
5553 <data offset="139808" size="32"/>
5555 <port id="1" precision="I64">
5560 <layer id="7" name="Add1_/Fused_Add_/Broadcast/" type="Broadcast">
5562 <port id="0" precision="FP16">
5567 <port id="1" precision="I64">
5570 <port id="2" precision="I64">
5575 <port id="3" precision="FP16">
5583 <layer id="3" name="add" type="Add">
5585 <port id="0" precision="FP16">
5591 <port id="1" precision="FP16">
5599 <port id="3" precision="FP16">
5607 <layer id="8" name="output" type="Result">
5609 <port id="0" precision="FP16">
5619 <edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
5620 <edge from-layer="1" from-port="1" to-layer="2" to-port="1"/>
5621 <edge from-layer="4" from-port="1" to-layer="7" to-port="0"/>
5622 <edge from-layer="5" from-port="1" to-layer="7" to-port="1"/>
5623 <edge from-layer="6" from-port="1" to-layer="7" to-port="2"/>
5624 <edge from-layer="7" from-port="3" to-layer="3" to-port="1"/>
5625 <edge from-layer="2" from-port="3" to-layer="3" to-port="0"/>
5626 <edge from-layer="3" from-port="3" to-layer="8" to-port="0"/>
5630 std::string modelV5 = R"V0G0N(
5631 <net name="Convolution" version="5" precision="FP16" batch="1">
5633 <layer id="0" name="data" precision="FP16" type="Input">
5643 <layer id="3" name="add" precision="FP16" type="Convolution">
5644 <data dilations="1,1" group="1" kernel="11,11" output="96" pads_begin="0,0" pads_end="0,0" strides="4,4"/>
5661 <weights offset="0" size="69696" />
5665 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
5671 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {139840}, Layout::C));
5672 weights->allocate();
5673 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
5674 auto nGraph = reader.read(model, weights);
5675 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
5677 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
5679 InferenceEngine::CNNNetReader net_reader;
5680 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
5681 net_reader.SetWeights(tWeights);
5683 compareICNNNetworks(*network, net_reader.getNetwork());
5686 TEST_F(NGraphReaderTests, DISABLED_MatMulBiasFusion) {
5687 std::string model = R"V0G0N(
5688 <net name="MatMulBias" version="10">
5690 <layer id="0" name="data" type="Parameter">
5692 <port id="0" precision="FP32">
5698 <layer id="1" name="weights" type="Const">
5699 <data offset="0" size="8192000"/>
5701 <port id="1" precision="FP32">
5707 <layer id="2" name="fc" type="MatMul">
5709 <port id="0" precision="FP32">
5713 <port id="1" precision="FP32">
5719 <port id="2" precision="FP32">
5725 <layer id="3" name="b_input" type="Const">
5726 <data offset="8192000" size="4000"/>
5728 <port id="1" precision="FP32">
5733 <layer id="4" name="b_shape" type="Const">
5734 <data offset="8196000" size="8"/>
5736 <port id="1" precision="I64">
5741 <layer id="5" name="b_axis" type="Const">
5742 <data offset="8196008" size="16"/>
5744 <port id="1" precision="I64">
5749 <layer id="6" name="broadcast" type="Broadcast">
5751 <port id="0" precision="FP32">
5754 <port id="1" precision="I64">
5757 <port id="2" precision="I64">
5762 <port id="3" precision="FP32">
5768 <layer id="7" name="add" type="Add">
5770 <port id="0" precision="FP32">
5774 <port id="1" precision="FP32">
5780 <port id="2" precision="FP32">
5786 <layer id="8" name="output" type="Result">
5788 <port id="0" precision="FP32">
5796 <edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
5797 <edge from-layer="1" from-port="1" to-layer="2" to-port="1"/>
5798 <edge from-layer="3" from-port="1" to-layer="6" to-port="0"/>
5799 <edge from-layer="4" from-port="1" to-layer="6" to-port="1"/>
5800 <edge from-layer="5" from-port="1" to-layer="6" to-port="2"/>
5801 <edge from-layer="6" from-port="3" to-layer="7" to-port="1"/>
5802 <edge from-layer="2" from-port="2" to-layer="7" to-port="0"/>
5803 <edge from-layer="7" from-port="2" to-layer="8" to-port="0"/>
5807 std::string modelV5 = R"V0G0N(
5808 <net name="MatMulBias" version="5" precision="FP32" batch="1">
5810 <layer id="0" name="data" precision="FP32" type="Input">
5818 <layer id="3" name="fc" precision="FP32" type="FullyConnected">
5819 <data alpha="0" beta="0" out-size="1000"/>
5832 <weights offset="0" size="8192000"/>
5833 <biases offset="8192000" size="4000"/>
5837 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
5843 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {8196024}, Layout::C));
5844 weights->allocate();
5845 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
5846 auto nGraph = reader.read(model, weights);
5847 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
5849 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
5851 InferenceEngine::CNNNetReader net_reader;
5852 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
5853 net_reader.SetWeights(tWeights);
5855 compareICNNNetworks(*network, net_reader.getNetwork());
5858 TEST_F(NGraphReaderTests, MatMulBiasFusionNoBroadcast) {
5859 std::string model = R"V0G0N(
5860 <net name="MatMulBias" version="10">
5862 <layer id="0" name="data" type="Parameter">
5864 <port id="0" precision="FP32">
5870 <layer id="1" name="weights" type="Const">
5871 <data offset="0" size="8192000"/>
5873 <port id="1" precision="FP32">
5879 <layer id="2" name="fc" type="MatMul">
5881 <port id="0" precision="FP32">
5885 <port id="1" precision="FP32">
5891 <port id="2" precision="FP32">
5897 <layer id="3" name="b_input" type="Const">
5898 <data offset="8192000" size="4000"/>
5900 <port id="1" precision="FP32">
5906 <layer id="7" name="add" type="Add">
5908 <port id="0" precision="FP32">
5912 <port id="1" precision="FP32">
5918 <port id="2" precision="FP32">
5924 <layer id="8" name="output" type="Result">
5926 <port id="0" precision="FP32">
5934 <edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
5935 <edge from-layer="1" from-port="1" to-layer="2" to-port="1"/>
5936 <edge from-layer="3" from-port="1" to-layer="7" to-port="1"/>
5937 <edge from-layer="2" from-port="2" to-layer="7" to-port="0"/>
5938 <edge from-layer="7" from-port="2" to-layer="8" to-port="0"/>
5942 std::string modelV5 = R"V0G0N(
5943 <net name="MatMulBias" version="5" precision="FP32" batch="1">
5945 <layer id="0" name="data" precision="FP32" type="Input">
5953 <layer id="3" name="add" precision="FP32" type="FullyConnected">
5954 <data alpha="0" beta="0" out-size="1000"/>
5967 <weights offset="0" size="8192000"/>
5968 <biases offset="8192000" size="4000"/>
5972 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
5978 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {8196024}, Layout::C));
5979 weights->allocate();
5980 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
5981 auto nGraph = reader.read(model, weights);
5982 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
5984 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
5986 InferenceEngine::CNNNetReader net_reader;
5987 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
5988 net_reader.SetWeights(tWeights);
5990 compareICNNNetworks(*network, net_reader.getNetwork());
5993 TEST_F(NGraphReaderTests, ConvertMulAddToScaleShift) {
5994 std::string model = R"V0G0N(
5995 <net name="Multiply" version="10">
5997 <layer id="0" name="data" type="Parameter">
5999 <port id="0" precision="FP32">
6007 <layer id="14" name="broadcast1_data" type="Const">
6008 <data offset="0" size="256"/>
6010 <port id="1" precision="FP32">
6017 <layer id="15" name="broadcast1_shape" type="Const">
6018 <data offset="256" size="32"/>
6020 <port id="1" precision="I64">
6025 <layer id="16" name="broadcast1_axis" type="Const">
6026 <data offset="288" size="32"/>
6028 <port id="1" precision="I64">
6033 <layer id="17" name="broadcast_1" type="Broadcast">
6035 <port id="0" precision="FP32">
6040 <port id="1" precision="I64">
6043 <port id="2" precision="I64">
6048 <port id="3" precision="FP32">
6056 <layer id="3" name="mul" type="Multiply">
6058 <port id="0" precision="FP32">
6064 <port id="1" precision="FP32">
6072 <port id="3" precision="FP32">
6080 <layer id="24" name="broadcast2_data" type="Const">
6081 <data offset="320" size="256"/>
6083 <port id="1" precision="FP32">
6090 <layer id="25" name="broadcast2_shape" type="Const">
6091 <data offset="576" size="32"/>
6093 <port id="1" precision="I64">
6098 <layer id="26" name="broadcast2_axis" type="Const">
6099 <data offset="608" size="32"/>
6101 <port id="1" precision="I64">
6106 <layer id="27" name="broadcast_2" type="Broadcast">
6108 <port id="0" precision="FP32">
6113 <port id="1" precision="I64">
6116 <port id="2" precision="I64">
6121 <port id="3" precision="FP32">
6129 <layer id="5" name="add" type="Add">
6131 <port id="0" precision="FP32">
6137 <port id="1" precision="FP32">
6145 <port id="3" precision="FP32">
6153 <layer id="6" name="output" type="Result">
6155 <port id="0" precision="FP32">
6165 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
6166 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
6167 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
6168 <edge from-layer="24" from-port="1" to-layer="27" to-port="0"/>
6169 <edge from-layer="25" from-port="1" to-layer="27" to-port="1"/>
6170 <edge from-layer="26" from-port="1" to-layer="27" to-port="2"/>
6171 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
6172 <edge from-layer="17" from-port="3" to-layer="3" to-port="1"/>
6173 <edge from-layer="3" from-port="3" to-layer="5" to-port="0"/>
6174 <edge from-layer="27" from-port="3" to-layer="5" to-port="1"/>
6175 <edge from-layer="5" from-port="3" to-layer="6" to-port="0"/>
6179 std::string modelV5 = R"V0G0N(
6180 <net name="Convolution" version="5" precision="FP32" batch="1">
6182 <layer id="0" name="data" precision="FP32" type="Input">
6192 <layer id="3" name="add" precision="FP32" type="ScaleShift">
6209 <weights offset="0" size="256"/>
6210 <biases offset="256" size="256"/>
6214 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
6220 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
6221 weights->allocate();
6222 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
6224 // Set shape constant for broadcast1
6225 int64_t * broadcast1_shape = (int64_t *)((int8_t *) weights->buffer() + 256);
6226 broadcast1_shape[0] = 1;
6227 broadcast1_shape[1] = 64;
6228 broadcast1_shape[2] = 112;
6229 broadcast1_shape[3] = 112;
6231 // Set shape constant for broadcast1
6232 int64_t * broadcast2_shape = (int64_t *)((int8_t *) weights->buffer() + 576);
6233 broadcast2_shape[0] = 1;
6234 broadcast2_shape[1] = 64;
6235 broadcast2_shape[2] = 112;
6236 broadcast2_shape[3] = 112;
6238 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
6240 auto nGraph = reader.read(model, weights);
6241 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
6243 InferenceEngine::CNNNetReader net_reader;
6244 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
6245 net_reader.SetWeights(tWeights);
6247 compareICNNNetworks(*network, net_reader.getNetwork());
6250 TEST_F(NGraphReaderTests, ConvertMulAddToPower) {
6251 std::string model = R"V0G0N(
6252 <net name="Multiply" version="10">
6254 <layer id="0" name="data" type="Parameter">
6256 <port id="0" precision="FP32">
6264 <layer id="14" name="broadcast1_data" type="Const">
6265 <data offset="0" size="4"/>
6267 <port id="1" precision="FP32">
6274 <layer id="15" name="broadcast1_shape" type="Const">
6275 <data offset="4" size="32"/>
6277 <port id="1" precision="I64">
6282 <layer id="16" name="broadcast1_axis" type="Const">
6283 <data offset="36" size="32"/>
6285 <port id="1" precision="I64">
6290 <layer id="17" name="broadcast_1" type="Broadcast">
6292 <port id="0" precision="FP32">
6297 <port id="1" precision="I64">
6300 <port id="2" precision="I64">
6305 <port id="3" precision="FP32">
6313 <layer id="3" name="mul" type="Multiply">
6315 <port id="0" precision="FP32">
6321 <port id="1" precision="FP32">
6329 <port id="3" precision="FP32">
6337 <layer id="24" name="broadcast2_data" type="Const">
6338 <data offset="68" size="4"/>
6340 <port id="1" precision="FP32">
6347 <layer id="25" name="broadcast2_shape" type="Const">
6348 <data offset="72" size="32"/>
6350 <port id="1" precision="I64">
6355 <layer id="26" name="broadcast2_axis" type="Const">
6356 <data offset="104" size="32"/>
6358 <port id="1" precision="I64">
6363 <layer id="27" name="broadcast_2" type="Broadcast">
6365 <port id="0" precision="FP32">
6370 <port id="1" precision="I64">
6373 <port id="2" precision="I64">
6378 <port id="3" precision="FP32">
6386 <layer id="5" name="add" type="Add">
6388 <port id="0" precision="FP32">
6394 <port id="1" precision="FP32">
6402 <port id="3" precision="FP32">
6410 <layer id="6" name="output" type="Result">
6412 <port id="0" precision="FP32">
6422 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
6423 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
6424 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
6425 <edge from-layer="24" from-port="1" to-layer="27" to-port="0"/>
6426 <edge from-layer="25" from-port="1" to-layer="27" to-port="1"/>
6427 <edge from-layer="26" from-port="1" to-layer="27" to-port="2"/>
6428 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
6429 <edge from-layer="17" from-port="3" to-layer="3" to-port="1"/>
6430 <edge from-layer="3" from-port="3" to-layer="5" to-port="0"/>
6431 <edge from-layer="27" from-port="3" to-layer="5" to-port="1"/>
6432 <edge from-layer="5" from-port="3" to-layer="6" to-port="0"/>
6436 std::string modelV5 = R"V0G0N(
6437 <net name="Convolution" version="5" precision="FP32" batch="1">
6439 <layer id="0" name="data" precision="FP32" type="Input">
6449 <layer id="3" name="add" precision="FP32" type="Power">
6450 <data power="1.000000" scale="127.500000" shift="0.820000"/>
6470 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
6476 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
6477 weights->allocate();
6478 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
6480 // Set shape constant for broadcast1
6481 int64_t * broadcast1_shape = (int64_t *)((int8_t *) weights->buffer() + 4);
6482 broadcast1_shape[0] = 1;
6483 broadcast1_shape[1] = 64;
6484 broadcast1_shape[2] = 112;
6485 broadcast1_shape[3] = 112;
6487 // Set shape constant for broadcast1
6488 int64_t * broadcast2_shape = (int64_t *)((int8_t *) weights->buffer() + 72);
6489 broadcast2_shape[0] = 1;
6490 broadcast2_shape[1] = 64;
6491 broadcast2_shape[2] = 112;
6492 broadcast2_shape[3] = 112;
6494 // Set scale/shift constants
6495 float* scale = (float *)((int8_t *) weights->buffer() + 0);
6498 float* shift= (float *)((int8_t *) weights->buffer() + 68);
6501 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
6503 auto nGraph = reader.read(model, weights);
6505 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
6507 InferenceEngine::CNNNetReader net_reader;
6508 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
6509 net_reader.SetWeights(tWeights);
6511 compareICNNNetworks(*network, net_reader.getNetwork());
6514 TEST_F(NGraphReaderTests, ConvertMulToPower) {
6515 std::string model = R"V0G0N(
6516 <net name="Multiply" version="10">
6518 <layer id="0" name="data" type="Parameter">
6520 <port id="0" precision="FP32">
6528 <layer id="14" name="broadcast1_data" type="Const">
6529 <data offset="0" size="4"/>
6531 <port id="1" precision="FP32">
6538 <layer id="15" name="broadcast1_shape" type="Const">
6539 <data offset="4" size="32"/>
6541 <port id="1" precision="I64">
6546 <layer id="16" name="broadcast1_axis" type="Const">
6547 <data offset="36" size="32"/>
6549 <port id="1" precision="I64">
6554 <layer id="17" name="broadcast_1" type="Broadcast">
6556 <port id="0" precision="FP32">
6561 <port id="1" precision="I64">
6564 <port id="2" precision="I64">
6569 <port id="3" precision="FP32">
6577 <layer id="3" name="mul" type="Multiply">
6579 <port id="0" precision="FP32">
6585 <port id="1" precision="FP32">
6593 <port id="3" precision="FP32">
6601 <layer id="6" name="output" type="Result">
6603 <port id="0" precision="FP32">
6613 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
6614 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
6615 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
6616 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
6617 <edge from-layer="17" from-port="3" to-layer="3" to-port="1"/>
6618 <edge from-layer="3" from-port="3" to-layer="6" to-port="0"/>
6622 std::string modelV5 = R"V0G0N(
6623 <net name="Convolution" version="5" precision="FP32" batch="1">
6625 <layer id="0" name="data" precision="FP32" type="Input">
6635 <layer id="3" name="mul" precision="FP32" type="Power">
6636 <data power="1.000000" scale="127.500000" shift="0.000000"/>
6656 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
6662 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
6663 weights->allocate();
6664 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
6666 // Set shape constant for broadcast1
6667 int64_t *broadcast1_shape = (int64_t *) ((int8_t *) weights->buffer() + 4);
6668 broadcast1_shape[0] = 1;
6669 broadcast1_shape[1] = 64;
6670 broadcast1_shape[2] = 112;
6671 broadcast1_shape[3] = 112;
6673 // Set scale/shift constants
6674 float *scale = (float *) ((int8_t *) weights->buffer() + 0);
6677 float *shift = (float *) ((int8_t *) weights->buffer() + 68);
6680 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
6682 auto nGraph = reader.read(model, weights);
6684 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
6686 InferenceEngine::CNNNetReader net_reader;
6687 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
6688 net_reader.SetWeights(tWeights);
6690 compareICNNNetworks(*network, net_reader.getNetwork());
6693 TEST_F(NGraphReaderTests, ConvertAddToPower) {
6694 std::string model = R"V0G0N(
6695 <net name="Multiply" version="10">
6697 <layer id="0" name="data" type="Parameter">
6699 <port id="0" precision="FP32">
6707 <layer id="14" name="broadcast1_data" type="Const">
6708 <data offset="0" size="4"/>
6710 <port id="1" precision="FP32">
6717 <layer id="15" name="broadcast1_shape" type="Const">
6718 <data offset="4" size="32"/>
6720 <port id="1" precision="I64">
6725 <layer id="16" name="broadcast1_axis" type="Const">
6726 <data offset="36" size="32"/>
6728 <port id="1" precision="I64">
6733 <layer id="17" name="broadcast_1" type="Broadcast">
6735 <port id="0" precision="FP32">
6740 <port id="1" precision="I64">
6743 <port id="2" precision="I64">
6748 <port id="3" precision="FP32">
6756 <layer id="3" name="add" type="Add">
6758 <port id="0" precision="FP32">
6764 <port id="1" precision="FP32">
6772 <port id="3" precision="FP32">
6780 <layer id="6" name="output" type="Result">
6782 <port id="0" precision="FP32">
6792 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
6793 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
6794 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
6795 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
6796 <edge from-layer="17" from-port="3" to-layer="3" to-port="1"/>
6797 <edge from-layer="3" from-port="3" to-layer="6" to-port="0"/>
6801 std::string modelV5 = R"V0G0N(
6802 <net name="Convolution" version="5" precision="FP32" batch="1">
6804 <layer id="0" name="data" precision="FP32" type="Input">
6814 <layer id="3" name="add" precision="FP32" type="Power">
6815 <data power="1.000000" scale="1.000000" shift="1.000000"/>
6835 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
6841 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
6842 weights->allocate();
6843 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
6845 // Set shape constant for broadcast1
6846 int64_t *broadcast1_shape = (int64_t *) ((int8_t *) weights->buffer() + 4);
6847 broadcast1_shape[0] = 1;
6848 broadcast1_shape[1] = 64;
6849 broadcast1_shape[2] = 112;
6850 broadcast1_shape[3] = 112;
6852 // Set scale/shift constants
6853 float *scale = (float *) ((int8_t *) weights->buffer() + 0);
6856 float *shift = (float *) ((int8_t *) weights->buffer() + 68);
6859 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
6861 auto nGraph = reader.read(model, weights);
6863 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
6865 InferenceEngine::CNNNetReader net_reader;
6866 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
6867 net_reader.SetWeights(tWeights);
6869 compareICNNNetworks(*network, net_reader.getNetwork());
6872 TEST_F(NGraphReaderTests, ConvertMulToScaleShift) {
6873 std::string model = R"V0G0N(
6874 <net name="Multiply" version="10">
6876 <layer id="0" name="data" type="Parameter">
6878 <port id="0" precision="FP32">
6886 <layer id="14" name="broadcast1_data" type="Const">
6887 <data offset="0" size="256"/>
6889 <port id="1" precision="FP32">
6896 <layer id="15" name="broadcast1_shape" type="Const">
6897 <data offset="256" size="32"/>
6899 <port id="1" precision="I64">
6904 <layer id="16" name="broadcast1_axis" type="Const">
6905 <data offset="288" size="32"/>
6907 <port id="1" precision="I64">
6912 <layer id="17" name="broadcast_1" type="Broadcast">
6914 <port id="0" precision="FP32">
6919 <port id="1" precision="I64">
6922 <port id="2" precision="I64">
6927 <port id="3" precision="FP32">
6935 <layer id="3" name="mul" type="Multiply">
6937 <port id="0" precision="FP32">
6943 <port id="1" precision="FP32">
6951 <port id="3" precision="FP32">
6959 <layer id="6" name="output" type="Result">
6961 <port id="0" precision="FP32">
6971 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
6972 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
6973 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
6974 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
6975 <edge from-layer="17" from-port="3" to-layer="3" to-port="1"/>
6976 <edge from-layer="3" from-port="3" to-layer="6" to-port="0"/>
6980 std::string modelV5 = R"V0G0N(
6981 <net name="Convolution" version="5" precision="FP32" batch="1">
6983 <layer id="0" name="data" precision="FP32" type="Input">
6993 <layer id="3" name="mul" precision="FP32" type="ScaleShift">
7010 <weights offset="0" size="256"/>
7011 <biases offset="256" size="256"/>
7015 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
7021 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
7022 weights->allocate();
7023 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
7025 // Set shape constant for broadcast1
7026 int64_t * broadcast1_shape = (int64_t *)((int8_t *) weights->buffer() + 256);
7027 broadcast1_shape[0] = 1;
7028 broadcast1_shape[1] = 64;
7029 broadcast1_shape[2] = 112;
7030 broadcast1_shape[3] = 112;
7032 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
7034 auto nGraph = reader.read(model, weights);
7036 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
7038 InferenceEngine::CNNNetReader net_reader;
7039 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
7040 net_reader.SetWeights(tWeights);
7042 compareICNNNetworks(*network, net_reader.getNetwork());
7045 TEST_F(NGraphReaderTests, ConvertAddToScaleShift) {
7046 std::string model = R"V0G0N(
7047 <net name="Multiply" version="10">
7049 <layer id="0" name="data" type="Parameter">
7051 <port id="0" precision="FP32">
7059 <layer id="14" name="broadcast1_data" type="Const">
7060 <data offset="0" size="256"/>
7062 <port id="1" precision="FP32">
7069 <layer id="15" name="broadcast1_shape" type="Const">
7070 <data offset="256" size="32"/>
7072 <port id="1" precision="I64">
7077 <layer id="16" name="broadcast1_axis" type="Const">
7078 <data offset="288" size="32"/>
7080 <port id="1" precision="I64">
7085 <layer id="17" name="broadcast_1" type="Broadcast">
7087 <port id="0" precision="FP32">
7092 <port id="1" precision="I64">
7095 <port id="2" precision="I64">
7100 <port id="3" precision="FP32">
7108 <layer id="3" name="add" type="Add">
7110 <port id="0" precision="FP32">
7116 <port id="1" precision="FP32">
7124 <port id="3" precision="FP32">
7132 <layer id="6" name="output" type="Result">
7134 <port id="0" precision="FP32">
7144 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
7145 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
7146 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
7147 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
7148 <edge from-layer="17" from-port="3" to-layer="3" to-port="1"/>
7149 <edge from-layer="3" from-port="3" to-layer="6" to-port="0"/>
7153 std::string modelV5 = R"V0G0N(
7154 <net name="Convolution" version="5" precision="FP32" batch="1">
7156 <layer id="0" name="data" precision="FP32" type="Input">
7166 <layer id="3" name="add" precision="FP32" type="ScaleShift">
7183 <weights offset="0" size="256"/>
7184 <biases offset="256" size="256"/>
7188 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
7194 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
7195 weights->allocate();
7196 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
7198 // Set shape constant for broadcast1
7199 int64_t * broadcast1_shape = (int64_t *)((int8_t *) weights->buffer() + 256);
7200 broadcast1_shape[0] = 1;
7201 broadcast1_shape[1] = 64;
7202 broadcast1_shape[2] = 112;
7203 broadcast1_shape[3] = 112;
7205 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
7207 auto nGraph = reader.read(model, weights);
7209 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
7211 InferenceEngine::CNNNetReader net_reader;
7212 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
7213 net_reader.SetWeights(tWeights);
7215 compareICNNNetworks(*network, net_reader.getNetwork());
7218 TEST_F(NGraphReaderTests, ConvertMulToEltwise) {
7219 std::string model = R"V0G0N(
7220 <net name="Multiply" version="10">
7222 <layer id="0" name="data" type="Parameter">
7224 <port id="0" precision="FP32">
7232 <layer id="14" name="broadcast1_data" type="Const">
7233 <data offset="0" size="448"/>
7235 <port id="1" precision="FP32">
7241 <layer id="15" name="broadcast1_shape" type="Const">
7242 <data offset="256" size="32"/>
7244 <port id="1" precision="I64">
7249 <layer id="16" name="broadcast1_axis" type="Const">
7250 <data offset="288" size="32"/>
7252 <port id="1" precision="I64">
7257 <layer id="17" name="broadcast_1" type="Broadcast">
7259 <port id="0" precision="FP32">
7263 <port id="1" precision="I64">
7266 <port id="2" precision="I64">
7271 <port id="3" precision="FP32">
7279 <layer id="3" name="mul" type="Multiply">
7281 <port id="0" precision="FP32">
7287 <port id="1" precision="FP32">
7295 <port id="3" precision="FP32">
7303 <layer id="6" name="output" type="Result">
7305 <port id="0" precision="FP32">
7315 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
7316 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
7317 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
7318 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
7319 <edge from-layer="17" from-port="3" to-layer="3" to-port="1"/>
7320 <edge from-layer="3" from-port="3" to-layer="6" to-port="0"/>
7324 std::string modelV5 = R"V0G0N(
7325 <net name="Convolution" version="5" precision="FP32" batch="1">
7327 <layer id="0" name="data" precision="FP32" type="Input">
7337 <layer id="14" name="broadcast1_data" precision="FP32" type="Const">
7338 <data offset="0" size="448"/>
7346 <layer id="3" name="mul" precision="FP32" type="Eltwise">
7347 <data operation="prod" />
7368 <weights offset="0" size="256"/>
7369 <biases offset="256" size="256"/>
7373 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
7374 <edge from-layer="14" from-port="1" to-layer="3" to-port="1"/>
7380 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
7381 weights->allocate();
7382 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
7384 // Set shape constant for broadcast1
7385 int64_t * broadcast1_shape = (int64_t *)((int8_t *) weights->buffer() + 256);
7386 broadcast1_shape[0] = 1;
7387 broadcast1_shape[1] = 64;
7388 broadcast1_shape[2] = 112;
7389 broadcast1_shape[3] = 112;
7391 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
7393 auto nGraph = reader.read(model, weights);
7395 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
7397 InferenceEngine::CNNNetReader net_reader;
7398 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
7399 net_reader.SetWeights(tWeights);
7401 compareICNNNetworks(*network, net_reader.getNetwork());
7404 TEST_F(NGraphReaderTests, ConvertAddToEltwise) {
7405 std::string model = R"V0G0N(
7406 <net name="Multiply" version="10">
7408 <layer id="0" name="data" type="Parameter">
7410 <port id="0" precision="FP32">
7418 <layer id="14" name="broadcast1_data" type="Const">
7419 <data offset="0" size="448"/>
7421 <port id="1" precision="FP32">
7427 <layer id="15" name="broadcast1_shape" type="Const">
7428 <data offset="256" size="32"/>
7430 <port id="1" precision="I64">
7435 <layer id="16" name="broadcast1_axis" type="Const">
7436 <data offset="288" size="32"/>
7438 <port id="1" precision="I64">
7443 <layer id="17" name="broadcast_1" type="Broadcast">
7445 <port id="0" precision="FP32">
7449 <port id="1" precision="I64">
7452 <port id="2" precision="I64">
7457 <port id="3" precision="FP32">
7465 <layer id="3" name="add" type="Add">
7467 <port id="0" precision="FP32">
7473 <port id="1" precision="FP32">
7481 <port id="3" precision="FP32">
7489 <layer id="6" name="output" type="Result">
7491 <port id="0" precision="FP32">
7501 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
7502 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
7503 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
7504 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
7505 <edge from-layer="17" from-port="3" to-layer="3" to-port="1"/>
7506 <edge from-layer="3" from-port="3" to-layer="6" to-port="0"/>
7510 std::string modelV5 = R"V0G0N(
7511 <net name="Convolution" version="5" precision="FP32" batch="1">
7513 <layer id="0" name="data" precision="FP32" type="Input">
7523 <layer id="14" name="broadcast1_data" precision="FP32" type="Const">
7524 <data offset="0" size="448"/>
7532 <layer id="3" name="add" precision="FP32" type="Eltwise">
7533 <data operation="sum" />
7554 <weights offset="0" size="256"/>
7555 <biases offset="256" size="256"/>
7559 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
7560 <edge from-layer="14" from-port="1" to-layer="3" to-port="1"/>
7566 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
7567 weights->allocate();
7568 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
7570 // Set shape constant for broadcast1
7571 int64_t * broadcast1_shape = (int64_t *)((int8_t *) weights->buffer() + 256);
7572 broadcast1_shape[0] = 1;
7573 broadcast1_shape[1] = 64;
7574 broadcast1_shape[2] = 112;
7575 broadcast1_shape[3] = 112;
7577 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
7579 auto nGraph = reader.read(model, weights);
7581 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
7583 InferenceEngine::CNNNetReader net_reader;
7584 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
7585 net_reader.SetWeights(tWeights);
7587 compareICNNNetworks(*network, net_reader.getNetwork());
7590 TEST_F(NGraphReaderTests, ConvertBroadcastToTiles1) {
7591 std::string model = R"V0G0N(
7592 <net name="Multiply" version="10">
7594 <layer id="14" name="data" type="Parameter">
7596 <port id="1" precision="FP32">
7602 <layer id="15" name="broadcast1_shape" type="Const">
7603 <data offset="256" size="32"/>
7605 <port id="1" precision="I64">
7610 <layer id="16" name="broadcast1_axis" type="Const">
7611 <data offset="288" size="32"/>
7613 <port id="1" precision="I64">
7618 <layer id="17" name="broadcast_1" type="Broadcast">
7620 <port id="0" precision="FP32">
7624 <port id="1" precision="I64">
7627 <port id="2" precision="I64">
7632 <port id="3" precision="FP32">
7640 <layer id="6" name="output" type="Result">
7642 <port id="0" precision="FP32">
7652 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
7653 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
7654 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
7655 <edge from-layer="17" from-port="3" to-layer="6" to-port="0"/>
7659 std::string modelV5 = R"V0G0N(
7660 <net name="Convolution" version="5" precision="FP32" batch="1">
7662 <layer id="0" name="data" precision="FP32" type="Input">
7670 <layer id="1" name="Constant_107" precision="I64" type="Const">
7677 <custom offset="0" size="32"/>
7680 <layer id="2" name="DynReshape_108" precision="FP32" type="Reshape">
7699 <layer id="3" name="broadcast_1" precision="FP32" type="Tile">
7700 <data axis="3" tiles="112"/>
7718 <layer id="4" name="broadcast_1_3" precision="FP32" type="Tile">
7719 <data axis="1" tiles="64"/>
7739 <edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
7740 <edge from-layer="1" from-port="0" to-layer="2" to-port="1"/>
7741 <edge from-layer="2" from-port="3" to-layer="3" to-port="0"/>
7742 <edge from-layer="3" from-port="3" to-layer="4" to-port="0"/>
7748 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
7749 weights->allocate();
7750 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
7752 // Set shape constant for broadcast1
7753 int64_t * broadcast1_shape = (int64_t *)((int8_t *) weights->buffer() + 256);
7754 broadcast1_shape[0] = 1;
7755 broadcast1_shape[1] = 64;
7756 broadcast1_shape[2] = 112;
7757 broadcast1_shape[3] = 112;
7759 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
7761 auto nGraph = reader.read(model, weights);
7763 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
7765 // std::vector<std::shared_ptr<ngraph::Function>> g2{nGraph};
7766 // ngraph::pass::VisualizeTree("after.png").run_on_module(g2);
7768 InferenceEngine::CNNNetReader net_reader;
7769 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
7770 net_reader.SetWeights(tWeights);
7772 compareICNNNetworks(*network, net_reader.getNetwork());
7775 TEST_F(NGraphReaderTests, ConvertBroadcastToTiles2) {
7776 std::string model = R"V0G0N(
7777 <net name="Multiply" version="10">
7779 <layer id="14" name="data" type="Parameter">
7781 <port id="1" precision="FP32">
7786 <layer id="15" name="broadcast1_shape" type="Const">
7787 <data offset="256" size="32"/>
7789 <port id="1" precision="I64">
7794 <layer id="16" name="broadcast1_axis" type="Const">
7795 <data offset="288" size="32"/>
7797 <port id="1" precision="I64">
7802 <layer id="17" name="broadcast_1" type="Broadcast">
7804 <port id="0" precision="FP32">
7807 <port id="1" precision="I64">
7810 <port id="2" precision="I64">
7815 <port id="3" precision="FP32">
7823 <layer id="6" name="output" type="Result">
7825 <port id="0" precision="FP32">
7835 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
7836 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
7837 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
7838 <edge from-layer="17" from-port="3" to-layer="6" to-port="0"/>
7842 std::string modelV5 = R"V0G0N(
7843 <net name="Convolution" version="5" precision="FP32" batch="1">
7845 <layer id="0" name="data" precision="FP32" type="Input">
7852 <layer id="1" name="Constant_107" precision="I64" type="Const">
7859 <custom offset="0" size="32"/>
7862 <layer id="2" name="DynReshape_108" precision="FP32" type="Reshape">
7880 <layer id="3" name="broadcast_1" precision="FP32" type="Tile">
7881 <data axis="3" tiles="112"/>
7899 <layer id="4" name="broadcast_1_3" precision="FP32" type="Tile">
7900 <data axis="2" tiles="112"/>
7918 <layer id="5" name="broadcast_1_3_2" precision="FP32" type="Tile">
7919 <data axis="1" tiles="64"/>
7939 <edge from-layer="0" from-port="0" to-layer="2" to-port="0"/>
7940 <edge from-layer="1" from-port="0" to-layer="2" to-port="1"/>
7941 <edge from-layer="2" from-port="3" to-layer="3" to-port="0"/>
7942 <edge from-layer="3" from-port="3" to-layer="4" to-port="0"/>
7943 <edge from-layer="4" from-port="3" to-layer="5" to-port="0"/>
7949 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
7950 weights->allocate();
7951 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
7953 // Set shape constant for broadcast1
7954 int64_t * broadcast1_shape = (int64_t *)((int8_t *) weights->buffer() + 256);
7955 broadcast1_shape[0] = 1;
7956 broadcast1_shape[1] = 64;
7957 broadcast1_shape[2] = 112;
7958 broadcast1_shape[3] = 112;
7960 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
7962 auto nGraph = reader.read(model, weights);
7964 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
7966 InferenceEngine::CNNNetReader net_reader;
7967 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
7968 net_reader.SetWeights(tWeights);
7970 compareICNNNetworks(*network, net_reader.getNetwork());
7973 TEST_F(NGraphReaderTests, ConvertBroadcastToTiles3) {
7974 std::string model = R"V0G0N(
7975 <net name="Multiply" version="10">
7977 <layer id="14" name="data" type="Parameter">
7979 <port id="1" precision="FP32">
7987 <layer id="15" name="broadcast1_shape" type="Const">
7988 <data offset="256" size="32"/>
7990 <port id="1" precision="I64">
7995 <layer id="16" name="broadcast1_axis" type="Const">
7996 <data offset="288" size="32"/>
7998 <port id="1" precision="I64">
8003 <layer id="17" name="broadcast_1" type="Broadcast">
8005 <port id="0" precision="FP32">
8011 <port id="1" precision="I64">
8014 <port id="2" precision="I64">
8019 <port id="3" precision="FP32">
8027 <layer id="6" name="output" type="Result">
8029 <port id="0" precision="FP32">
8039 <edge from-layer="14" from-port="1" to-layer="17" to-port="0"/>
8040 <edge from-layer="15" from-port="1" to-layer="17" to-port="1"/>
8041 <edge from-layer="16" from-port="1" to-layer="17" to-port="2"/>
8042 <edge from-layer="17" from-port="3" to-layer="6" to-port="0"/>
8046 std::string modelV5 = R"V0G0N(
8047 <net name="Convolution" version="5" precision="FP32" batch="1">
8049 <layer id="0" name="data" precision="FP32" type="Input">
8059 <layer id="3" name="broadcast_1" precision="FP32" type="Tile">
8060 <data axis="2" tiles="112"/>
8080 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
8086 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
8087 weights->allocate();
8088 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
8090 // Set shape constant for broadcast1
8091 int64_t * broadcast1_shape = (int64_t *)((int8_t *) weights->buffer() + 256);
8092 broadcast1_shape[0] = 1;
8093 broadcast1_shape[1] = 64;
8094 broadcast1_shape[2] = 112;
8095 broadcast1_shape[3] = 112;
8097 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
8099 auto nGraph = reader.read(model, weights);
8101 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
8103 // std::vector<std::shared_ptr<ngraph::Function>> g2{nGraph};
8104 // ngraph::pass::VisualizeTree("after.png").run_on_module(g2);
8106 InferenceEngine::CNNNetReader net_reader;
8107 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
8108 net_reader.SetWeights(tWeights);
8110 compareICNNNetworks(*network, net_reader.getNetwork());
8113 TEST_F(NGraphReaderTests, DISABLED_ConvertMulAddToScaleShiftTest) {
8114 std::string model = R"V0G0N(
8115 <net name="Multiply" version="10">
8117 <layer id="0" name="data" type="Parameter">
8119 <port id="0" precision="FP32">
8127 <layer id="1" name="weights" type="Const">
8128 <data offset="0" size="256"/>
8130 <port id="0" precision="FP32">
8138 <layer id="3" name="mul" type="Multiply">
8140 <port id="0" precision="FP32">
8146 <port id="1" precision="FP32">
8154 <port id="3" precision="FP32">
8162 <layer id="4" name="biases" type="Const">
8163 <data offset="256" size="256"/>
8165 <port id="0" precision="FP32">
8173 <layer id="5" name="add" type="Add">
8175 <port id="0" precision="FP32">
8181 <port id="1" precision="FP32">
8189 <port id="3" precision="FP32">
8197 <layer id="2" name="output" type="Result">
8199 <port id="0" precision="FP32">
8209 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
8210 <edge from-layer="1" from-port="0" to-layer="3" to-port="1"/>
8211 <edge from-layer="3" from-port="3" to-layer="5" to-port="0"/>
8212 <edge from-layer="4" from-port="0" to-layer="5" to-port="1"/>
8213 <edge from-layer="5" from-port="3" to-layer="2" to-port="0"/>
8217 std::string modelV5 = R"V0G0N(
8218 <net name="Convolution" version="5" precision="FP32" batch="1">
8220 <layer id="0" name="data" precision="FP32" type="Input">
8230 <layer id="2" name="data1" precision="FP32" type="Const">
8240 <custom offset="0" size="3211264"/>
8243 <layer id="3" name="mul" precision="FP32" type="Eltwise">
8244 <data operation="prod"/>
8270 <edge from-layer="0" from-port="0" to-layer="3" to-port="0"/>
8271 <edge from-layer="2" from-port="3" to-layer="3" to-port="1"/>
8277 Blob::Ptr weights = make_shared_blob<uint8_t>(TensorDesc(Precision::U8, {6422528}, Layout::C));
8278 weights->allocate();
8279 fill_data((float *) weights->buffer(), weights->size() / sizeof(float));
8281 auto tWeights = std::dynamic_pointer_cast<TBlob<uint8_t>>(weights);
8283 auto nGraph = reader.read(model, weights);
8285 ICNNNetwork::Ptr network = convertFunctionToICNNNetwork(nGraph);
8287 InferenceEngine::CNNNetReader net_reader;
8288 net_reader.ReadNetwork(modelV5.data(), modelV5.length());
8289 net_reader.SetWeights(tWeights);
8291 compareICNNNetworks(*network, net_reader.getNetwork());