summaryrefslogtreecommitdiff
path: root/source/use_case
diff options
context:
space:
mode:
authorIsabella Gottardi <isabella.gottardi@arm.com>2021-10-20 15:52:32 +0100
committerIsabella Gottardi <isabella.gottardi@arm.com>2021-10-25 08:51:10 +0000
commit79d4154ee071d0e7ef2d1eecdde149d488bb9d8b (patch)
tree21c8c0a2bd187a925f28045d4a57e9e4ef05be82 /source/use_case
parent14ab8d447c5f12df2ac7fd4217fc0d2005b02dca (diff)
downloadml-embedded-evaluation-kit-79d4154ee071d0e7ef2d1eecdde149d488bb9d8b.tar.gz
MLECO-2458 and MLECO-2476 [Fix] VWW IFM quant step
* Changed image->cc conversion to be similar with preprocessing of img_class and vww models: images are scaled maintaing the aspect ration and then the centre crop of the correct size is taken. * VWW applies input quantization info to the int8 image (prior converted to [0,1] float range). * Changed adult_blur to a image without person. * Fix menu print when selecting a specific ifm to run (Select message was displayed after typing something) Change-Id: Ie6cde7ab4835ea842667b87397458a5d32131df3
Diffstat (limited to 'source/use_case')
-rw-r--r--source/use_case/ad/src/MainLoop.cc1
-rw-r--r--source/use_case/asr/src/MainLoop.cc1
-rw-r--r--source/use_case/img_class/src/MainLoop.cc1
-rw-r--r--source/use_case/img_class/src/UseCaseHandler.cc2
-rw-r--r--source/use_case/kws/src/MainLoop.cc1
-rw-r--r--source/use_case/kws_asr/src/MainLoop.cc1
-rw-r--r--source/use_case/vww/src/MainLoop.cc1
-rw-r--r--source/use_case/vww/src/UseCaseHandler.cc18
8 files changed, 20 insertions, 6 deletions
diff --git a/source/use_case/ad/src/MainLoop.cc b/source/use_case/ad/src/MainLoop.cc
index 3c2f9cc..a323610 100644
--- a/source/use_case/ad/src/MainLoop.cc
+++ b/source/use_case/ad/src/MainLoop.cc
@@ -90,6 +90,7 @@ void main_loop(hal_platform& platform)
case MENU_OPT_RUN_INF_CHOSEN: {
printf(" Enter the data index [0, %d]: ",
NUMBER_OF_FILES-1);
+ fflush(stdout);
auto audioIndex = static_cast<uint32_t>(
arm::app::ReadUserInputAsInt(platform));
executionSuccessful = ClassifyVibrationHandler(caseContext,
diff --git a/source/use_case/asr/src/MainLoop.cc b/source/use_case/asr/src/MainLoop.cc
index 42bb08e..87145f4 100644
--- a/source/use_case/asr/src/MainLoop.cc
+++ b/source/use_case/asr/src/MainLoop.cc
@@ -133,6 +133,7 @@ void main_loop(hal_platform& platform)
case MENU_OPT_RUN_INF_CHOSEN: {
printf(" Enter the audio clip index [0, %d]: ",
NUMBER_OF_FILES-1);
+ fflush(stdout);
auto clipIndex = static_cast<uint32_t>(
arm::app::ReadUserInputAsInt(platform));
executionSuccessful = ClassifyAudioHandler(caseContext,
diff --git a/source/use_case/img_class/src/MainLoop.cc b/source/use_case/img_class/src/MainLoop.cc
index 79f6018..ea9f14a 100644
--- a/source/use_case/img_class/src/MainLoop.cc
+++ b/source/use_case/img_class/src/MainLoop.cc
@@ -68,6 +68,7 @@ void main_loop(hal_platform& platform)
break;
case common::MENU_OPT_RUN_INF_CHOSEN: {
printf(" Enter the image index [0, %d]: ", NUMBER_OF_FILES-1);
+ fflush(stdout);
auto imgIndex = static_cast<uint32_t>(arm::app::ReadUserInputAsInt(platform));
executionSuccessful = ClassifyImageHandler(caseContext, imgIndex, false);
break;
diff --git a/source/use_case/img_class/src/UseCaseHandler.cc b/source/use_case/img_class/src/UseCaseHandler.cc
index 66df1da..effc06f 100644
--- a/source/use_case/img_class/src/UseCaseHandler.cc
+++ b/source/use_case/img_class/src/UseCaseHandler.cc
@@ -97,7 +97,7 @@ namespace app {
/* Display this image on the LCD. */
platform.data_psn->present_data_image(
- (uint8_t*) inputTensor->data.data,
+ static_cast<uint8_t *>(inputTensor->data.data),
nCols, nRows, nChannels,
dataPsnImgStartX, dataPsnImgStartY, dataPsnImgDownscaleFactor);
diff --git a/source/use_case/kws/src/MainLoop.cc b/source/use_case/kws/src/MainLoop.cc
index 80254d0..c683e71 100644
--- a/source/use_case/kws/src/MainLoop.cc
+++ b/source/use_case/kws/src/MainLoop.cc
@@ -95,6 +95,7 @@ void main_loop(hal_platform& platform)
break;
case MENU_OPT_RUN_INF_CHOSEN: {
printf(" Enter the audio clip index [0, %d]: ", NUMBER_OF_FILES-1);
+ fflush(stdout);
auto clipIndex = static_cast<uint32_t>(arm::app::ReadUserInputAsInt(platform));
executionSuccessful = ClassifyAudioHandler(caseContext, clipIndex, false);
break;
diff --git a/source/use_case/kws_asr/src/MainLoop.cc b/source/use_case/kws_asr/src/MainLoop.cc
index ed9034f..d5a2c2b 100644
--- a/source/use_case/kws_asr/src/MainLoop.cc
+++ b/source/use_case/kws_asr/src/MainLoop.cc
@@ -161,6 +161,7 @@ void main_loop(hal_platform& platform)
case MENU_OPT_RUN_INF_CHOSEN: {
printf(" Enter the audio clip index [0, %d]: ",
NUMBER_OF_FILES-1);
+ fflush(stdout);
auto clipIndex = static_cast<uint32_t>(
arm::app::ReadUserInputAsInt(platform));
executionSuccessful = ClassifyAudioHandler(caseContext,
diff --git a/source/use_case/vww/src/MainLoop.cc b/source/use_case/vww/src/MainLoop.cc
index f026cc2..b29238c 100644
--- a/source/use_case/vww/src/MainLoop.cc
+++ b/source/use_case/vww/src/MainLoop.cc
@@ -67,6 +67,7 @@ void main_loop(hal_platform &platform)
break;
case common::MENU_OPT_RUN_INF_CHOSEN: {
printf(" Enter the image index [0, %d]: ", NUMBER_OF_FILES-1);
+ fflush(stdout);
auto imgIndex = static_cast<uint32_t>(arm::app::ReadUserInputAsInt(platform));
executionSuccessful = ClassifyImageHandler(caseContext, imgIndex, false);
break;
diff --git a/source/use_case/vww/src/UseCaseHandler.cc b/source/use_case/vww/src/UseCaseHandler.cc
index fb2e837..d384032 100644
--- a/source/use_case/vww/src/UseCaseHandler.cc
+++ b/source/use_case/vww/src/UseCaseHandler.cc
@@ -21,6 +21,8 @@
#include "UseCaseCommonUtils.hpp"
#include "hal.h"
+#include <algorithm>
+
namespace arm {
namespace app {
@@ -94,13 +96,19 @@ namespace app {
/* Display this image on the LCD. */
platform.data_psn->present_data_image(
- (uint8_t *) inputTensor->data.data,
+ static_cast<uint8_t *>(inputTensor->data.data),
nCols, nRows, nChannels,
dataPsnImgStartX, dataPsnImgStartY, dataPsnImgDownscaleFactor);
- /* If the data is signed. */
- if (model.IsDataSigned()) {
- image::ConvertImgToInt8(inputTensor->data.data, inputTensor->bytes);
+ /* Vww model preprocessing is image conversion from uint8 to [0,1] float values,
+ * then quantize them with input quantization info. */
+ QuantParams inQuantParams = GetTensorQuantParams(inputTensor);
+
+ auto* req_data = static_cast<uint8_t *>(inputTensor->data.data);
+ auto* signed_req_data = static_cast<int8_t *>(inputTensor->data.data);
+ for (size_t i = 0; i < inputTensor->bytes; i++) {
+ auto i_data_int8 = static_cast<int8_t>(((static_cast<float>(req_data[i]) / 255.0f) / inQuantParams.scale) + inQuantParams.offset);
+ signed_req_data[i] = std::min<int8_t>(INT8_MAX, std::max<int8_t>(i_data_int8, INT8_MIN));
}
/* Display message on the LCD - inference running. */
@@ -159,7 +167,7 @@ namespace app {
const uint32_t nChannels = (inputTensor->dims->size == 4) ? inputTensor->dims->data[3] : 1;
const uint8_t* srcPtr = get_img_array(imIdx);
- auto* dstPtr = (uint8_t*)inputTensor->data.data;
+ auto* dstPtr = static_cast<uint8_t *>(inputTensor->data.data);
if (1 == nChannels) {
/**
* Visual Wake Word model accepts only one channel =>