diff options
author | telsoa01 <telmo.soares@arm.com> | 2018-08-31 09:22:23 +0100 |
---|---|---|
committer | telsoa01 <telmo.soares@arm.com> | 2018-08-31 09:22:23 +0100 |
commit | c577f2c6a3b4ddb6ba87a882723c53a248afbeba (patch) | |
tree | bd7d4c148df27f8be6649d313efb24f536b7cf34 /tests/ImagePreprocessor.cpp | |
parent | 4c7098bfeab1ffe1cdc77f6c15548d3e73274746 (diff) | |
download | armnn-c577f2c6a3b4ddb6ba87a882723c53a248afbeba.tar.gz |
Release 18.08
Diffstat (limited to 'tests/ImagePreprocessor.cpp')
-rw-r--r-- | tests/ImagePreprocessor.cpp | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/tests/ImagePreprocessor.cpp b/tests/ImagePreprocessor.cpp new file mode 100644 index 0000000000..4e46b914ae --- /dev/null +++ b/tests/ImagePreprocessor.cpp @@ -0,0 +1,74 @@ +// +// Copyright © 2017 Arm Ltd. All rights reserved. +// See LICENSE file in the project root for full license information. +// +#include "InferenceTestImage.hpp" +#include "ImagePreprocessor.hpp" +#include "Permute.hpp" +#include <armnn/TypesUtils.hpp> + +#include <boost/numeric/conversion/cast.hpp> +#include <boost/assert.hpp> +#include <boost/format.hpp> + +#include <iostream> +#include <fcntl.h> +#include <array> + +template <typename TDataType> +unsigned int ImagePreprocessor<TDataType>::GetLabelAndResizedImageAsFloat(unsigned int testCaseId, + std::vector<float> & result) +{ + testCaseId = testCaseId % boost::numeric_cast<unsigned int>(m_ImageSet.size()); + const ImageSet& imageSet = m_ImageSet[testCaseId]; + const std::string fullPath = m_BinaryDirectory + imageSet.first; + + InferenceTestImage image(fullPath.c_str()); + + // this ResizeBilinear result is closer to the tensorflow one than STB. + // there is still some difference though, but the inference results are + // similar to tensorflow for MobileNet + + result = image.Resize(m_Width, m_Height, CHECK_LOCATION(), + InferenceTestImage::ResizingMethods::BilinearAndNormalized, + m_Mean, m_Stddev); + + if (m_DataFormat == DataFormat::NCHW) + { + const armnn::PermutationVector NHWCToArmNN = { 0, 2, 3, 1 }; + armnn::TensorShape dstShape({1, 3, m_Height, m_Width}); + std::vector<float> tempImage(result.size()); + armnnUtils::Permute<float>(dstShape, NHWCToArmNN, result.data(), tempImage.data()); + result.swap(tempImage); + } + + return imageSet.second; +} + +template <> +std::unique_ptr<ImagePreprocessor<float>::TTestCaseData> +ImagePreprocessor<float>::GetTestCaseData(unsigned int testCaseId) +{ + std::vector<float> resized; + auto label = GetLabelAndResizedImageAsFloat(testCaseId, resized); + return std::make_unique<TTestCaseData>(label, std::move(resized)); +} + +template <> +std::unique_ptr<ImagePreprocessor<uint8_t>::TTestCaseData> +ImagePreprocessor<uint8_t>::GetTestCaseData(unsigned int testCaseId) +{ + std::vector<float> resized; + auto label = GetLabelAndResizedImageAsFloat(testCaseId, resized); + + size_t resizedSize = resized.size(); + std::vector<uint8_t> quantized(resized.size()); + + for (size_t i=0; i<resizedSize; ++i) + { + quantized[i] = armnn::Quantize<uint8_t>(resized[i], + m_Scale, + m_Offset); + } + return std::make_unique<TTestCaseData>(label, std::move(quantized)); +} |