@@ -272,14 +272,57 @@ void CombineData(DataPtr& master, DataPtr& slave) {
272
272
}
273
273
}
274
274
275
+ /* *
276
+ * Preserve output data name and update output data map of the network
277
+ *
278
+ * @param in_data name to update
279
+ * @param out_data name to preserve
280
+ * @param net output data map to update with in_data
281
+ */
282
+ template <typename NET>
283
+ void SaveOutputDataName (InferenceEngine::DataPtr in_data, InferenceEngine::DataPtr out_data, NET &net) {
284
+ // TODO: update outputs of the network if out_data was output
285
+ if (out_data->getInputTo ().empty ()) {
286
+ auto data_name = out_data->getName ();
287
+ in_data->setName (data_name);
288
+ }
289
+ }
290
+
291
+ /* *
292
+ * void SaveOutputDataName(InferenceEngine::DataPtr in_data, InferenceEngine::DataPtr out_data, NET &net), where
293
+ * NET = ICNNNetwork
294
+ */
295
+ void SaveOutputDataName (InferenceEngine::DataPtr in_data, InferenceEngine::DataPtr out_data, ICNNNetwork& net) {
296
+ if (out_data->getInputTo ().empty ()) {
297
+ InferenceEngine::OutputsDataMap outputs_data_map;
298
+ net.getOutputsInfo (outputs_data_map);
299
+ auto out_data_name = out_data->getName ();
300
+ in_data->setName (out_data_name);
301
+ if (outputs_data_map.count (out_data_name)) {
302
+ auto parent_layer_ptr = in_data->getCreatorLayer ().lock ();
303
+ IE_ASSERT (parent_layer_ptr != nullptr );
304
+ auto parent_layer_name = parent_layer_ptr->name ;
305
+ size_t in_data_out_index = 0 ;
306
+ for (size_t ind = 0 ; ind < parent_layer_ptr->outData .size (); ++ind) {
307
+ if (parent_layer_ptr->outData [ind] == in_data) {
308
+ in_data_out_index = ind;
309
+ }
310
+ }
311
+ net.addOutput (parent_layer_name, in_data_out_index);
312
+ }
313
+ }
314
+ }
315
+
316
+
275
317
/* *
276
318
* Remove layer form graph
277
319
* May be applied only for inplace layer. One input, one output,
278
320
* with same tensor descriptors.
279
321
*
280
322
* @param layer to remove from graph
281
323
*/
282
- void RemoveLayer (CNNLayerPtr& layer) {
324
+ template <typename NET>
325
+ void RemoveLayer (CNNLayerPtr& layer, NET &net) {
283
326
IE_ASSERT (layer->insData .size () == 1 );
284
327
IE_ASSERT (layer->outData .size () == 1 );
285
328
@@ -299,10 +342,8 @@ void RemoveLayer(CNNLayerPtr& layer) {
299
342
// transfer output connections into parent data
300
343
CombineData (in_data, out_data);
301
344
302
- // Save name for output data
303
- if (out_data->getInputTo ().empty ()) {
304
- in_data->setName (out_data->getName ());
305
- }
345
+ // save name for output data and update network output
346
+ SaveOutputDataName (in_data, out_data, net);
306
347
}
307
348
308
349
/* ***********************************************************/
@@ -1371,7 +1412,7 @@ void fixConvertLayers(NET &net) {
1371
1412
}
1372
1413
}
1373
1414
for (auto &layer : to_remove) {
1374
- RemoveLayer (layer);
1415
+ RemoveLayer (layer, net );
1375
1416
}
1376
1417
}
1377
1418
0 commit comments