23 for (
auto&& layer : layers)
25 for (
unsigned int i = 0 ; i < layer->GetNumInputSlots(); ++i)
27 result.push_back(&(layer->GetInputSlot(i)));
40 for (
auto &&layer: layers)
42 for (
unsigned int i = 0; i < layer->GetNumOutputSlots(); ++i)
44 result.push_back(&(layer->GetOutputSlot(i)));
54 std::vector<Layer*> untouchedVector;
55 for (
const auto& pair : untouched)
57 Layer* layer = pair.second;
59 CreateIInputsFrom({layer}),
60 CreateIOutputsFrom({layer}));
65 template<
typename LayerType>
72 CreateIInputsFrom({padLayer}),
73 CreateIOutputsFrom({baseLayer}));
76 optimizationViews.
AddSubstitution({substitutionSubgraph, replacementSubgraph});
78 return replacementLayer;
81 template<
typename LayerType>
88 optimizationViews.
GetINetwork()->AddPooling2dLayer(poolDescriptor,
"folded-pad-into-pool2d");
89 LayerType* replacementLayer = PolymorphicDowncast<LayerType*>(replacement);
96 return replacementLayer;
Interface for a layer that is connectable to other layers via InputSlots and OutputSlots.
void ReportUntouchedLayers(OptimizationViews &optimizationViews, std::map< LayerGuid, Layer *> untouched)
void AddSubstitution(SubstitutionPair &&substitution)
Copyright (c) 2021 ARM Limited and Contributors.
This layer represents a pad operation.
The SubgraphView class represents a subgraph of a Graph.
std::vector< IOutputSlot * > IOutputSlots
INetworkPtr & GetINetwork()
std::vector< IInputSlot * > IInputSlots
void AddUntouchedSubgraph(SubgraphView &&subgraph)
This layer represents a pooling 2d operation.
LayerType * FoldPadIntoAveragePool2d(OptimizationViews &optimizationViews, Pooling2dLayer *baseLayer, Pooling2dDescriptor &poolDescriptor, PadLayer *padLayer)
LayerType * FoldPadLayer(OptimizationViews &optimizationViews, LayerType *baseLayer, LayerType *replacementLayer, PadLayer *padLayer)
A Pooling2dDescriptor for the Pooling2dLayer.
LayerType
When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...