Skip to content

Commit 54c35ac

Browse files
committed
[IE] Preserve output data name after merging and update output data map
Signed-off-by: Roman Kazantsev <[email protected]>
1 parent 5c43765 commit 54c35ac

File tree

1 file changed

+47
-6
lines changed

1 file changed

+47
-6
lines changed

inference-engine/src/legacy_api/src/net_pass.cpp

Lines changed: 47 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -272,14 +272,57 @@ void CombineData(DataPtr& master, DataPtr& slave) {
272272
}
273273
}
274274

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+
275317
/**
276318
* Remove layer form graph
277319
* May be applied only for inplace layer. One input, one output,
278320
* with same tensor descriptors.
279321
*
280322
* @param layer to remove from graph
281323
*/
282-
void RemoveLayer(CNNLayerPtr& layer) {
324+
template <typename NET>
325+
void RemoveLayer(CNNLayerPtr& layer, NET &net) {
283326
IE_ASSERT(layer->insData.size() == 1);
284327
IE_ASSERT(layer->outData.size() == 1);
285328

@@ -299,10 +342,8 @@ void RemoveLayer(CNNLayerPtr& layer) {
299342
// transfer output connections into parent data
300343
CombineData(in_data, out_data);
301344

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);
306347
}
307348

308349
/************************************************************/
@@ -1371,7 +1412,7 @@ void fixConvertLayers(NET &net) {
13711412
}
13721413
}
13731414
for (auto &layer : to_remove) {
1374-
RemoveLayer(layer);
1415+
RemoveLayer(layer, net);
13751416
}
13761417
}
13771418

0 commit comments

Comments
 (0)