// // Copyright © 2021 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // #include "Decoder.hpp" std::pair kws::Decoder::decodeOutput(std::vector& modelOutput) { std::vector dequantisedOutput; //Normalise vector values into new vector for (auto& value : modelOutput) { float normalisedModelOutput = this->quantisationScale * (static_cast(value) - static_cast(this->quantisationOffset)); dequantisedOutput.push_back(normalisedModelOutput); } //Get largest value in modelOutput const std::vector::iterator& maxElementIterator = std::max_element(dequantisedOutput.begin(), dequantisedOutput.end()); //Find the labelMapIndex of the largest value which corresponds to a key in a label map int labelMapIndex = static_cast(std::distance(dequantisedOutput.begin(), maxElementIterator)); //Round to two DP float maxModelOutputProbability = std::roundf((*maxElementIterator) * 100) / 100; return std::make_pair(labelMapIndex, maxModelOutputProbability); }