From 6f7ab34bca5f51c1e01d473f5619793bd03f65cc Mon Sep 17 00:00:00 2001 From: Wanming Lin Date: Thu, 23 Oct 2025 15:49:21 +0800 Subject: [PATCH] Fix bug in usage of dequantizeLinear and quantizeLinear Latest WebNN requires dequantizeLinear and quantizeLinear ops have the same rank of input, scale and zeroPoint. --- image_classification/mobilenet_uint8_nhwc.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/image_classification/mobilenet_uint8_nhwc.js b/image_classification/mobilenet_uint8_nhwc.js index 06bd4553..4f39c521 100644 --- a/image_classification/mobilenet_uint8_nhwc.js +++ b/image_classification/mobilenet_uint8_nhwc.js @@ -25,6 +25,12 @@ export class MobileNetV2Uint8Nhwc { } dequantizeLinear_(input, quantizateParams, dataType) { + // WebNN dequantizeLinear op requires the rank of scale and zeroPoint should be same as input. + const missingDims = input.shape.length - quantizateParams.shape.length; + if (missingDims > 0) { + quantizateParams.shape.push(...Array(missingDims).fill(1)); + } + const scale = this.builder_.constant( {dataType: 'float32', shape: quantizateParams.shape}, new Float32Array(quantizateParams.scale)); let zeroPoint; @@ -41,6 +47,12 @@ export class MobileNetV2Uint8Nhwc { } quantizeLinear_(input, quantizateParams) { + // WebNN quantizeLinear op requires the rank of scale and zeroPoint should be same as input. + const missingDims = input.shape.length - quantizateParams.shape.length; + if (missingDims > 0) { + quantizateParams.shape.push(...Array(missingDims).fill(1)); + } + const scale = this.builder_.constant( {dataType: 'float32', shape: quantizateParams.shape}, new Float32Array(quantizateParams.scale)); const zeroPoint = this.builder_.constant( {dataType: 'uint8', shape: quantizateParams.shape},