From 1b5f325d435712f9ff688746e41fe159b317a823 Mon Sep 17 00:00:00 2001 From: "Efimov Alexander/AI Tools Lab/./Samsung Electronics" Date: Tue, 28 Aug 2018 17:57:55 +0300 Subject: [PATCH] Fix caffe blob import (#1211) Replace copy of float into char array with float to float copy Signed-off-by: Efimov Alexander --- .../nnc/plugin/frontend/caffe/src/caffe_model_visitor.cpp | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/contrib/nnc/plugin/frontend/caffe/src/caffe_model_visitor.cpp b/contrib/nnc/plugin/frontend/caffe/src/caffe_model_visitor.cpp index eaa812e..5934480 100644 --- a/contrib/nnc/plugin/frontend/caffe/src/caffe_model_visitor.cpp +++ b/contrib/nnc/plugin/frontend/caffe/src/caffe_model_visitor.cpp @@ -152,14 +152,21 @@ std::shared_ptr ModelVisitor::createTensor(const BlobProto &bp) IrTensor::DTYPE type = IrTensor::DTYPE::FLOAT; size_t elementSize; + const char *srcData; + size_t bufferSize; + if (bp.data_size() != 0) { assert(bp.double_data_size() == 0); elementSize = sizeof(float); + bufferSize = bp.data_size() * elementSize; + srcData = reinterpret_cast(bp.data().data()); } else if (bp.double_data_size() != 0) { elementSize = sizeof(double); + bufferSize = bp.double_data_size() * elementSize; + srcData = reinterpret_cast(bp.double_data().data()); } else { @@ -167,10 +174,11 @@ std::shared_ptr ModelVisitor::createTensor(const BlobProto &bp) } // Create untyped tensor. Note, tensor contents will be *copied* here. - std::shared_ptr tensorBufferCopy(new char[bp.data().size() * elementSize], - [](char *d) { delete[] d; }); + std::shared_ptr tensorBufferCopy(new char[bufferSize], + std::default_delete()); - std::copy(bp.data().begin(), bp.data().end(), tensorBufferCopy.get()); + char *dstData = tensorBufferCopy.get(); + memcpy(dstData, srcData, bufferSize); Shape tensorShape = common::ShapeHelper::createShape( bp.shape().dim(), static_cast(bp.shape().dim_size())); -- 2.7.4