diff options
author | Jim Flynn <jim.flynn@arm.com> | 2019-03-08 11:08:30 +0000 |
---|---|---|
committer | Jim Flynn <jim.flynn@arm.com> | 2019-03-12 10:43:34 +0000 |
commit | 18ce338711fc3ea44a7731eac795964256beac6c (patch) | |
tree | 93467a86f34cea694e08bf539b3d315680771a3a /src/armnnSerializer/Serializer.cpp | |
parent | 1b4d7b1e0646104210f626e7f9613c506f097e90 (diff) | |
download | armnn-18ce338711fc3ea44a7731eac795964256beac6c.tar.gz |
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 <ferran.balaguer@arm.com>
Signed-off-by: Francis Murtagh <francis.murtagh@arm.com>
Signed-off-by: Jim Flynn <jim.flynn@arm.com>
Diffstat (limited to 'src/armnnSerializer/Serializer.cpp')
-rw-r--r-- | src/armnnSerializer/Serializer.cpp | 65 |
1 files changed, 65 insertions, 0 deletions
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<flatbuffers::Offset<UintVector>> flatBufferViewOrigins; + flatBufferViewOrigins.reserve(viewsDescriptor.GetNumViews()); + + for(unsigned int vIdx = 0; vIdx < viewsDescriptor.GetNumViews(); ++vIdx) + { + std::vector<uint32_t> 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<flatbuffers::Offset<UintVector>> flatBufferViewSizes; + flatBufferViewSizes.reserve(viewsDescriptor.GetNumViews()); + + for(unsigned int vIdx = 0; vIdx < viewsDescriptor.GetNumViews(); ++vIdx) + { + std::vector<uint32_t> 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) |