From e27f2dc932f7c875c7f300cb5ebd4f12c62e6681 Mon Sep 17 00:00:00 2001 From: Yi-Hong Lyu Date: Wed, 19 Jan 2022 06:37:34 +0800 Subject: [PATCH] int8/uint8 support for Argmax for opset 1, 11, 12 (#10296) --- docs/OperatorKernels.md | 4 ++-- .../core/providers/cpu/cpu_execution_provider.cc | 12 ++++++++++++ .../providers/cpu/reduction/reduction_ops.cc | 4 ++++ .../cpu/reduction/reduction_ops_test.cc | 4 ++-- .../testdata/kernel_def_hashes/onnx.cpu.json | 16 ++++++++++++++++ 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/docs/OperatorKernels.md b/docs/OperatorKernels.md index 7e311e15c0..4d885fdb15 100644 --- a/docs/OperatorKernels.md +++ b/docs/OperatorKernels.md @@ -26,8 +26,8 @@ Do not modify directly.* |Affine|*in* X:**T**
*out* Y:**T**|1+|**T** = tensor(float)| |And|*in* A:**T**
*in* B:**T**
*out* C:**T1**|7+|**T** = tensor(bool)
**T1** = tensor(bool)| |ArgMax|*in* data:**T**
*out* reduced:**tensor(int64)**|13+|**T** = tensor(double), tensor(float), tensor(int32), tensor(int8), tensor(uint8)| -|||[11, 12]|**T** = tensor(double), tensor(float), tensor(int32)| -|||[1, 10]|**T** = tensor(float), tensor(int32)| +|||[11, 12]|**T** = tensor(double), tensor(float), tensor(int32), tensor(int8), tensor(uint8)| +|||[1, 10]|**T** = tensor(float), tensor(int32), tensor(int8), tensor(uint8)| |ArgMin|*in* data:**T**
*out* reduced:**tensor(int64)**|13+|**T** = tensor(double), tensor(float), tensor(int32)| |||[11, 12]|**T** = tensor(double), tensor(float), tensor(int32)| |||[1, 10]|**T** = tensor(float), tensor(int32)| diff --git a/onnxruntime/core/providers/cpu/cpu_execution_provider.cc b/onnxruntime/core/providers/cpu/cpu_execution_provider.cc index eb12b7c4fd..ef5e821319 100644 --- a/onnxruntime/core/providers/cpu/cpu_execution_provider.cc +++ b/onnxruntime/core/providers/cpu/cpu_execution_provider.cc @@ -183,6 +183,8 @@ class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOn class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 10, double, ReduceSumSquare); class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 10, float, ArgMax); +class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 10, int8_t, ArgMax); +class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 10, uint8_t, ArgMax); class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 10, int32_t, ArgMax); class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 10, float, ArgMin); class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 1, 10, int32_t, ArgMin); @@ -340,6 +342,8 @@ class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, class ONNX_OPERATOR_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, uint8_t, DynamicQuantizeLinear); class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 12, float, ArgMax); class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 12, double, ArgMax); +class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 12, int8_t, ArgMax); +class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 12, uint8_t, ArgMax); class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 12, int32_t, ArgMax); class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 12, float, ArgMin); class ONNX_OPERATOR_VERSIONED_TYPED_KERNEL_CLASS_NAME(kCpuExecutionProvider, kOnnxDomain, 11, 12, double, ArgMin); @@ -998,6 +1002,10 @@ Status RegisterOnnxOperatorKernels(KernelRegistry& kernel_registry) { double, ReduceSumSquare)>, BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo, + BuildKernelCreateInfo, + BuildKernelCreateInfo, BuildKernelCreateInfo, BuildKernelCreateInfo(1)); test.AddAttribute("keepdims", static_cast(1)); test.AddInput("data", {3, 2, 2}, @@ -2219,7 +2219,7 @@ TEST(ReductionOpTest, ArgMax_int8) { } TEST(ReductionOpTest, ArgMax_uint8) { - OpTester test("ArgMax", 13); + OpTester test("ArgMax"); test.AddAttribute("axis", static_cast(1)); test.AddAttribute("keepdims", static_cast(1)); test.AddInput("data", {3, 2, 2}, diff --git a/onnxruntime/test/testdata/kernel_def_hashes/onnx.cpu.json b/onnxruntime/test/testdata/kernel_def_hashes/onnx.cpu.json index 88974c2b26..0aac7d8962 100644 --- a/onnxruntime/test/testdata/kernel_def_hashes/onnx.cpu.json +++ b/onnxruntime/test/testdata/kernel_def_hashes/onnx.cpu.json @@ -139,6 +139,10 @@ "And ai.onnx CPUExecutionProvider", 7931711152704979424 ], + [ + "ArgMax ai.onnx CPUExecutionProvider", + 725939091209285112 + ], [ "ArgMax ai.onnx CPUExecutionProvider", 1506815612154586624 @@ -163,6 +167,14 @@ "ArgMax ai.onnx CPUExecutionProvider", 3776111440658888968 ], + [ + "ArgMax ai.onnx CPUExecutionProvider", + 4620340115180881848 + ], + [ + "ArgMax ai.onnx CPUExecutionProvider", + 10486830423259333928 + ], [ "ArgMax ai.onnx CPUExecutionProvider", 12157492629288967928 @@ -179,6 +191,10 @@ "ArgMax ai.onnx CPUExecutionProvider", 14910778597193697496 ], + [ + "ArgMax ai.onnx CPUExecutionProvider", + 18394842867298045376 + ], [ "ArgMin ai.onnx CPUExecutionProvider", 3259714541817453752