Pal*_*mer 6 javascript performance node.js face-api tensorflow.js
我想在服务器端使用人脸检测。因此,我为此任务找到了face-api.js。我发现每次通话faceapi.detectAllFaces()持续约10秒。但是,当我启动浏览器示例时,只有第一个函数持续10秒,所有下一个函数持续不到一秒。
我的服务器端代码(您可以在ageAndGenderRecognition.ts中看到类似的代码):
import * as faceapi from 'face-api.js';
import { canvas, faceDetectionNet, faceDetectionOptions, saveFile } from './commons';
await faceDetectionNet.loadFromDisk('../../weights')
await faceapi.nets.faceLandmark68Net.loadFromDisk('../../weights')
await faceapi.nets.ageGenderNet.loadFromDisk('../../weights')
const img = await canvas.loadImage('../images/bbt1.jpg')
console.time();
const results = await faceapi.detectAllFaces(img, faceDetectionOptions);
// ~10 seconds.
console.timeEnd();
console.time();
const results2 = await faceapi.detectAllFaces(img, faceDetectionOptions);
// ~10 seconds again.
console.timeEnd();
Run Code Online (Sandbox Code Playgroud)
为什么faceapi.detectAllFaces()在浏览器示例中(首次通话除外)比ageAndGenderRecognition.ts更快?我可以对faceapi.detectAllFaces()功能执行相同的操作的速度相同吗?
您的 nodejs 示例代码运行 10 秒可能有一些原因:
您根本没有导入 @tensorflow/tfjs-node,在这种情况下,tfjs 不使用本机 Tensorflow CPU 后端,并且 CPU 上的操作将花费更长的时间。
您正在导入 @tensorflow/tfjs-node,但 face-api.js 的 tfjs-core 版本与您通过 npm 安装的 @tensorflow/tfjs-node 版本之间存在版本不匹配。在这种情况下,tfjs 将显示警告消息。
一切都设置正确,但您的 CPU 速度非常慢。在这种情况下,您可以尝试使用@tensorflow/tfjs-node-gpu(如果您有与 CUDA 兼容的 nvidia GPU),或者您可以将 faceDetectionOptions 更改为新的 faceapi.TinyFaceDetectorOptions(),它将运行 TinyFaceDetector 而不是默认的SSD Mobilenet v1 模型,速度更快。
浏览器中的第一次调用需要那么长时间的原因不是由于实际预测时间。这是因为使用了 tfjs 的 WebGL 后端,在第一次运行(预热运行)时,所有着色器程序都会被编译,这需要很长时间。之后这些被缓存。浏览器中的预测只需几毫秒,因为 WebGL 后端是 GPU 加速的。浏览器中的 10s 预热时间和你在 nodejs 中看到的预测时间根本没有关系。
小智 2
使用 GPU(而不是 CPU)时,Tensorflow.js 通常会表现得更好。
因此,可以解释性能差异的一件事是,在浏览器端,tensorflow 将在 GPU 上运行(通过 WebGL),而在节点上,它将在 CPU 上运行(除非您使用@tensorflow/tfjs-node-gpu)。
似乎默认情况下,face-api.js 库使用@tensorflow/tfjs-node(https://github.com/justadudewhohacks/face-api.js#face-apijs-for-nodejs)。所以也许你可以尝试用 替换 import @tensorflow/tfjs-node-gpu。
为了在节点上使用 GPU,请检查 tfjs-node github: https: //github.com/tensorflow/tfjs-node
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |