mirror of
https://github.com/apache/nuttx-apps.git
synced 2026-08-09 06:25:16 +00:00
ml: tflm quantize optimization patch
Separate the 'Float32 to Int8' implementation of the 'quantize' operator to reduce the code size. Signed-off-by: xinhaiteng <xinhaiteng@xiaomi.com>
This commit is contained in:
parent
570102c501
commit
068b2b16bb
2 changed files with 109 additions and 0 deletions
108
mlearning/tflite-micro/0002-quantize-int8.patch
Normal file
108
mlearning/tflite-micro/0002-quantize-int8.patch
Normal file
|
|
@ -0,0 +1,108 @@
|
|||
From b7c954c7594b9a39df5604dbadf6e59b6f98b1e9 Mon Sep 17 00:00:00 2001
|
||||
From: xinhaiteng <xinhaiteng@xiaomi.com>
|
||||
Date: Wed, 24 Apr 2024 09:18:52 +0800
|
||||
Subject: [PATCH] tflite: add quantize float32 to int8 operator
|
||||
|
||||
VELAPLATFO-30990
|
||||
|
||||
Separate the 'Float32 to Int8' implementation of the 'quantize' operator to reduce the code size.
|
||||
|
||||
Change-Id: I83dc809d36587741f3087b25e83e454b30f9626b
|
||||
Signed-off-by: xinhaiteng <xinhaiteng@xiaomi.com>
|
||||
---
|
||||
tensorflow/lite/micro/kernels/quantize.cc | 5 +++++
|
||||
tensorflow/lite/micro/kernels/quantize.h | 4 ++++
|
||||
tensorflow/lite/micro/kernels/quantize_common.cc | 16 ++++++++++++++++
|
||||
.../lite/micro/micro_mutable_op_resolver.h | 7 ++++---
|
||||
4 files changed, 29 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/tensorflow/lite/micro/kernels/quantize.cc b/tensorflow/lite/micro/kernels/quantize.cc
|
||||
index ba11f19b6..a6ff4f055 100644
|
||||
--- a/tensorflow/lite/micro/kernels/quantize.cc
|
||||
+++ b/tensorflow/lite/micro/kernels/quantize.cc
|
||||
@@ -39,4 +39,9 @@ TFLMRegistration Register_QUANTIZE() {
|
||||
InitQuantizeReference, PrepareQuantizeReference, EvalQuantizeReference);
|
||||
}
|
||||
|
||||
+TFLMRegistration Register_QUANTIZE_FLOAT32_INT8() {
|
||||
+ return tflite::micro::RegisterOp(
|
||||
+ InitQuantizeReference, PrepareQuantizeReference, EvalQuantizeReferenceFloat32ToInt8);
|
||||
+}
|
||||
+
|
||||
} // namespace tflite
|
||||
diff --git a/tensorflow/lite/micro/kernels/quantize.h b/tensorflow/lite/micro/kernels/quantize.h
|
||||
index ba93809a2..b97e4a2ab 100644
|
||||
--- a/tensorflow/lite/micro/kernels/quantize.h
|
||||
+++ b/tensorflow/lite/micro/kernels/quantize.h
|
||||
@@ -17,6 +17,7 @@ limitations under the License.
|
||||
|
||||
#include "tensorflow/lite/c/common.h"
|
||||
#include "tensorflow/lite/kernels/internal/types.h"
|
||||
+#include "tensorflow/lite/micro/micro_common.h"
|
||||
|
||||
namespace tflite {
|
||||
|
||||
@@ -31,7 +32,10 @@ struct OpDataQuantizeReference {
|
||||
};
|
||||
|
||||
TfLiteStatus EvalQuantizeReference(TfLiteContext* context, TfLiteNode* node);
|
||||
+TfLiteStatus EvalQuantizeReferenceFloat32ToInt8(TfLiteContext* context, TfLiteNode* node);
|
||||
TfLiteStatus PrepareQuantizeReference(TfLiteContext* context, TfLiteNode* node);
|
||||
+
|
||||
+TFLMRegistration Register_QUANTIZE_FLOAT32_INT8();
|
||||
} // namespace tflite
|
||||
|
||||
#endif // TENSORFLOW_LITE_MICRO_KERNELS_QUANTIZE_H_
|
||||
diff --git a/tensorflow/lite/micro/kernels/quantize_common.cc b/tensorflow/lite/micro/kernels/quantize_common.cc
|
||||
index cb04eafce..6bdd0df39 100644
|
||||
--- a/tensorflow/lite/micro/kernels/quantize_common.cc
|
||||
+++ b/tensorflow/lite/micro/kernels/quantize_common.cc
|
||||
@@ -236,4 +236,20 @@ TfLiteStatus EvalQuantizeReference(TfLiteContext* context, TfLiteNode* node) {
|
||||
return kTfLiteOk;
|
||||
}
|
||||
|
||||
+TfLiteStatus EvalQuantizeReferenceFloat32ToInt8(TfLiteContext* context, TfLiteNode* node) {
|
||||
+ TFLITE_DCHECK(node->user_data != nullptr);
|
||||
+ auto* data = static_cast<OpDataQuantizeReference*>(node->user_data);
|
||||
+
|
||||
+ const TfLiteEvalTensor* input = tflite::micro::GetEvalInput(context, node, 0);
|
||||
+ TfLiteEvalTensor* output = tflite::micro::GetEvalOutput(context, node, 0);
|
||||
+
|
||||
+ TFLITE_DCHECK(input->type == kTfLiteFloat32 && output->type == kTfLiteInt8);
|
||||
+ reference_ops::AffineQuantize(
|
||||
+ data->quantization_params, tflite::micro::GetTensorShape(input),
|
||||
+ tflite::micro::GetTensorData<float>(input),
|
||||
+ tflite::micro::GetTensorShape(output),
|
||||
+ tflite::micro::GetTensorData<int8_t>(output));
|
||||
+ return kTfLiteOk;
|
||||
+}
|
||||
+
|
||||
} // namespace tflite
|
||||
diff --git a/tensorflow/lite/micro/micro_mutable_op_resolver.h b/tensorflow/lite/micro/micro_mutable_op_resolver.h
|
||||
index b3e3cbcf8..ec8979c4e 100644
|
||||
--- a/tensorflow/lite/micro/micro_mutable_op_resolver.h
|
||||
+++ b/tensorflow/lite/micro/micro_mutable_op_resolver.h
|
||||
@@ -32,6 +32,7 @@ limitations under the License.
|
||||
#include "tensorflow/lite/micro/kernels/micro_ops.h"
|
||||
#include "tensorflow/lite/micro/kernels/mul.h"
|
||||
#include "tensorflow/lite/micro/kernels/pooling.h"
|
||||
+#include "tensorflow/lite/micro/kernels/quantize.h"
|
||||
#include "tensorflow/lite/micro/kernels/reduce.h"
|
||||
#include "tensorflow/lite/micro/kernels/softmax.h"
|
||||
#include "tensorflow/lite/micro/kernels/transpose_conv.h"
|
||||
@@ -481,9 +482,9 @@ class MicroMutableOpResolver : public MicroOpResolver {
|
||||
ParsePrelu);
|
||||
}
|
||||
|
||||
- TfLiteStatus AddQuantize() {
|
||||
- return AddBuiltin(BuiltinOperator_QUANTIZE, Register_QUANTIZE(),
|
||||
- ParseQuantize);
|
||||
+ TfLiteStatus AddQuantize(
|
||||
+ const TFLMRegistration& registration = Register_QUANTIZE()) {
|
||||
+ return AddBuiltin(BuiltinOperator_QUANTIZE, registration, ParseQuantize);
|
||||
}
|
||||
|
||||
TfLiteStatus AddReadVariable() {
|
||||
--
|
||||
2.25.1
|
||||
|
||||
|
|
@ -29,6 +29,7 @@ tflite-micro.zip:
|
|||
$(Q) mv tflite-micro-$(TFLITE_MICRO_VER) tflite-micro
|
||||
$(Q) patch -d $(TFLITE_MICRO_UNPACK) -p1 < tflite-micro.patch
|
||||
$(Q) patch -d $(TFLITE_MICRO_UNPACK) -p1 < 0001-dequantize-int8.patch
|
||||
$(Q) patch -d $(TFLITE_MICRO_UNPACK) -p1 < 0002-quantize-int8.patch
|
||||
|
||||
# Download and unpack tarball if no git repo found
|
||||
ifeq ($(wildcard tflite-micro/.git),)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue