@@ -60,11 +60,10 @@ static std::shared_ptr<Model> create_conv(element::Type in_type, const PartialSh
60
60
return std::make_shared<Model>(ResultVector{res}, ParameterVector{data1});
61
61
}
62
62
63
- template <int N>
64
- static std::shared_ptr<Model> create_n_inputs (element::Type type, const PartialShape& shape) {
63
+ static std::shared_ptr<Model> create_n_inputs (int N, element::Type type, const PartialShape& shape) {
65
64
ResultVector res;
66
65
ParameterVector params;
67
- for (size_t i = 0 ; i < N; i++) {
66
+ for (int i = 0 ; i < N; i++) {
68
67
auto index_str = std::to_string (i);
69
68
auto data1 = std::make_shared<op::v0::Parameter>(type, shape);
70
69
data1->set_friendly_name (" input" + index_str);
@@ -80,6 +79,21 @@ static std::shared_ptr<Model> create_n_inputs(element::Type type, const PartialS
80
79
return std::make_shared<Model>(res, params);
81
80
}
82
81
82
+ static std::shared_ptr<Model> create_no_inputs (element::Type type) {
83
+ ResultVector res;
84
+ ParameterVector params;
85
+ auto index_str = std::to_string (0 );
86
+ auto data1 = std::make_shared<op::v0::Constant>(type, Shape{}, 1 );
87
+ data1->set_friendly_name (" input" + index_str);
88
+ data1->get_output_tensor (0 ).set_names ({" tensor_input" + index_str});
89
+ auto res1 = std::make_shared<op::v0::Result>(data1);
90
+ res1->set_friendly_name (" Result" + index_str);
91
+ res1->get_output_tensor (0 ).set_names ({" tensor_output" + index_str});
92
+ res.push_back (res1);
93
+
94
+ return std::make_shared<Model>(res, params);
95
+ }
96
+
83
97
namespace {
84
98
void set_model_as_v10 (ov::Model& model) {
85
99
model.get_rt_info ()[" version" ] = static_cast <int64_t >(10 );
@@ -110,6 +124,70 @@ TEST(pre_post_process, simple_mean_scale_getters_f64) {
110
124
EXPECT_EQ (f->get_output_element_type (0 ), element::f64);
111
125
}
112
126
127
+ TEST (pre_post_process, clamp_operation_on_input_preprocess) {
128
+ auto model = create_simple_function (element::f32, Shape{1 , 3 , 2 , 2 });
129
+
130
+ {
131
+ auto input_node = model->get_parameters ().front ();
132
+ auto connected_node = input_node->output (0 ).get_target_inputs ().begin ()->get_node ();
133
+ EXPECT_STREQ (connected_node->get_type_name (), " Relu" );
134
+ }
135
+ auto p = PrePostProcessor (model);
136
+ p.input ().preprocess ().clamp (0.0 , 1.0 );
137
+ model = p.build ();
138
+ {
139
+ auto input_node = model->get_parameters ().front ();
140
+ auto connected_node = input_node->output (0 ).get_target_inputs ().begin ()->get_node ();
141
+ EXPECT_STREQ (connected_node->get_type_name (), " Clamp" );
142
+ }
143
+ }
144
+
145
+ TEST (pre_post_process, clamp_operation_on_input_preprocess_throw_no_input) {
146
+ auto model = create_no_inputs (element::f32);
147
+
148
+ {
149
+ auto input_node = model->get_ordered_ops ().front ();
150
+ auto connected_node = input_node->output (0 ).get_target_inputs ().begin ()->get_node ();
151
+ EXPECT_STREQ (connected_node->get_type_name (), " Result" );
152
+ }
153
+
154
+ auto p = PrePostProcessor (model);
155
+
156
+ EXPECT_ANY_THROW (p.input ().preprocess ().clamp (0.0 , 1.0 ); model = p.build ());
157
+ }
158
+
159
+ TEST (pre_post_process, clamp_operation_on_input_preprocess_throw_more_than_one_input) {
160
+ auto model = create_n_inputs (2 , element::f32, Shape{1 , 3 , 2 , 2 });
161
+
162
+ {
163
+ auto input_node = model->get_parameters ().front ();
164
+ auto connected_node = input_node->output (0 ).get_target_inputs ().begin ()->get_node ();
165
+ EXPECT_STREQ (connected_node->get_type_name (), " Relu" );
166
+ }
167
+
168
+ auto p = PrePostProcessor (model);
169
+
170
+ EXPECT_ANY_THROW (p.input ().preprocess ().clamp (0.0 , 1.0 ); model = p.build ());
171
+ }
172
+
173
+ TEST (pre_post_process, clamp_operation_on_output_postprocess) {
174
+ auto model = create_simple_function (element::f32, Shape{1 , 3 , 2 , 2 });
175
+
176
+ {
177
+ auto result_node = model->get_results ().front ();
178
+ auto connected_node = result_node->input_value (0 ).get_node_shared_ptr ();
179
+ EXPECT_STREQ (connected_node->get_type_name (), " Relu" );
180
+ }
181
+ auto p = PrePostProcessor (model);
182
+ p.output ().postprocess ().clamp (0.0 , 1.0 );
183
+ model = p.build ();
184
+ {
185
+ auto result_node = model->get_results ().front ();
186
+ auto connected_node = result_node->input_value (0 ).get_node_shared_ptr ();
187
+ EXPECT_STREQ (connected_node->get_type_name (), " Clamp" );
188
+ }
189
+ }
190
+
113
191
TEST (pre_post_process, convert_element_type_and_scale) {
114
192
auto f = create_simple_function (element::i8, Shape{1 , 3 , 2 , 2 });
115
193
auto p = PrePostProcessor (f);
@@ -198,7 +276,7 @@ TEST(pre_post_process, empty_preprocess) {
198
276
}
199
277
200
278
TEST (pre_post_process, preprocess_assert_input_without_index) {
201
- auto f = create_n_inputs< 2 >( element::f32, Shape{1 , 3 , 2 , 2 });
279
+ auto f = create_n_inputs ( 2 , element::f32, Shape{1 , 3 , 2 , 2 });
202
280
auto p = PrePostProcessor (f);
203
281
EXPECT_ANY_THROW (p.input ().preprocess ().mean (0 .f ); f = p.build ());
204
282
EXPECT_ANY_THROW (p.input (" some_non_existing_name" ).preprocess ().mean (0 .f ); f = p.build ());
@@ -612,7 +690,7 @@ TEST(pre_post_process, convert_color_incorrect_subnames) {
612
690
}
613
691
614
692
TEST (pre_post_process, convert_color_duplicate_subnames) {
615
- auto f = create_n_inputs< 2 >( element::f32, PartialShape{1 , 2 , 2 , 3 });
693
+ auto f = create_n_inputs ( 2 , element::f32, PartialShape{1 , 2 , 2 , 3 });
616
694
f->get_parameters ()[0 ]->get_output_tensor (0 ).set_names ({" tensor_input1" });
617
695
f->get_parameters ()[1 ]->get_output_tensor (0 ).set_names ({" tensor_input1/CustomUV" });
618
696
auto p = PrePostProcessor (f);
@@ -670,7 +748,7 @@ TEST(pre_post_process, convert_layout_implicit_several_time) {
670
748
}
671
749
672
750
TEST (pre_post_process, tensor_set_layout) {
673
- auto f = create_n_inputs< 6 >( element::f32, Shape{1 , 3 , 480 , 640 });
751
+ auto f = create_n_inputs ( 6 , element::f32, Shape{1 , 3 , 480 , 640 });
674
752
PrePostProcessor preprocessor (f);
675
753
preprocessor.input (0 ).tensor ().set_layout (" NCHW" );
676
754
preprocessor.input (0 ).preprocess ().mean ({1.0 , 2.0 , 3.0 });
@@ -709,7 +787,7 @@ TEST(pre_post_process, tensor_set_layout) {
709
787
}
710
788
711
789
TEST (pre_post_process, postprocess_set_model_layout) {
712
- auto f = create_n_inputs< 2 >( element::f32, Shape{1 , 3 , 224 , 224 });
790
+ auto f = create_n_inputs ( 2 , element::f32, Shape{1 , 3 , 224 , 224 });
713
791
PrePostProcessor p (f);
714
792
p.output (0 ).model ().set_layout (" NCHW" );
715
793
p.output (0 ).postprocess ().convert_layout (" NHWC" );
@@ -790,7 +868,7 @@ TEST(pre_post_process, custom_preprocessing) {
790
868
}
791
869
792
870
TEST (pre_post_process, test_2_inputs_basic) {
793
- auto f = create_n_inputs< 2 >( element::f32, Shape{1 , 3 , 1 , 1 });
871
+ auto f = create_n_inputs ( 2 , element::f32, Shape{1 , 3 , 1 , 1 });
794
872
auto p = PrePostProcessor (f);
795
873
p.input (1 ).preprocess ().mean (1 .f ).scale (2 .0f );
796
874
f = p.build ();
@@ -1196,7 +1274,7 @@ TEST(pre_post_process, preprocess_convert_layout_invalid_dims_dyn_shape) {
1196
1274
}
1197
1275
1198
1276
TEST (pre_post_process, preprocess_convert_layout_partially_defined) {
1199
- auto f = create_n_inputs< 8 >( element::f32, Shape{1 , 2 , 3 , 4 , 5 });
1277
+ auto f = create_n_inputs ( 8 , element::f32, Shape{1 , 2 , 3 , 4 , 5 });
1200
1278
1201
1279
auto p = PrePostProcessor (f);
1202
1280
p.input (0 ).tensor ().set_layout (" nc???" );
@@ -1235,7 +1313,7 @@ TEST(pre_post_process, preprocess_convert_layout_partially_defined) {
1235
1313
}
1236
1314
1237
1315
TEST (pre_post_process, preprocess_convert_layout_partially_defined_trivial) {
1238
- auto f = create_n_inputs< 4 >( element::f32, Shape{1 , 2 , 3 , 4 , 5 });
1316
+ auto f = create_n_inputs ( 4 , element::f32, Shape{1 , 2 , 3 , 4 , 5 });
1239
1317
auto ops_num = f->get_ordered_ops ().size ();
1240
1318
1241
1319
auto p = PrePostProcessor (f);
@@ -1261,7 +1339,7 @@ TEST(pre_post_process, preprocess_convert_layout_partially_defined_trivial) {
1261
1339
}
1262
1340
1263
1341
TEST (pre_post_process, preprocess_convert_layout_squeeze) {
1264
- auto f = create_n_inputs< 3 >( element::f32, Shape{1 , 3 , 1 , 480 , 640 });
1342
+ auto f = create_n_inputs ( 3 , element::f32, Shape{1 , 3 , 1 , 480 , 640 });
1265
1343
auto p = PrePostProcessor (f);
1266
1344
1267
1345
p.input (0 ).tensor ().set_layout (" HWC" );
@@ -1283,7 +1361,7 @@ TEST(pre_post_process, preprocess_convert_layout_squeeze) {
1283
1361
}
1284
1362
1285
1363
TEST (pre_post_process, preprocess_convert_layout_squeeze_dynamic) {
1286
- auto f = create_n_inputs< 2 >( element::f32, PartialShape{Dimension::dynamic (), 3 , 1 , 480 , 640 });
1364
+ auto f = create_n_inputs ( 2 , element::f32, PartialShape{Dimension::dynamic (), 3 , 1 , 480 , 640 });
1287
1365
auto p = PrePostProcessor (f);
1288
1366
1289
1367
p.input (0 ).tensor ().set_layout (" HWC" );
@@ -1300,7 +1378,7 @@ TEST(pre_post_process, preprocess_convert_layout_squeeze_dynamic) {
1300
1378
}
1301
1379
1302
1380
TEST (pre_post_process, preprocess_convert_layout_squeeze_unsupported) {
1303
- auto f = create_n_inputs< 1 >( element::f32, PartialShape{Dimension::dynamic (), 3 , 1 , 480 , 640 });
1381
+ auto f = create_n_inputs ( 1 , element::f32, PartialShape{Dimension::dynamic (), 3 , 1 , 480 , 640 });
1304
1382
EXPECT_THROW (
1305
1383
{
1306
1384
auto p = PrePostProcessor (f);
@@ -1490,7 +1568,7 @@ TEST(pre_post_process, preprocess_from) {
1490
1568
}
1491
1569
1492
1570
TEST (pre_post_process, preprocess_crop) {
1493
- auto model = create_n_inputs< 1 >( element::f32, PartialShape::dynamic ());
1571
+ auto model = create_n_inputs ( 1 , element::f32, PartialShape::dynamic ());
1494
1572
auto p = PrePostProcessor (model);
1495
1573
1496
1574
p.input ().tensor ().set_shape (Shape{1 , 3 , 200 , 400 });
@@ -1513,7 +1591,7 @@ TEST(pre_post_process, preprocess_crop) {
1513
1591
}
1514
1592
1515
1593
TEST (pre_post_process, preprocess_crop_wrong_dims) {
1516
- auto model = create_n_inputs< 1 >( element::f32, PartialShape::dynamic ());
1594
+ auto model = create_n_inputs ( 1 , element::f32, PartialShape::dynamic ());
1517
1595
auto p = PrePostProcessor (model);
1518
1596
1519
1597
p.input ().tensor ().set_shape (Shape{1 , 3 , 200 , 400 });
@@ -1533,7 +1611,7 @@ TEST(pre_post_process, preprocess_crop_wrong_dims) {
1533
1611
}
1534
1612
1535
1613
TEST (pre_post_process, preprocess_crop_wrong_dims_not_aligned) {
1536
- auto model = create_n_inputs< 1 >( element::f32, PartialShape{1 , 3 , 100 , 200 });
1614
+ auto model = create_n_inputs ( 1 , element::f32, PartialShape{1 , 3 , 100 , 200 });
1537
1615
auto p = PrePostProcessor (model);
1538
1616
1539
1617
p.input ().tensor ().set_shape (Shape{1 , 3 , 200 });
@@ -1611,7 +1689,7 @@ TEST(pre_post_process, trivial_model_convert_element_type_explicit) {
1611
1689
}
1612
1690
1613
1691
TEST (pre_post_process, postprocess_convert_element_type_default) {
1614
- auto f = create_n_inputs< 2 >( element::f32, Shape{1 , 3 , 2 , 2 });
1692
+ auto f = create_n_inputs ( 2 , element::f32, Shape{1 , 3 , 2 , 2 });
1615
1693
auto name = f->output (1 ).get_node_shared_ptr ()->get_friendly_name ();
1616
1694
auto name_last_op = f->get_results ().front ()->get_input_source_output (0 ).get_node_shared_ptr ()->get_friendly_name ();
1617
1695
auto tensor_names = f->output (1 ).get_tensor ().get_names ();
@@ -1657,7 +1735,7 @@ TEST(pre_post_process, postprocess_convert_element_type_implicit) {
1657
1735
}
1658
1736
1659
1737
TEST (pre_post_process, preprocess_keep_params_order) {
1660
- auto f = create_n_inputs< 3 >( element::f32, Shape{1 , 2 , 2 , 3 });
1738
+ auto f = create_n_inputs ( 3 , element::f32, Shape{1 , 2 , 2 , 3 });
1661
1739
auto p = PrePostProcessor (f);
1662
1740
1663
1741
p.input (1 ).tensor ().set_color_format (ColorFormat::NV12_TWO_PLANES, {" Y" , " UV" });
@@ -1726,7 +1804,7 @@ TEST(pre_post_process, postprocess_set_model_layout_when_already_exists) {
1726
1804
}
1727
1805
1728
1806
TEST (pre_post_process, postprocess_convert_layout_explicit_no_target) {
1729
- auto f = create_n_inputs< 2 >( element::f32, Shape{1 , 3 , 2 , 2 });
1807
+ auto f = create_n_inputs ( 2 , element::f32, Shape{1 , 3 , 2 , 2 });
1730
1808
auto p = PrePostProcessor (f);
1731
1809
1732
1810
p.output (1 ).model ().set_layout (" NCHW" );
@@ -2033,14 +2111,14 @@ TEST(pre_post_process, postprocess_implicit_convert_element_type_and_layout) {
2033
2111
}
2034
2112
2035
2113
TEST (pre_post_process, postprocess_assert_output_without_index) {
2036
- auto f = create_n_inputs< 2 >( element::f32, Shape{1 , 3 , 2 , 2 });
2114
+ auto f = create_n_inputs ( 2 , element::f32, Shape{1 , 3 , 2 , 2 });
2037
2115
auto p = PrePostProcessor (f);
2038
2116
EXPECT_ANY_THROW (p.output ().tensor ().set_element_type (element::f32); p.build ());
2039
2117
EXPECT_ANY_THROW (p.output (" some_non_existing_name" ).tensor ().set_element_type (element::f32); p.build ());
2040
2118
}
2041
2119
2042
2120
TEST (pre_post_process, postprocess_keep_results_order) {
2043
- auto f = create_n_inputs< 3 >( element::f32, Shape{1 , 3 , 2 , 2 });
2121
+ auto f = create_n_inputs ( 3 , element::f32, Shape{1 , 3 , 2 , 2 });
2044
2122
auto names0 = f->output (0 ).get_tensor ().get_names ();
2045
2123
auto names1 = f->output (1 ).get_tensor ().get_names ();
2046
2124
auto names2 = f->output (2 ).get_tensor ().get_names ();
@@ -2244,7 +2322,7 @@ TEST(pre_post_process, postprocess_nothing_applied) {
2244
2322
}
2245
2323
2246
2324
TEST (pre_post_process, exception_safety) {
2247
- auto f = create_n_inputs< 2 >( element::f32, Shape{1 , 3 , 224 , 224 });
2325
+ auto f = create_n_inputs ( 2 , element::f32, Shape{1 , 3 , 224 , 224 });
2248
2326
auto name0 = f->input (0 ).get_node_shared_ptr ()->get_friendly_name ();
2249
2327
auto tensor_names0 = f->input (0 ).get_tensor ().get_names ();
2250
2328
auto name1 = f->input (1 ).get_node_shared_ptr ()->get_friendly_name ();
0 commit comments