1 // Copyright (C) 2018 Intel Corporation
3 // SPDX-License-Identifier: Apache-2.0
6 #include <gtest/gtest.h>
7 #include <inference_engine/parsers.h>
8 #include <inference_engine/ie_cnn_net_reader_impl.h>
9 #include <test_model_path.hpp>
10 #include <mock_icnn_network.hpp>
11 #include <gmock/gmock-more-actions.h>
12 #include "cnn_network_impl.hpp"
13 #include "mock_iformat_parser.hpp"
15 using namespace testing;
16 using namespace InferenceEngine;
17 using namespace InferenceEngine::details;
20 class CNNNetReaderImplTest : public ::testing::Test {
26 struct MockFormatParserCreator : public FormatParserCreator {
27 MockFormatParserCreator() {
28 _parser = make_shared<MockIFormatParser>();
30 std::shared_ptr<IFormatParser> create(int version) override {
34 MockIFormatParser* getParser() {
39 std::shared_ptr<MockIFormatParser> _parser;
42 TEST_F(CNNNetReaderImplTest, validateIsCalled) {
44 "<net name=\"PVANET\" version=\"2\" batch=\"1\">"
46 " <layer name=\"data\" type=\"Input\" precision=\"FP32\" id=\"0\">"
56 " <layer name=\"conv1_1_conv\" type=\"Convolution\" precision=\"FP32\" id=\"2\">"
57 " <convolution_data stride-x=\"2\" stride-y=\"2\" pad-x=\"3\" pad-y=\"3\" kernel-x=\"7\" kernel-y=\"7\" output=\"16\" group=\"1\"/>"
74 " <weights offset=\"0\" size=\"9408\"/>"
75 " <biases offset=\"9408\" size=\"64\"/>"
77 " <layer name=\"conv1_1_neg\" type=\"Power\" precision=\"FP32\" id=\"3\">"
78 " <power_data power=\"1\" scale=\"-1\" shift=\"0\"/>"
96 " <layer name=\"conv1_1_concat\" type=\"Concat\" precision=\"FP32\" id=\"4\">"
97 " <concat_data axis=\"1\"/>"
121 " <layer name=\"conv1_1_scale\" type=\"ScaleShift\" precision=\"FP32\" id=\"5\">"
138 " <weights offset=\"9472\" size=\"128\"/>"
139 " <biases offset=\"9600\" size=\"128\"/>"
141 " <layer name=\"conv1_1_relu\" type=\"ReLU\" precision=\"FP32\" id=\"6\">"
142 " <data negative_slope=\"0\" engine=\"caffe.ReLUParameter.DEFAULT\"/>"
160 " <layer name=\"pool1\" type=\"Pooling\" precision=\"FP32\" id=\"7\">"
161 " <pooling_data kernel-x=\"3\" kernel-y=\"3\" pad-x=\"0\" pad-y=\"0\" stride-x=\"2\" stride-y=\"2\" rounding-type=\"ceil\" pool-method=\"max\"/>"
181 " <edge from-layer=\"0\" from-port=\"0\" to-layer=\"2\" to-port=\"2\"/>"
182 " <edge from-layer=\"2\" from-port=\"3\" to-layer=\"3\" to-port=\"4\"/>"
183 " <edge from-layer=\"2\" from-port=\"3\" to-layer=\"4\" to-port=\"6\"/>"
184 " <edge from-layer=\"3\" from-port=\"5\" to-layer=\"4\" to-port=\"7\"/>"
185 " <edge from-layer=\"4\" from-port=\"8\" to-layer=\"5\" to-port=\"9\"/>"
186 " <edge from-layer=\"5\" from-port=\"10\" to-layer=\"6\" to-port=\"11\"/>"
187 " <edge from-layer=\"6\" from-port=\"12\" to-layer=\"7\" to-port=\"13\"/>"
190 auto parserCreator = make_shared<MockFormatParserCreator>();
191 CNNNetReaderImpl reader(parserCreator);
192 auto network = make_shared<MockCNNNetworkImpl>();
193 auto name = std::string{"AlexNet"};
195 EXPECT_CALL(*parserCreator->getParser(), Parse(_)).Times(1).WillOnce(Return(network));
196 EXPECT_CALL(*network.get(), validate(_)).Times(1);
197 EXPECT_CALL(*network.get(), getName()).Times(1).WillOnce(ReturnRef(name));
199 ASSERT_NO_THROW(sts = reader.ReadNetwork(model.data(), model.length(), &resp));
203 TEST_F(CNNNetReaderImplTest, cycleIsDetectedInReader) {
205 "<net batch=\"1\" name=\"model\" version=\"2\">"
207 " <layer id=\"0\" name=\"data\" precision=\"FP32\" type=\"Input\">"
217 " <layer id=\"1\" name=\"conv1\" precision=\"FP32\" type=\"Convolution\">"
218 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"3\" kernel-y=\"3\" output=\"64\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,2,2\" stride-x=\"2\" stride-y=\"2\"/>"
236 " <weights offset=\"0\" size=\"6912\"/>"
237 " <biases offset=\"6912\" size=\"256\"/>"
240 " <layer id=\"2\" name=\"relu_conv1\" precision=\"FP32\" type=\"ReLU\">"
241 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
259 " <layer id=\"3\" name=\"pool1\" precision=\"FP32\" type=\"Pooling\">"
260 " <data exclude-pad=\"false\" kernel-x=\"3\" kernel-y=\"3\" pad-x=\"0\" pad-y=\"0\" pool-method=\"max\" rounding_type=\"ceil\" stride=\"1,1,2,2\" stride-x=\"2\" stride-y=\"2\"/>"
278 " <layer id=\"4\" name=\"fire2/squeeze1x1\" precision=\"FP32\" type=\"Convolution\">"
279 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"16\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
297 " <weights offset=\"7168\" size=\"4096\"/>"
298 " <biases offset=\"11264\" size=\"64\"/>"
301 " <layer id=\"5\" name=\"fire2/relu_squeeze1x1\" precision=\"FP32\" type=\"ReLU\">"
302 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
320 " <layer id=\"6\" name=\"fire2/expand1x1\" precision=\"FP32\" type=\"Convolution\">"
321 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"64\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
339 " <weights offset=\"11328\" size=\"4096\"/>"
340 " <biases offset=\"15424\" size=\"256\"/>"
343 " <layer id=\"7\" name=\"fire2/relu_expand1x1\" precision=\"FP32\" type=\"ReLU\">"
344 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
362 " <layer id=\"8\" name=\"fire2/expand3x3\" precision=\"FP32\" type=\"Convolution\">"
363 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"3\" kernel-y=\"3\" output=\"64\" pad-x=\"1\" pad-y=\"1\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
387 " <weights offset=\"15680\" size=\"36864\"/>"
388 " <biases offset=\"52544\" size=\"256\"/>"
391 " <layer id=\"9\" name=\"fire2/relu_expand3x3\" precision=\"FP32\" type=\"ReLU\">"
392 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
410 " <layer id=\"10\" name=\"fire2/concat\" precision=\"FP32\" type=\"Concat\">"
411 " <data axis=\"1\"/>"
435 " <layer id=\"11\" name=\"fire3/squeeze1x1\" precision=\"FP32\" type=\"Convolution\">"
436 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"16\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
460 " <weights offset=\"52800\" size=\"8192\"/>"
461 " <biases offset=\"60992\" size=\"64\"/>"
464 " <layer id=\"12\" name=\"fire3/relu_squeeze1x1\" precision=\"FP32\" type=\"ReLU\">"
465 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
483 " <layer id=\"13\" name=\"fire3/expand1x1\" precision=\"FP32\" type=\"Convolution\">"
484 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"64\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
502 " <weights offset=\"61056\" size=\"4096\"/>"
503 " <biases offset=\"65152\" size=\"256\"/>"
506 " <layer id=\"14\" name=\"fire3/relu_expand1x1\" precision=\"FP32\" type=\"ReLU\">"
507 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
525 " <layer id=\"15\" name=\"fire3/expand3x3\" precision=\"FP32\" type=\"Convolution\">"
526 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"3\" kernel-y=\"3\" output=\"64\" pad-x=\"1\" pad-y=\"1\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
544 " <weights offset=\"65408\" size=\"36864\"/>"
545 " <biases offset=\"102272\" size=\"256\"/>"
548 " <layer id=\"16\" name=\"fire3/relu_expand3x3\" precision=\"FP32\" type=\"ReLU\">"
549 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
567 " <layer id=\"17\" name=\"fire3/concat\" precision=\"FP32\" type=\"Concat\">"
568 " <data axis=\"1\"/>"
592 " <layer id=\"18\" name=\"pool3\" precision=\"FP32\" type=\"Pooling\">"
593 " <data exclude-pad=\"false\" kernel-x=\"3\" kernel-y=\"3\" pad-x=\"0\" pad-y=\"0\" pool-method=\"max\" rounding_type=\"ceil\" stride=\"1,1,2,2\" stride-x=\"2\" stride-y=\"2\"/>"
611 " <layer id=\"19\" name=\"fire4/squeeze1x1\" precision=\"FP32\" type=\"Convolution\">"
612 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"32\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
630 " <weights offset=\"102528\" size=\"16384\"/>"
631 " <biases offset=\"118912\" size=\"128\"/>"
634 " <layer id=\"20\" name=\"fire4/relu_squeeze1x1\" precision=\"FP32\" type=\"ReLU\">"
635 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
653 " <layer id=\"21\" name=\"fire4/expand1x1\" precision=\"FP32\" type=\"Convolution\">"
654 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"128\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
672 " <weights offset=\"119040\" size=\"16384\"/>"
673 " <biases offset=\"135424\" size=\"512\"/>"
676 " <layer id=\"22\" name=\"fire4/relu_expand1x1\" precision=\"FP32\" type=\"ReLU\">"
677 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
695 " <layer id=\"23\" name=\"fire4/expand3x3\" precision=\"FP32\" type=\"Convolution\">"
696 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"3\" kernel-y=\"3\" output=\"128\" pad-x=\"1\" pad-y=\"1\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
714 " <weights offset=\"135936\" size=\"147456\"/>"
715 " <biases offset=\"283392\" size=\"512\"/>"
718 " <layer id=\"24\" name=\"fire4/relu_expand3x3\" precision=\"FP32\" type=\"ReLU\">"
719 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
737 " <layer id=\"25\" name=\"fire4/concat\" precision=\"FP32\" type=\"Concat\">"
738 " <data axis=\"1\"/>"
762 " <layer id=\"26\" name=\"fire5/squeeze1x1\" precision=\"FP32\" type=\"Convolution\">"
763 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"32\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
781 " <weights offset=\"283904\" size=\"32768\"/>"
782 " <biases offset=\"316672\" size=\"128\"/>"
785 " <layer id=\"27\" name=\"fire5/relu_squeeze1x1\" precision=\"FP32\" type=\"ReLU\">"
786 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
804 " <layer id=\"28\" name=\"fire5/expand1x1\" precision=\"FP32\" type=\"Convolution\">"
805 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"128\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
823 " <weights offset=\"316800\" size=\"16384\"/>"
824 " <biases offset=\"333184\" size=\"512\"/>"
827 " <layer id=\"29\" name=\"fire5/relu_expand1x1\" precision=\"FP32\" type=\"ReLU\">"
828 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
846 " <layer id=\"30\" name=\"fire5/expand3x3\" precision=\"FP32\" type=\"Convolution\">"
847 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"3\" kernel-y=\"3\" output=\"128\" pad-x=\"1\" pad-y=\"1\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
865 " <weights offset=\"333696\" size=\"147456\"/>"
866 " <biases offset=\"481152\" size=\"512\"/>"
869 " <layer id=\"31\" name=\"fire5/relu_expand3x3\" precision=\"FP32\" type=\"ReLU\">"
870 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
888 " <layer id=\"32\" name=\"fire5/concat\" precision=\"FP32\" type=\"Concat\">"
889 " <data axis=\"1\"/>"
913 " <layer id=\"33\" name=\"pool5\" precision=\"FP32\" type=\"Pooling\">"
914 " <data exclude-pad=\"false\" kernel-x=\"3\" kernel-y=\"3\" pad-x=\"0\" pad-y=\"0\" pool-method=\"max\" rounding_type=\"ceil\" stride=\"1,1,2,2\" stride-x=\"2\" stride-y=\"2\"/>"
932 " <layer id=\"34\" name=\"fire6/squeeze1x1\" precision=\"FP32\" type=\"Convolution\">"
933 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"48\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
951 " <weights offset=\"481664\" size=\"49152\"/>"
952 " <biases offset=\"530816\" size=\"192\"/>"
955 " <layer id=\"35\" name=\"fire6/relu_squeeze1x1\" precision=\"FP32\" type=\"ReLU\">"
956 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
974 " <layer id=\"36\" name=\"fire6/expand1x1\" precision=\"FP32\" type=\"Convolution\">"
975 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"192\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
993 " <weights offset=\"531008\" size=\"36864\"/>"
994 " <biases offset=\"567872\" size=\"768\"/>"
997 " <layer id=\"37\" name=\"fire6/relu_expand1x1\" precision=\"FP32\" type=\"ReLU\">"
998 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1016 " <layer id=\"38\" name=\"fire6/expand3x3\" precision=\"FP32\" type=\"Convolution\">"
1017 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"3\" kernel-y=\"3\" output=\"192\" pad-x=\"1\" pad-y=\"1\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1035 " <weights offset=\"568640\" size=\"331776\"/>"
1036 " <biases offset=\"900416\" size=\"768\"/>"
1039 " <layer id=\"39\" name=\"fire6/relu_expand3x3\" precision=\"FP32\" type=\"ReLU\">"
1040 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1058 " <layer id=\"40\" name=\"fire6/concat\" precision=\"FP32\" type=\"Concat\">"
1059 " <data axis=\"1\"/>"
1083 " <layer id=\"41\" name=\"fire7/squeeze1x1\" precision=\"FP32\" type=\"Convolution\">"
1084 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"48\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1102 " <weights offset=\"901184\" size=\"73728\"/>"
1103 " <biases offset=\"974912\" size=\"192\"/>"
1106 " <layer id=\"42\" name=\"fire7/relu_squeeze1x1\" precision=\"FP32\" type=\"ReLU\">"
1107 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1125 " <layer id=\"43\" name=\"fire7/expand1x1\" precision=\"FP32\" type=\"Convolution\">"
1126 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"192\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1144 " <weights offset=\"975104\" size=\"36864\"/>"
1145 " <biases offset=\"1011968\" size=\"768\"/>"
1148 " <layer id=\"44\" name=\"fire7/relu_expand1x1\" precision=\"FP32\" type=\"ReLU\">"
1149 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1167 " <layer id=\"45\" name=\"fire7/expand3x3\" precision=\"FP32\" type=\"Convolution\">"
1168 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"3\" kernel-y=\"3\" output=\"192\" pad-x=\"1\" pad-y=\"1\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1186 " <weights offset=\"1012736\" size=\"331776\"/>"
1187 " <biases offset=\"1344512\" size=\"768\"/>"
1190 " <layer id=\"46\" name=\"fire7/relu_expand3x3\" precision=\"FP32\" type=\"ReLU\">"
1191 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1209 " <layer id=\"47\" name=\"fire7/concat\" precision=\"FP32\" type=\"Concat\">"
1210 " <data axis=\"1\"/>"
1234 " <layer id=\"48\" name=\"fire8/squeeze1x1\" precision=\"FP32\" type=\"Convolution\">"
1235 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"64\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1253 " <weights offset=\"1345280\" size=\"98304\"/>"
1254 " <biases offset=\"1443584\" size=\"256\"/>"
1257 " <layer id=\"49\" name=\"fire8/relu_squeeze1x1\" precision=\"FP32\" type=\"ReLU\">"
1258 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1276 " <layer id=\"50\" name=\"fire8/expand1x1\" precision=\"FP32\" type=\"Convolution\">"
1277 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"256\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1295 " <weights offset=\"1443840\" size=\"65536\"/>"
1296 " <biases offset=\"1509376\" size=\"1024\"/>"
1299 " <layer id=\"51\" name=\"fire8/relu_expand1x1\" precision=\"FP32\" type=\"ReLU\">"
1300 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1318 " <layer id=\"52\" name=\"fire8/expand3x3\" precision=\"FP32\" type=\"Convolution\">"
1319 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"3\" kernel-y=\"3\" output=\"256\" pad-x=\"1\" pad-y=\"1\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1337 " <weights offset=\"1510400\" size=\"589824\"/>"
1338 " <biases offset=\"2100224\" size=\"1024\"/>"
1341 " <layer id=\"53\" name=\"fire8/relu_expand3x3\" precision=\"FP32\" type=\"ReLU\">"
1342 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1360 " <layer id=\"54\" name=\"fire8/concat\" precision=\"FP32\" type=\"Concat\">"
1361 " <data axis=\"1\"/>"
1385 " <layer id=\"55\" name=\"fire9/squeeze1x1\" precision=\"FP32\" type=\"Convolution\">"
1386 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"64\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1404 " <weights offset=\"2101248\" size=\"131072\"/>"
1405 " <biases offset=\"2232320\" size=\"256\"/>"
1408 " <layer id=\"56\" name=\"fire9/relu_squeeze1x1\" precision=\"FP32\" type=\"ReLU\">"
1409 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1427 " <layer id=\"57\" name=\"fire9/expand1x1\" precision=\"FP32\" type=\"Convolution\">"
1428 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"256\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1446 " <weights offset=\"2232576\" size=\"65536\"/>"
1447 " <biases offset=\"2298112\" size=\"1024\"/>"
1450 " <layer id=\"58\" name=\"fire9/relu_expand1x1\" precision=\"FP32\" type=\"ReLU\">"
1451 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1469 " <layer id=\"59\" name=\"fire9/expand3x3\" precision=\"FP32\" type=\"Convolution\">"
1470 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"3\" kernel-y=\"3\" output=\"256\" pad-x=\"1\" pad-y=\"1\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1488 " <weights offset=\"2299136\" size=\"589824\"/>"
1489 " <biases offset=\"2888960\" size=\"1024\"/>"
1492 " <layer id=\"60\" name=\"fire9/relu_expand3x3\" precision=\"FP32\" type=\"ReLU\">"
1493 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1511 " <layer id=\"61\" name=\"fire9/concat\" precision=\"FP32\" type=\"Concat\">"
1512 " <data axis=\"1\"/>"
1536 " <layer id=\"62\" name=\"conv10\" precision=\"FP32\" type=\"Convolution\">"
1537 " <data dilation-x=\"1\" dilation-y=\"1\" group=\"1\" kernel-x=\"1\" kernel-y=\"1\" output=\"1000\" pad-x=\"0\" pad-y=\"0\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1555 " <weights offset=\"2889984\" size=\"2048000\"/>"
1556 " <biases offset=\"4937984\" size=\"4000\"/>"
1559 " <layer id=\"63\" name=\"relu_conv10\" precision=\"FP32\" type=\"ReLU\">"
1560 " <data engine=\"caffe.ReLUParameter.DEFAULT\" negative_slope=\"0.0\"/>"
1578 " <layer id=\"64\" name=\"pool10\" precision=\"FP32\" type=\"Pooling\">"
1579 " <data exclude-pad=\"false\" kernel-x=\"14\" kernel-y=\"14\" pad-x=\"0\" pad-y=\"0\" pool-method=\"avg\" rounding_type=\"ceil\" stride=\"1,1,1,1\" stride-x=\"1\" stride-y=\"1\"/>"
1597 " <layer id=\"65\" name=\"prob\" precision=\"FP32\" type=\"SoftMax\">"
1598 " <data axis=\"1\"/>"
1618 " <edge from-layer=\"0\" from-port=\"0\" to-layer=\"1\" to-port=\"0\"/>"
1619 " <edge from-layer=\"1\" from-port=\"3\" to-layer=\"2\" to-port=\"0\"/>"
1620 " <edge from-layer=\"2\" from-port=\"1\" to-layer=\"3\" to-port=\"0\"/>"
1621 " <edge from-layer=\"3\" from-port=\"1\" to-layer=\"4\" to-port=\"0\"/>"
1622 " <edge from-layer=\"4\" from-port=\"3\" to-layer=\"5\" to-port=\"0\"/>"
1623 " <edge from-layer=\"5\" from-port=\"1\" to-layer=\"6\" to-port=\"0\"/>"
1624 " <edge from-layer=\"6\" from-port=\"3\" to-layer=\"7\" to-port=\"0\"/>"
1625 " <edge from-layer=\"5\" from-port=\"1\" to-layer=\"8\" to-port=\"0\"/>"
1626 " <edge from-layer=\"8\" from-port=\"3\" to-layer=\"9\" to-port=\"0\"/>"
1627 " <edge from-layer=\"7\" from-port=\"1\" to-layer=\"10\" to-port=\"0\"/>"
1628 " <edge from-layer=\"9\" from-port=\"1\" to-layer=\"10\" to-port=\"1\"/>"
1629 " <edge from-layer=\"10\" from-port=\"2\" to-layer=\"11\" to-port=\"0\"/>"
1630 " <edge from-layer=\"11\" from-port=\"3\" to-layer=\"12\" to-port=\"0\"/>"
1631 " <edge from-layer=\"11\" from-port=\"4\" to-layer=\"8\" to-port=\"1\"/>"
1632 " <edge from-layer=\"12\" from-port=\"1\" to-layer=\"13\" to-port=\"0\"/>"
1633 " <edge from-layer=\"13\" from-port=\"3\" to-layer=\"14\" to-port=\"0\"/>"
1634 " <edge from-layer=\"12\" from-port=\"1\" to-layer=\"15\" to-port=\"0\"/>"
1635 " <edge from-layer=\"15\" from-port=\"3\" to-layer=\"16\" to-port=\"0\"/>"
1636 " <edge from-layer=\"14\" from-port=\"1\" to-layer=\"17\" to-port=\"0\"/>"
1637 " <edge from-layer=\"16\" from-port=\"1\" to-layer=\"17\" to-port=\"1\"/>"
1638 " <edge from-layer=\"17\" from-port=\"2\" to-layer=\"18\" to-port=\"0\"/>"
1639 " <edge from-layer=\"18\" from-port=\"1\" to-layer=\"19\" to-port=\"0\"/>"
1640 " <edge from-layer=\"19\" from-port=\"3\" to-layer=\"20\" to-port=\"0\"/>"
1641 " <edge from-layer=\"20\" from-port=\"1\" to-layer=\"21\" to-port=\"0\"/>"
1642 " <edge from-layer=\"21\" from-port=\"3\" to-layer=\"22\" to-port=\"0\"/>"
1643 " <edge from-layer=\"20\" from-port=\"1\" to-layer=\"23\" to-port=\"0\"/>"
1644 " <edge from-layer=\"23\" from-port=\"3\" to-layer=\"24\" to-port=\"0\"/>"
1645 " <edge from-layer=\"22\" from-port=\"1\" to-layer=\"25\" to-port=\"0\"/>"
1646 " <edge from-layer=\"24\" from-port=\"1\" to-layer=\"25\" to-port=\"1\"/>"
1647 " <edge from-layer=\"25\" from-port=\"2\" to-layer=\"26\" to-port=\"0\"/>"
1648 " <edge from-layer=\"26\" from-port=\"3\" to-layer=\"27\" to-port=\"0\"/>"
1649 " <edge from-layer=\"27\" from-port=\"1\" to-layer=\"28\" to-port=\"0\"/>"
1650 " <edge from-layer=\"28\" from-port=\"3\" to-layer=\"29\" to-port=\"0\"/>"
1651 " <edge from-layer=\"27\" from-port=\"1\" to-layer=\"30\" to-port=\"0\"/>"
1652 " <edge from-layer=\"30\" from-port=\"3\" to-layer=\"31\" to-port=\"0\"/>"
1653 " <edge from-layer=\"29\" from-port=\"1\" to-layer=\"32\" to-port=\"0\"/>"
1654 " <edge from-layer=\"31\" from-port=\"1\" to-layer=\"32\" to-port=\"1\"/>"
1655 " <edge from-layer=\"32\" from-port=\"2\" to-layer=\"33\" to-port=\"0\"/>"
1656 " <edge from-layer=\"33\" from-port=\"1\" to-layer=\"34\" to-port=\"0\"/>"
1657 " <edge from-layer=\"34\" from-port=\"3\" to-layer=\"35\" to-port=\"0\"/>"
1658 " <edge from-layer=\"35\" from-port=\"1\" to-layer=\"36\" to-port=\"0\"/>"
1659 " <edge from-layer=\"36\" from-port=\"3\" to-layer=\"37\" to-port=\"0\"/>"
1660 " <edge from-layer=\"35\" from-port=\"1\" to-layer=\"38\" to-port=\"0\"/>"
1661 " <edge from-layer=\"38\" from-port=\"3\" to-layer=\"39\" to-port=\"0\"/>"
1662 " <edge from-layer=\"37\" from-port=\"1\" to-layer=\"40\" to-port=\"0\"/>"
1663 " <edge from-layer=\"39\" from-port=\"1\" to-layer=\"40\" to-port=\"1\"/>"
1664 " <edge from-layer=\"40\" from-port=\"2\" to-layer=\"41\" to-port=\"0\"/>"
1665 " <edge from-layer=\"41\" from-port=\"3\" to-layer=\"42\" to-port=\"0\"/>"
1666 " <edge from-layer=\"42\" from-port=\"1\" to-layer=\"43\" to-port=\"0\"/>"
1667 " <edge from-layer=\"43\" from-port=\"3\" to-layer=\"44\" to-port=\"0\"/>"
1668 " <edge from-layer=\"42\" from-port=\"1\" to-layer=\"45\" to-port=\"0\"/>"
1669 " <edge from-layer=\"45\" from-port=\"3\" to-layer=\"46\" to-port=\"0\"/>"
1670 " <edge from-layer=\"44\" from-port=\"1\" to-layer=\"47\" to-port=\"0\"/>"
1671 " <edge from-layer=\"46\" from-port=\"1\" to-layer=\"47\" to-port=\"1\"/>"
1672 " <edge from-layer=\"47\" from-port=\"2\" to-layer=\"48\" to-port=\"0\"/>"
1673 " <edge from-layer=\"48\" from-port=\"3\" to-layer=\"49\" to-port=\"0\"/>"
1674 " <edge from-layer=\"49\" from-port=\"1\" to-layer=\"50\" to-port=\"0\"/>"
1675 " <edge from-layer=\"50\" from-port=\"3\" to-layer=\"51\" to-port=\"0\"/>"
1676 " <edge from-layer=\"49\" from-port=\"1\" to-layer=\"52\" to-port=\"0\"/>"
1677 " <edge from-layer=\"52\" from-port=\"3\" to-layer=\"53\" to-port=\"0\"/>"
1678 " <edge from-layer=\"51\" from-port=\"1\" to-layer=\"54\" to-port=\"0\"/>"
1679 " <edge from-layer=\"53\" from-port=\"1\" to-layer=\"54\" to-port=\"1\"/>"
1680 " <edge from-layer=\"54\" from-port=\"2\" to-layer=\"55\" to-port=\"0\"/>"
1681 " <edge from-layer=\"55\" from-port=\"3\" to-layer=\"56\" to-port=\"0\"/>"
1682 " <edge from-layer=\"56\" from-port=\"1\" to-layer=\"57\" to-port=\"0\"/>"
1683 " <edge from-layer=\"57\" from-port=\"3\" to-layer=\"58\" to-port=\"0\"/>"
1684 " <edge from-layer=\"56\" from-port=\"1\" to-layer=\"59\" to-port=\"0\"/>"
1685 " <edge from-layer=\"59\" from-port=\"3\" to-layer=\"60\" to-port=\"0\"/>"
1686 " <edge from-layer=\"58\" from-port=\"1\" to-layer=\"61\" to-port=\"0\"/>"
1687 " <edge from-layer=\"60\" from-port=\"1\" to-layer=\"61\" to-port=\"1\"/>"
1688 " <edge from-layer=\"61\" from-port=\"2\" to-layer=\"62\" to-port=\"0\"/>"
1689 " <edge from-layer=\"62\" from-port=\"3\" to-layer=\"63\" to-port=\"0\"/>"
1690 " <edge from-layer=\"63\" from-port=\"1\" to-layer=\"64\" to-port=\"0\"/>"
1691 " <edge from-layer=\"64\" from-port=\"1\" to-layer=\"65\" to-port=\"0\"/>"
1694 CNNNetReaderImpl reader(make_shared<V2FormatParserCreator>());
1696 ASSERT_EQ(GENERAL_ERROR, reader.ReadNetwork(model.data(), model.length(), &resp));