1 // Copyright (C) 2018 Intel Corporation
3 // SPDX-License-Identifier: Apache-2.0
6 #include "ade_util.hpp"
8 #include <unordered_map>
11 #include <ie_icnn_network.hpp>
12 #include <ie_util_internal.hpp>
13 #include <ie_layers.h>
15 #include <util/algorithm.hpp>
17 #include <typed_graph.hpp>
19 namespace InferenceEngine {
21 using VisitedLayersMap = std::unordered_map<CNNLayer::Ptr, ade::NodeHandle>;
22 using TGraph = ade::TypedGraph<CNNLayerMetadata>;
24 void translateVisitLayer(VisitedLayersMap& visited,
26 const ade::NodeHandle& prevNode,
27 const CNNLayer::Ptr& layer) {
28 assert(nullptr != layer);;
29 assert(!util::contains(visited, layer));
30 auto node = gr.createNode();
31 gr.metadata(node).set(CNNLayerMetadata{layer});
32 if (nullptr != prevNode) {
33 gr.link(prevNode, node);
35 visited.insert({layer, node});
36 for (auto&& data : layer->outData) {
37 for (auto&& layerIt : data->inputTo) {
38 auto nextLayer = layerIt.second;
39 auto it = visited.find(nextLayer);
40 if (visited.end() == it) {
41 translateVisitLayer(visited, gr, node, nextLayer);
43 gr.link(node, it->second);
50 void translateNetworkToAde(ade::Graph& gr, ICNNNetwork& network) {
52 VisitedLayersMap visited;
53 for (auto& data : getRootDataObjects(network)) {
54 assert(nullptr != data);
55 for (auto& layerIt : data->getInputTo()) {
56 auto layer = layerIt.second;
57 assert(nullptr != layer);
58 if (!util::contains(visited, layer)) {
59 translateVisitLayer(visited, tgr, nullptr, layer);
65 const char* CNNLayerMetadata::name() {
66 return "CNNLayerMetadata";
69 } // namespace InferenceEngine