Mat getTensorContent(const tensorflow::TensorProto &tensor)
{
- std::string content = tensor.tensor_content();
+ const std::string& content = tensor.tensor_content();
switch (tensor.dtype())
{
case tensorflow::DT_FLOAT:
return Mat();
}
+void releaseTensor(tensorflow::TensorProto* tensor)
+{
+ if (!tensor->mutable_tensor_content()->empty())
+ {
+ delete tensor->release_tensor_content();
+ }
+}
+
CV__DNN_EXPERIMENTAL_NS_END
}} // namespace dnn, namespace cv
Mat getTensorContent(const tensorflow::TensorProto &tensor);
+void releaseTensor(tensorflow::TensorProto* tensor);
+
CV__DNN_EXPERIMENTAL_NS_END
}} // namespace dnn, namespace cv
layers_to_ignore.insert(next_layers[0].first);
}
- kernelFromTensor(getConstBlob(layer, value_id), layerParams.blobs[0]);
+ const tensorflow::TensorProto& kernelTensor = getConstBlob(layer, value_id);
+ kernelFromTensor(kernelTensor, layerParams.blobs[0]);
+ releaseTensor(const_cast<tensorflow::TensorProto*>(&kernelTensor));
int* kshape = layerParams.blobs[0].size.p;
if (type == "DepthwiseConv2dNative")
{
}
int kernel_blob_index = -1;
- blobFromTensor(getConstBlob(layer, value_id, -1, &kernel_blob_index), layerParams.blobs[0]);
+ const tensorflow::TensorProto& kernelTensor = getConstBlob(layer, value_id, -1, &kernel_blob_index);
+ blobFromTensor(kernelTensor, layerParams.blobs[0]);
+ releaseTensor(const_cast<tensorflow::TensorProto*>(&kernelTensor));
if (kernel_blob_index == 1) { // In this case output is computed by x*W formula - W should be transposed
Mat data = layerParams.blobs[0].t();