From daaeaa5881c83b6311f438a46cc03e9e41ad1f36 Mon Sep 17 00:00:00 2001 From: Maksim Doronin Date: Tue, 2 Jun 2020 12:20:06 +0300 Subject: [PATCH] [IE VPU] Enable s32->u8 conversion (#699) --- .../src/vpu/graph_transformer/src/stages/convert.cpp | 1 + .../vpu/common/layers/myriad_layers_convert_test.hpp | 3 ++- .../vpu/vpu_base/myriad_layers_reference_functions.cpp | 2 ++ .../tests_deprecated/helpers/single_layer_common.cpp | 9 +++++++-- .../tests_deprecated/helpers/single_layer_common.hpp | 1 + 5 files changed, 13 insertions(+), 3 deletions(-) diff --git a/inference-engine/src/vpu/graph_transformer/src/stages/convert.cpp b/inference-engine/src/vpu/graph_transformer/src/stages/convert.cpp index ce091ee6ffc..6d994e4408a 100644 --- a/inference-engine/src/vpu/graph_transformer/src/stages/convert.cpp +++ b/inference-engine/src/vpu/graph_transformer/src/stages/convert.cpp @@ -99,6 +99,7 @@ const SupportedConversionSet ConvertStage::expectedTypes = { {DataType::FP32, DataType::FP16}, {DataType::S32, DataType::FP16}, {DataType::FP16, DataType::S32}, + {DataType::S32, DataType::U8}, }; } // namespace diff --git a/inference-engine/tests_deprecated/functional/vpu/common/layers/myriad_layers_convert_test.hpp b/inference-engine/tests_deprecated/functional/vpu/common/layers/myriad_layers_convert_test.hpp index b068a5b6594..571e984621d 100644 --- a/inference-engine/tests_deprecated/functional/vpu/common/layers/myriad_layers_convert_test.hpp +++ b/inference-engine/tests_deprecated/functional/vpu/common/layers/myriad_layers_convert_test.hpp @@ -134,7 +134,8 @@ std::vector inputsDims4D = { std::vector precisionsIO = { {Precision::U8, Precision::FP16}, {Precision::FP32, Precision::FP16}, - {Precision::FP16, Precision::FP32} + {Precision::FP16, Precision::FP32}, + {Precision::I32, Precision::U8} }; std::vector withFP16Precisions = { diff --git a/inference-engine/tests_deprecated/functional/vpu/vpu_base/myriad_layers_reference_functions.cpp b/inference-engine/tests_deprecated/functional/vpu/vpu_base/myriad_layers_reference_functions.cpp index a6a081de95f..4ce5281cd6e 100644 --- a/inference-engine/tests_deprecated/functional/vpu/vpu_base/myriad_layers_reference_functions.cpp +++ b/inference-engine/tests_deprecated/functional/vpu/vpu_base/myriad_layers_reference_functions.cpp @@ -2558,6 +2558,8 @@ void ref_convert(const InferenceEngine::Blob::Ptr &src, } else if (srcPrecision == Precision::I32 && dstPrecision == Precision::FP16) { dst->buffer().as()[i] = PrecisionUtils::f32tof16( static_cast(src->cbuffer().as()[i])); + } else if (srcPrecision == Precision::I32 && dstPrecision == Precision::U8) { + dst->buffer().as()[i] = static_cast(src->cbuffer().as()[i]); } else { THROW_IE_EXCEPTION << "Unsupported input or output precision"; } diff --git a/inference-engine/tests_deprecated/helpers/single_layer_common.cpp b/inference-engine/tests_deprecated/helpers/single_layer_common.cpp index a37f9210cbd..d87ff9f8f7e 100644 --- a/inference-engine/tests_deprecated/helpers/single_layer_common.cpp +++ b/inference-engine/tests_deprecated/helpers/single_layer_common.cpp @@ -68,6 +68,8 @@ BufferWrapper::BufferWrapper(const Blob::Ptr& blob, Precision _precision) : prec fp32_ptr = blob->buffer().as(); } else if (precision == Precision::I32) { i32_ptr = blob->buffer().as(); + } else if (precision == Precision::U8) { + u8_ptr = blob->buffer().as(); } else { THROW_IE_EXCEPTION << "Unsupported precision for compare: " << precision; } @@ -78,6 +80,8 @@ float BufferWrapper::operator[](size_t index) { return PrecisionUtils::f16tof32(fp16_ptr[index]); } else if (precision == Precision::I32) { return i32_ptr[index]; + } else if (precision == Precision::U8) { + return u8_ptr[index]; } return fp32_ptr[index]; } @@ -87,8 +91,9 @@ void BufferWrapper::insert(size_t index, float value) { fp16_ptr[index] = PrecisionUtils::f32tof16(value); } else if (precision == Precision::I32) { i32_ptr[index] = value; - } - else { + } else if (precision == Precision::U8) { + u8_ptr[index] = value; + } else { fp32_ptr[index] = value; } } diff --git a/inference-engine/tests_deprecated/helpers/single_layer_common.hpp b/inference-engine/tests_deprecated/helpers/single_layer_common.hpp index 7b23da41a5c..da399534d53 100644 --- a/inference-engine/tests_deprecated/helpers/single_layer_common.hpp +++ b/inference-engine/tests_deprecated/helpers/single_layer_common.hpp @@ -115,6 +115,7 @@ class BufferWrapper { InferenceEngine::ie_fp16 *fp16_ptr; float *fp32_ptr; int32_t *i32_ptr; + uint8_t *u8_ptr; public: explicit BufferWrapper(const InferenceEngine::Blob::Ptr &blob);