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

42 lines 5.72 kB
/** * @license * Copyright 2019 Google LLC. All Rights Reserved. * 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 { util } from '@tensorflow/tfjs-core'; import { CppDType } from './types'; export function createUnaryKernelConfig(kernelName, outType) { let wasmFunc; function setupFunc(backend) { wasmFunc = backend.wasm.cwrap(kernelName, null /* void */, [ 'number', 'number', 'number', // out_id ]); } function kernelFunc(args) { const { backend, inputs: { x } } = args; const xId = backend.dataIdMap.get(x.dataId).id; const out = backend.makeOutput(x.shape, outType || x.dtype); const outId = backend.dataIdMap.get(out.dataId).id; // Short-circuit zero-sized tensors. if (util.sizeFromShape(out.shape) === 0) { return out; } wasmFunc(xId, CppDType[x.dtype], outId); return out; } return { kernelName, backendName: 'wasm', setupFunc, kernelFunc }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidW5hcnlfa2VybmVsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vdGZqcy1iYWNrZW5kLXdhc20vc3JjL2tlcm5lbHMvdW5hcnlfa2VybmVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUVILE9BQU8sRUFBa0QsSUFBSSxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFJNUYsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFNBQVMsQ0FBQztBQUVqQyxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLFVBQWtCLEVBQUUsT0FBa0I7SUFDeEMsSUFBSSxRQUE2RCxDQUFDO0lBRWxFLFNBQVMsU0FBUyxDQUFDLE9BQW9CO1FBQ3JDLFFBQVEsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRTtZQUN6RCxRQUFRO1lBQ1IsUUFBUTtZQUNSLFFBQVEsRUFBRyxTQUFTO1NBQ3JCLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxTQUFTLFVBQVUsQ0FBQyxJQUFpRDtRQUVuRSxNQUFNLEVBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFDLENBQUMsRUFBQyxFQUFDLEdBQUcsSUFBSSxDQUFDO1FBQ3BDLE1BQU0sR0FBRyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDL0MsTUFBTSxHQUFHLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sSUFBSSxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDNUQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUVuRCxvQ0FBb0M7UUFDcEMsSUFBSSxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLEVBQUU7WUFDdkMsT0FBTyxHQUFHLENBQUM7U0FDWjtRQUVELFFBQVEsQ0FBQyxHQUFHLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN4QyxPQUFPLEdBQUcsQ0FBQztJQUNiLENBQUM7SUFFRCxPQUFPLEVBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBQyxDQUFDO0FBQ2xFLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICogTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlIFwiTGljZW5zZVwiKTtcbiAqIHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS5cbiAqIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdFxuICpcbiAqIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMFxuICpcbiAqIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmVcbiAqIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuIFwiQVMgSVNcIiBCQVNJUyxcbiAqIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLlxuICogU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zIGFuZFxuICogbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuXG4gKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuICovXG5cbmltcG9ydCB7RGF0YVR5cGUsIEtlcm5lbENvbmZpZywgVGVuc29ySW5mbywgVW5hcnlJbnB1dHMsIHV0aWx9IGZyb20gJ0B0ZW5zb3JmbG93L3RmanMtY29yZSc7XG5cbmltcG9ydCB7QmFja2VuZFdhc219IGZyb20gJy4uL2JhY2tlbmRfd2FzbSc7XG5cbmltcG9ydCB7Q3BwRFR5cGV9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlVW5hcnlLZXJuZWxDb25maWcoXG4gICAga2VybmVsTmFtZTogc3RyaW5nLCBvdXRUeXBlPzogRGF0YVR5cGUpOiBLZXJuZWxDb25maWcge1xuICBsZXQgd2FzbUZ1bmM6ICh4SWQ6IG51bWJlciwgZHR5cGU6IG51bWJlciwgb3V0SWQ6IG51bWJlcikgPT4gdm9pZDtcblxuICBmdW5jdGlvbiBzZXR1cEZ1bmMoYmFja2VuZDogQmFja2VuZFdhc20pOiB2b2lkIHtcbiAgICB3YXNtRnVuYyA9IGJhY2tlbmQud2FzbS5jd3JhcChrZXJuZWxOYW1lLCBudWxsIC8qIHZvaWQgKi8sIFtcbiAgICAgICdudW1iZXInLCAgLy8geF9pZFxuICAgICAgJ251bWJlcicsICAvLyBkdHlwZVxuICAgICAgJ251bWJlcicsICAvLyBvdXRfaWRcbiAgICBdKTtcbiAgfVxuXG4gIGZ1bmN0aW9uIGtlcm5lbEZ1bmMoYXJnczoge2JhY2tlbmQ6IEJhY2tlbmRXYXNtLCBpbnB1dHM6IFVuYXJ5SW5wdXRzfSk6XG4gICAgICBUZW5zb3JJbmZvIHtcbiAgICBjb25zdCB7YmFja2VuZCwgaW5wdXRzOiB7eH19ID0gYXJncztcbiAgICBjb25zdCB4SWQgPSBiYWNrZW5kLmRhdGFJZE1hcC5nZXQoeC5kYXRhSWQpLmlkO1xuICAgIGNvbnN0IG91dCA9IGJhY2tlbmQubWFrZU91dHB1dCh4LnNoYXBlLCBvdXRUeXBlIHx8IHguZHR5cGUpO1xuICAgIGNvbnN0IG91dElkID0gYmFja2VuZC5kYXRhSWRNYXAuZ2V0KG91dC5kYXRhSWQpLmlkO1xuXG4gICAgLy8gU2hvcnQtY2lyY3VpdCB6ZXJvLXNpemVkIHRlbnNvcnMuXG4gICAgaWYgKHV0aWwuc2l6ZUZyb21TaGFwZShvdXQuc2hhcGUpID09PSAwKSB7XG4gICAgICByZXR1cm4gb3V0O1xuICAgIH1cblxuICAgIHdhc21GdW5jKHhJZCwgQ3BwRFR5cGVbeC5kdHlwZV0sIG91dElkKTtcbiAgICByZXR1cm4gb3V0O1xuICB9XG5cbiAgcmV0dXJuIHtrZXJuZWxOYW1lLCBiYWNrZW5kTmFtZTogJ3dhc20nLCBzZXR1cEZ1bmMsIGtlcm5lbEZ1bmN9O1xufVxuIl19