@vladmandic/human
Version:
Human: AI-powered 3D Face Detection & Rotation Tracking, Face Description & Recognition, Body Pose Tracking, 3D Hand & Finger Tracking, Iris Analysis, Age & Gender & Emotion Prediction, Gesture Recognition
49 lines (44 loc) • 1.44 kB
text/typescript
/**
* Profiling calculations
* Debug only
*/
import { log } from './util';
export const data = {};
export interface ProfileData {
newBytes: number,
peakBytes: number,
newTensors: number,
kernels: {
id: number,
kernelTimeMs: number,
totalBytesSnapshot: number,
}[],
}
export function run(modelName: string, profileData: ProfileData): void { // profileData is tfjs internal type
if (!profileData?.kernels) return;
const maxDetected = 5;
const time = (profileData.kernels)
.filter((a) => a.kernelTimeMs > 0)
.reduce((a, b) => a += b.kernelTimeMs, 0);
const slowest = (profileData.kernels)
.map((a, i) => { a.id = i; return a; })
.filter((a) => a.kernelTimeMs > 0)
.sort((a, b) => b.kernelTimeMs - a.kernelTimeMs);
const largest = (profileData.kernels)
.map((a, i) => { a.id = i; return a; })
.filter((a) => a.totalBytesSnapshot > 0)
.sort((a, b) => b.totalBytesSnapshot - a.totalBytesSnapshot);
if (slowest.length > maxDetected) slowest.length = maxDetected;
if (largest.length > maxDetected) largest.length = maxDetected;
data[modelName] = {
model: modelName,
newBytes: profileData.newBytes,
newTensors: profileData.newTensors,
peakBytes: profileData.peakBytes,
numKernelOps: (profileData.kernels).length,
timeKernelOps: time,
slowestKernelOps: slowest,
largestKernelOps: largest,
};
log('profiler', modelName, data[modelName]);
}