From 18ce338711fc3ea44a7731eac795964256beac6c Mon Sep 17 00:00:00 2001 From: Jim Flynn Date: Fri, 8 Mar 2019 11:08:30 +0000 Subject: IVGCVSW-2709 Serialize / de-serialize the Splitter layer * fixed typo in Ref Merger Workload comment * fixed typo in ViewsDescriptor comment * made the origins descriptor accessable in the ViewsDescriptor (needed for serialization) * based the unit test on the use of the splitter in the CaffeParser Change-Id: I3e716839adb4eee5a695633377b49e7e18ec2aa9 Signed-off-by: Ferran Balaguer Signed-off-by: Francis Murtagh Signed-off-by: Jim Flynn --- src/armnnSerializer/Serializer.cpp | 65 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) (limited to 'src/armnnSerializer/Serializer.cpp') diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp index eaf19d52b5..3774c250e1 100644 --- a/src/armnnSerializer/Serializer.cpp +++ b/src/armnnSerializer/Serializer.cpp @@ -634,6 +634,71 @@ void SerializerVisitor::VisitSpaceToBatchNdLayer(const armnn::IConnectableLayer* CreateAnyLayer(flatBufferLayer.o, serializer::Layer::Layer_SpaceToBatchNdLayer); } +// Build FlatBuffer for Splitter Layer +void SerializerVisitor::VisitSplitterLayer(const armnn::IConnectableLayer* layer, + const armnn::ViewsDescriptor& viewsDescriptor, + const char* name) +{ + // Create FlatBuffer ViewOrigins + std::vector> flatBufferViewOrigins; + flatBufferViewOrigins.reserve(viewsDescriptor.GetNumViews()); + + for(unsigned int vIdx = 0; vIdx < viewsDescriptor.GetNumViews(); ++vIdx) + { + std::vector viewOrigin; + viewOrigin.reserve(viewsDescriptor.GetNumDimensions()); + + // Copy vector + for(unsigned int dIdx = 0; dIdx < viewsDescriptor.GetNumDimensions(); ++dIdx) + { + viewOrigin.push_back(viewsDescriptor.GetViewOrigin(vIdx)[dIdx]); + } + + flatBufferViewOrigins.push_back(CreateUintVector(m_flatBufferBuilder, + m_flatBufferBuilder.CreateVector(viewOrigin))); + } + + // Create FlatBuffer OriginsDescriptor + auto flatBufferOriginDescriptor = CreateOriginsDescriptor(m_flatBufferBuilder, + viewsDescriptor.GetOrigins().GetConcatAxis(), + viewsDescriptor.GetOrigins().GetNumViews(), + viewsDescriptor.GetOrigins().GetNumDimensions(), + m_flatBufferBuilder.CreateVector(flatBufferViewOrigins)); + + // Create FlatBuffer ViewOrigins + std::vector> flatBufferViewSizes; + flatBufferViewSizes.reserve(viewsDescriptor.GetNumViews()); + + for(unsigned int vIdx = 0; vIdx < viewsDescriptor.GetNumViews(); ++vIdx) + { + std::vector viewSize; + viewSize.reserve(viewsDescriptor.GetNumDimensions()); + + // Copy vector + for(unsigned int dIdx = 0; dIdx < viewsDescriptor.GetNumDimensions(); ++dIdx) + { + viewSize.push_back(viewsDescriptor.GetViewSizes(vIdx)[dIdx]); + } + + flatBufferViewSizes.push_back(CreateUintVector(m_flatBufferBuilder, + m_flatBufferBuilder.CreateVector(viewSize))); + } + + // Create FlatBuffer ViewsDescriptor + auto flatBufferViewsDescriptor = CreateViewsDescriptor(m_flatBufferBuilder, + flatBufferOriginDescriptor, + m_flatBufferBuilder.CreateVector(flatBufferViewSizes)); + + // Create FlatBuffer BaseLayer + auto flatBufferBaseLayer = CreateLayerBase(layer, serializer::LayerType::LayerType_Splitter); + + auto flatBufferSplitterLayer = serializer::CreateSplitterLayer(m_flatBufferBuilder, + flatBufferBaseLayer, + flatBufferViewsDescriptor); + + CreateAnyLayer(flatBufferSplitterLayer.o, serializer::Layer::Layer_SplitterLayer); +} + void SerializerVisitor::VisitNormalizationLayer(const armnn::IConnectableLayer* layer, const armnn::NormalizationDescriptor& descriptor, const char* name) -- cgit v1.2.1