This is an automated email from the ASF dual-hosted git repository.

xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx-apps.git

commit 14a591fab27c7bdfa28eacd6109d9f15fa5894a9
Author: jihandong <jihand...@xiaomi.com>
AuthorDate: Wed Apr 24 17:37:09 2024 +0800

    ml: tflm dequantize optimization patch
    
    Signed-off-by: jihandong <jihand...@xiaomi.com>
---
 mlearning/tflite-micro/0001-dequantize-int8.patch | 101 ++++++++++++++++++++++
 mlearning/tflite-micro/Makefile                   |   1 +
 2 files changed, 102 insertions(+)

diff --git a/mlearning/tflite-micro/0001-dequantize-int8.patch 
b/mlearning/tflite-micro/0001-dequantize-int8.patch
new file mode 100644
index 000000000..92babecac
--- /dev/null
+++ b/mlearning/tflite-micro/0001-dequantize-int8.patch
@@ -0,0 +1,101 @@
+From 0cd2a39a346d84da3002fa7ba4085cfc3c61c8ee Mon Sep 17 00:00:00 2001
+From: jihandong <jihand...@xiaomi.com>
+Date: Mon, 22 Apr 2024 18:14:44 +0800
+Subject: [PATCH 2/2] dequantize int8
+
+VELAPLATFO-30990
+
+Change-Id: I0e741a72464c7e497425175d2fcd63f14ed6897b
+Signed-off-by: jihandong <jihand...@xiaomi.com>
+---
+ tensorflow/lite/micro/kernels/dequantize.cc   | 21 +++++++++++++++++++
+ tensorflow/lite/micro/kernels/dequantize.h    |  5 ++++-
+ .../lite/micro/micro_mutable_op_resolver.h    |  6 ++++--
+ 3 files changed, 29 insertions(+), 3 deletions(-)
+
+diff --git a/tensorflow/lite/micro/kernels/dequantize.cc 
b/tensorflow/lite/micro/kernels/dequantize.cc
+index 428c866a..48f50de4 100644
+--- a/tensorflow/lite/micro/kernels/dequantize.cc
++++ b/tensorflow/lite/micro/kernels/dequantize.cc
+@@ -76,9 +76,30 @@ TfLiteStatus DequantizeEval(TfLiteContext* context, 
TfLiteNode* node) {
+   return kTfLiteOk;
+ }
+ 
++TfLiteStatus DequantizeEvalInt8(TfLiteContext* context, TfLiteNode* node) {
++  TFLITE_DCHECK(node->user_data != nullptr);
++  DequantizeOpData* data = static_cast<DequantizeOpData*>(node->user_data);
++
++  const TfLiteEvalTensor* input = tflite::micro::GetEvalInput(context, node, 
0);
++  TfLiteEvalTensor* output = tflite::micro::GetEvalOutput(context, node, 0);
++
++  TFLITE_DCHECK(input->type == kTfLiteInt8 && output->type == kTfLiteFloat32);
++  reference_ops::Dequantize(data->quantization_params,
++                            tflite::micro::GetTensorShape(input),
++                            tflite::micro::GetTensorData<int8_t>(input),
++                            tflite::micro::GetTensorShape(output),
++                            tflite::micro::GetTensorData<float>(output));
++  return kTfLiteOk;
++}
++
+ TFLMRegistration Register_DEQUANTIZE() {
+   return tflite::micro::RegisterOp(DequantizeInit, DequantizePrepare,
+                                    DequantizeEval);
+ }
+ 
++TFLMRegistration Register_DEQUANTIZE_INT8() {
++  return tflite::micro::RegisterOp(DequantizeInit, DequantizePrepare,
++                                   DequantizeEvalInt8);
++}
++
+ }  // namespace tflite
+diff --git a/tensorflow/lite/micro/kernels/dequantize.h 
b/tensorflow/lite/micro/kernels/dequantize.h
+index fe6ec169..3dede725 100644
+--- a/tensorflow/lite/micro/kernels/dequantize.h
++++ b/tensorflow/lite/micro/kernels/dequantize.h
+@@ -17,8 +17,8 @@ limitations under the License.
+ #define TENSORFLOW_LITE_MICRO_KERNELS_DEQUANTIZE_H_
+ 
+ #include "tensorflow/lite/c/builtin_op_data.h"
+-#include "tensorflow/lite/c/common.h"
+ #include "tensorflow/lite/kernels/internal/types.h"
++#include "tensorflow/lite/micro/micro_common.h"
+ 
+ namespace tflite {
+ 
+@@ -33,6 +33,9 @@ struct DequantizeOpData {
+ 
+ TfLiteStatus DequantizePrepare(TfLiteContext* context, TfLiteNode* node);
+ 
++TFLMRegistration Register_DEQUANTIZE();
++TFLMRegistration Register_DEQUANTIZE_INT8();
++
+ }  // namespace tflite
+ 
+ #endif  // TENSORFLOW_LITE_MICRO_KERNELS_DEQUANTIZE_H_
+diff --git a/tensorflow/lite/micro/micro_mutable_op_resolver.h 
b/tensorflow/lite/micro/micro_mutable_op_resolver.h
+index f5f6e38e..b3e3cbcf 100644
+--- a/tensorflow/lite/micro/micro_mutable_op_resolver.h
++++ b/tensorflow/lite/micro/micro_mutable_op_resolver.h
+@@ -26,6 +26,7 @@ limitations under the License.
+ #include "tensorflow/lite/micro/kernels/add.h"
+ #include "tensorflow/lite/micro/kernels/conv.h"
+ #include "tensorflow/lite/micro/kernels/depthwise_conv.h"
++#include "tensorflow/lite/micro/kernels/dequantize.h"
+ #include "tensorflow/lite/micro/kernels/ethosu.h"
+ #include "tensorflow/lite/micro/kernels/fully_connected.h"
+ #include "tensorflow/lite/micro/kernels/micro_ops.h"
+@@ -217,8 +218,9 @@ class MicroMutableOpResolver : public MicroOpResolver {
+                       ParseDepthwiseConv2D);
+   }
+ 
+-  TfLiteStatus AddDequantize() {
+-    return AddBuiltin(BuiltinOperator_DEQUANTIZE, 
tflite::Register_DEQUANTIZE(),
++  TfLiteStatus AddDequantize(
++      const TFLMRegistration& registration = Register_DEQUANTIZE()) {
++    return AddBuiltin(BuiltinOperator_DEQUANTIZE, registration,
+                       ParseDequantize);
+   }
+ 
+-- 
+2.25.1
+
diff --git a/mlearning/tflite-micro/Makefile b/mlearning/tflite-micro/Makefile
index 60bc2fbe0..ece087e72 100644
--- a/mlearning/tflite-micro/Makefile
+++ b/mlearning/tflite-micro/Makefile
@@ -28,6 +28,7 @@ tflite-micro.zip:
        $(Q) unzip -o 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
 
 # Download and unpack tarball if no git repo found
 ifeq ($(wildcard tflite-micro/.git),)

Reply via email to