license import { KernelConfig , NonMaxSuppressionV4 , NonMaxSuppressionV4Attrs , NonMaxSuppressionV4Inputs , scalar , Tensor1D , Tensor2D } from '@tensorflow/tfjs' ; import { createTensorsTypeOpAttr , NodeJSKernelBackend } from '../nodejs_kernel_backend' ; export const nonMaxSuppressionV4Config = { kernelName : NonMaxSuppressionV4 , backendName : 'tensorflow' , kernelFunc : ( { inputs , backend , attrs } ) => { const { boxes , scores } = inputs as NonMaxSuppressionV4Inputs ; const { maxOutputSize , iouThreshold , scoreThreshold , padToMaxOutputSize } = attrs as { } as NonMaxSuppressionV4Attrs ; const maxOutputSizeTensor = scalar ( maxOutputSize , 'int32' ) ; const iouThresholdTensor = scalar ( iouThreshold , 'float32' ) ; const scoreThresholdTensor = scalar ( scoreThreshold , 'float32' ) ; const nodeBackend = backend as NodeJSKernelBackend ; const opAttrs = [ createTensorsTypeOpAttr ( 'T' , boxes . dtype ) , createTensorsTypeOpAttr ( 'T_threshold' , 'float32' ) , { name : 'pad_to_max_output_size' , type : nodeBackend . binding . TF_ATTR_BOOL , value : padToMaxOutputSize } ] ; const [ selectedIndices , validOutputs ] = nodeBackend . executeMultipleOutputs ( 'NonMaxSuppressionV4' , opAttrs , [ boxes as Tensor2D , scores as Tensor1D , maxOutputSizeTensor , iouThresholdTensor , scoreThresholdTensor ] , 2 ) ; maxOutputSizeTensor . dispose ( ) ; iouThresholdTensor . dispose ( ) ; scoreThresholdTensor . dispose ( ) ; return [ selectedIndices , validOutputs ] ; } } ;