UNPKG

@tensorflow/tfjs-backend-wasm

Version:

This package adds a WebAssembly backend to TensorFlow.js. It currently supports the following models from our [models](https://github.com/tensorflow/tfjs-models) repo: - BlazeFace - BodyPix - CocoSSD - Face landmarks detection - HandPose - KNN classifier

64 lines 10.9 kB
/** * @license * Copyright 2023 Google LLC. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ============================================================================= */ import { backend_util, Dilation2DBackpropInput } from '@tensorflow/tfjs-core'; import { CppDType } from './types'; let wasmDilation2DBackpropInput; function setup(backend) { wasmDilation2DBackpropInput = backend.wasm.cwrap(Dilation2DBackpropInput, null, [ 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', 'number', // padLeft ]); } export function dilation2DBackpropInput(args) { const { inputs, backend, attrs } = args; const { x, filter, dy } = inputs; const { strides, pad, dilations } = attrs; if (x.dtype !== filter.dtype || x.dtype !== dy.dtype) { throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${x.dtype}, ${filter.dtype}, and ${dy.dtype}`); } const dilationInfo = backend_util.computeDilation2DInfo(x.shape, filter.shape, strides, pad, /*dataFormat=*/ 'NHWC', dilations); const gradients = backend.makeOutput(x.shape, x.dtype); wasmDilation2DBackpropInput(backend.dataIdMap.get(x.dataId).id, backend.dataIdMap.get(filter.dataId).id, backend.dataIdMap.get(dy.dataId).id, backend.dataIdMap.get(gradients.dataId).id, CppDType[x.dtype], dilationInfo.batchSize, /*depth=*/ dilationInfo.inChannels, dilationInfo.inHeight, dilationInfo.inWidth, dilationInfo.outHeight, dilationInfo.outWidth, dilationInfo.strideHeight, dilationInfo.strideWidth, dilationInfo.dilationHeight, dilationInfo.dilationWidth, dilationInfo.filterHeight, dilationInfo.filterWidth, dilationInfo.padInfo.top, dilationInfo.padInfo.left); return gradients; } export const dilation2DBackpropInputConfig = { kernelName: Dilation2DBackpropInput, backendName: 'wasm', setupFunc: setup, kernelFunc: dilation2DBackpropInput }; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiRGlsYXRpb24yREJhY2twcm9wSW5wdXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi90ZmpzLWJhY2tlbmQtd2FzbS9zcmMva2VybmVscy9EaWxhdGlvbjJEQmFja3Byb3BJbnB1dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFFSCxPQUFPLEVBQUMsWUFBWSxFQUFtQix1QkFBdUIsRUFBMkQsTUFBTSx1QkFBdUIsQ0FBQztBQUl2SixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sU0FBUyxDQUFDO0FBRWpDLElBQUksMkJBTXdCLENBQUM7QUFFN0IsU0FBUyxLQUFLLENBQUMsT0FBb0I7SUFDakMsMkJBQTJCO1FBQ3ZCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLHVCQUF1QixFQUFFLElBQUksRUFBRTtZQUNoRCxRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVE7WUFDUixRQUFRLEVBQUcsVUFBVTtTQUN0QixDQUFDLENBQUM7QUFDVCxDQUFDO0FBRUQsTUFBTSxVQUFVLHVCQUF1QixDQUFDLElBSXZDO0lBQ0MsTUFBTSxFQUFDLE1BQU0sRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFDLEdBQUcsSUFBSSxDQUFDO0lBQ3RDLE1BQU0sRUFBQyxDQUFDLEVBQUUsTUFBTSxFQUFFLEVBQUUsRUFBQyxHQUFHLE1BQU0sQ0FBQztJQUMvQixNQUFNLEVBQUMsT0FBTyxFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUMsR0FBRyxLQUFLLENBQUM7SUFFeEMsSUFBSSxDQUFDLENBQUMsS0FBSyxLQUFLLE1BQU0sQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDLEtBQUssS0FBSyxFQUFFLENBQUMsS0FBSyxFQUFFO1FBQ3BELE1BQU0sSUFBSSxLQUFLLENBQ1gsbUZBQ0ksQ0FBQyxDQUFDLEtBQUssS0FBSyxNQUFNLENBQUMsS0FBSyxTQUFTLEVBQUUsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0tBQ3REO0lBRUQsTUFBTSxZQUFZLEdBQUcsWUFBWSxDQUFDLHFCQUFxQixDQUNuRCxDQUFDLENBQUMsS0FBeUMsRUFDM0MsTUFBTSxDQUFDLEtBQWlDLEVBQUUsT0FBTyxFQUFFLEdBQUc7SUFDdEQsZUFBZSxDQUFBLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUV0QyxNQUFNLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRXZELDJCQUEyQixDQUN2QixPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNsQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUN2QyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUNuQyxPQUFPLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUMxQyxRQUFRLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxFQUNqQixZQUFZLENBQUMsU0FBUztJQUN0QixVQUFVLENBQUEsWUFBWSxDQUFDLFVBQVUsRUFDakMsWUFBWSxDQUFDLFFBQVEsRUFDckIsWUFBWSxDQUFDLE9BQU8sRUFDcEIsWUFBWSxDQUFDLFNBQVMsRUFDdEIsWUFBWSxDQUFDLFFBQVEsRUFDckIsWUFBWSxDQUFDLFlBQVksRUFDekIsWUFBWSxDQUFDLFdBQVcsRUFDeEIsWUFBWSxDQUFDLGNBQWMsRUFDM0IsWUFBWSxDQUFDLGFBQWEsRUFDMUIsWUFBWSxDQUFDLFlBQVksRUFDekIsWUFBWSxDQUFDLFdBQVcsRUFDeEIsWUFBWSxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQ3hCLFlBQVksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUM1QixDQUFDO0lBQ0YsT0FBTyxTQUFTLENBQUM7QUFDbkIsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLDZCQUE2QixHQUFpQjtJQUN6RCxVQUFVLEVBQUUsdUJBQXVCO0lBQ25DLFdBQVcsRUFBRSxNQUFNO0lBQ25CLFNBQVMsRUFBRSxLQUFLO0lBQ2hCLFVBQVUsRUFBRSx1QkFBZ0Q7Q0FDN0QsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCAyMDIzIEdvb2dsZSBMTEMuXG4gKiBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgXCJMaWNlbnNlXCIpO1xuICogeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLlxuICogWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0XG4gKlxuICogaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wXG4gKlxuICogVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzb2Z0d2FyZVxuICogZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gXCJBUyBJU1wiIEJBU0lTLFxuICogV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuXG4gKiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kXG4gKiBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS5cbiAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4gKi9cblxuaW1wb3J0IHtiYWNrZW5kX3V0aWwsIERpbGF0aW9uMkRBdHRycywgRGlsYXRpb24yREJhY2twcm9wSW5wdXQsIEtlcm5lbENvbmZpZywgS2VybmVsRnVuYywgVGVuc29yM0QsIFRlbnNvcjRELCBUZW5zb3JJbmZvfSBmcm9tICdAdGVuc29yZmxvdy90ZmpzLWNvcmUnO1xuXG5pbXBvcnQge0JhY2tlbmRXYXNtfSBmcm9tICcuLi9iYWNrZW5kX3dhc20nO1xuXG5pbXBvcnQge0NwcERUeXBlfSBmcm9tICcuL3R5cGVzJztcblxubGV0IHdhc21EaWxhdGlvbjJEQmFja3Byb3BJbnB1dDogKFxuICAgIHhJZDogbnVtYmVyLCBmaWx0ZXJJZDogbnVtYmVyLCBkeUlkOiBudW1iZXIsIGdyYWRJZDogbnVtYmVyLCBkdHlwZTogbnVtYmVyLFxuICAgIGJhdGNoOiBudW1iZXIsIGRlcHRoOiBudW1iZXIsIGluSGVpZ2h0OiBudW1iZXIsIGluV2lkdGg6IG51bWJlcixcbiAgICBvdXRIZWlnaHQ6IG51bWJlciwgb3V0V2lkdGg6IG51bWJlciwgc3RyaWRlSGVpZ2h0OiBudW1iZXIsXG4gICAgc3RyaWRlV2lkdGg6IG51bWJlciwgZGlsYXRpb25IZWlnaHQ6IG51bWJlciwgZGlsYXRpb25XaWR0aDogbnVtYmVyLFxuICAgIGZpbHRlckhlaWdodDogbnVtYmVyLCBmaWx0ZXJXaWR0aDogbnVtYmVyLCBwYWRUb3A6IG51bWJlcixcbiAgICBwYWRMZWZ0OiBudW1iZXIpID0+IHZvaWQ7XG5cbmZ1bmN0aW9uIHNldHVwKGJhY2tlbmQ6IEJhY2tlbmRXYXNtKSB7XG4gIHdhc21EaWxhdGlvbjJEQmFja3Byb3BJbnB1dCA9XG4gICAgICBiYWNrZW5kLndhc20uY3dyYXAoRGlsYXRpb24yREJhY2twcm9wSW5wdXQsIG51bGwsIFtcbiAgICAgICAgJ251bWJlcicsICAvLyB4SWRcbiAgICAgICAgJ251bWJlcicsICAvLyBmaWx0ZXJJZFxuICAgICAgICAnbnVtYmVyJywgIC8vIGR5SWRcbiAgICAgICAgJ251bWJlcicsICAvLyBncmFkSWRcbiAgICAgICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICAgICAnbnVtYmVyJywgIC8vIGJhdGNoXG4gICAgICAgICdudW1iZXInLCAgLy8gZGVwdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBpbkhlaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIGluV2lkdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBvdXRIZWlnaHRcbiAgICAgICAgJ251bWJlcicsICAvLyBvdXRXaWR0aFxuICAgICAgICAnbnVtYmVyJywgIC8vIHN0cmlkZUhlaWdodFxuICAgICAgICAnbnVtYmVyJywgIC8vIHN0cmlkZVdpZHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gZGlsYXRpb25IZWlnaHRcbiAgICAgICAgJ251bWJlcicsICAvLyBkaWxhdGlvbldpZHRoXG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVySGVpZ2h0XG4gICAgICAgICdudW1iZXInLCAgLy8gZmlsdGVyV2lkdGhcbiAgICAgICAgJ251bWJlcicsICAvLyBwYWRUb3BcbiAgICAgICAgJ251bWJlcicsICAvLyBwYWRMZWZ0XG4gICAgICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGRpbGF0aW9uMkRCYWNrcHJvcElucHV0KGFyZ3M6IHtcbiAgaW5wdXRzOiB7eDogVGVuc29yNEQsIGZpbHRlcjogVGVuc29yM0QsIGR5OiBUZW5zb3I0RH0sXG4gIGF0dHJzOiBEaWxhdGlvbjJEQXR0cnMsXG4gIGJhY2tlbmQ6IEJhY2tlbmRXYXNtLFxufSk6IFRlbnNvckluZm8ge1xuICBjb25zdCB7aW5wdXRzLCBiYWNrZW5kLCBhdHRyc30gPSBhcmdzO1xuICBjb25zdCB7eCwgZmlsdGVyLCBkeX0gPSBpbnB1dHM7XG4gIGNvbnN0IHtzdHJpZGVzLCBwYWQsIGRpbGF0aW9uc30gPSBhdHRycztcblxuICBpZiAoeC5kdHlwZSAhPT0gZmlsdGVyLmR0eXBlIHx8IHguZHR5cGUgIT09IGR5LmR0eXBlKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICBgRGlsYXRpb24yREJhY2twcm9wSW5wdXQgZXJyb3I6IHggbXVzdCBoYXZlIHRoZSBzYW1lIGR0eXBlIGFzIGZpbHRlciBhbmQgZHkuIEdvdCAke1xuICAgICAgICAgICAgeC5kdHlwZX0sICR7ZmlsdGVyLmR0eXBlfSwgYW5kICR7ZHkuZHR5cGV9YCk7XG4gIH1cblxuICBjb25zdCBkaWxhdGlvbkluZm8gPSBiYWNrZW5kX3V0aWwuY29tcHV0ZURpbGF0aW9uMkRJbmZvKFxuICAgICAgeC5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlciwgbnVtYmVyXSxcbiAgICAgIGZpbHRlci5zaGFwZSBhcyBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl0sIHN0cmlkZXMsIHBhZCxcbiAgICAgIC8qZGF0YUZvcm1hdD0qLydOSFdDJywgZGlsYXRpb25zKTtcblxuICBjb25zdCBncmFkaWVudHMgPSBiYWNrZW5kLm1ha2VPdXRwdXQoeC5zaGFwZSwgeC5kdHlwZSk7XG5cbiAgd2FzbURpbGF0aW9uMkRCYWNrcHJvcElucHV0KFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KHguZGF0YUlkKS5pZCxcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChmaWx0ZXIuZGF0YUlkKS5pZCxcbiAgICAgIGJhY2tlbmQuZGF0YUlkTWFwLmdldChkeS5kYXRhSWQpLmlkLFxuICAgICAgYmFja2VuZC5kYXRhSWRNYXAuZ2V0KGdyYWRpZW50cy5kYXRhSWQpLmlkLFxuICAgICAgQ3BwRFR5cGVbeC5kdHlwZV0sXG4gICAgICBkaWxhdGlvbkluZm8uYmF0Y2hTaXplLFxuICAgICAgLypkZXB0aD0qL2RpbGF0aW9uSW5mby5pbkNoYW5uZWxzLFxuICAgICAgZGlsYXRpb25JbmZvLmluSGVpZ2h0LFxuICAgICAgZGlsYXRpb25JbmZvLmluV2lkdGgsXG4gICAgICBkaWxhdGlvbkluZm8ub3V0SGVpZ2h0LFxuICAgICAgZGlsYXRpb25JbmZvLm91dFdpZHRoLFxuICAgICAgZGlsYXRpb25JbmZvLnN0cmlkZUhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5zdHJpZGVXaWR0aCxcbiAgICAgIGRpbGF0aW9uSW5mby5kaWxhdGlvbkhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5kaWxhdGlvbldpZHRoLFxuICAgICAgZGlsYXRpb25JbmZvLmZpbHRlckhlaWdodCxcbiAgICAgIGRpbGF0aW9uSW5mby5maWx0ZXJXaWR0aCxcbiAgICAgIGRpbGF0aW9uSW5mby5wYWRJbmZvLnRvcCxcbiAgICAgIGRpbGF0aW9uSW5mby5wYWRJbmZvLmxlZnQsXG4gICk7XG4gIHJldHVybiBncmFkaWVudHM7XG59XG5cbmV4cG9ydCBjb25zdCBkaWxhdGlvbjJEQmFja3Byb3BJbnB1dENvbmZpZzogS2VybmVsQ29uZmlnID0ge1xuICBrZXJuZWxOYW1lOiBEaWxhdGlvbjJEQmFja3Byb3BJbnB1dCxcbiAgYmFja2VuZE5hbWU6ICd3YXNtJyxcbiAgc2V0dXBGdW5jOiBzZXR1cCxcbiAga2VybmVsRnVuYzogZGlsYXRpb24yREJhY2twcm9wSW5wdXQgYXMgdW5rbm93biBhcyBLZXJuZWxGdW5jXG59O1xuIl19