实时模型推理指南

在某些企业用例中,服务器托管模型可能并不适用。例如,如果用户带宽受限或需要比使用远程API更低的延迟,那么传统的服务器托管模型将无法满足需求。在这种情况下,使用JavaScript进行实时推理的inferencejs库就显得尤为重要。inferencejs是建立在TensorFlow.js之上的自定义层,它允许使用Roboflow训练的模型进行实时推理。

学习资源

一旦拥有一个训练好的模型,就可以使用“试用摄像头”按钮轻松地通过摄像头进行测试。摄像头演示是一个示例应用程序,可以通过“获取代码”链接下载并进行修改。可以在这里尝试一个手部检测模型的摄像头演示(该模型是在公开的EgoHands数据集上训练的)。

交互式Replit环境

在Replit上发布了一个“入门”项目,并附有教程,展示了如何使用Replit模板部署YOLOv8模型。Roboflow首页使用inferencejs来驱动COCO推理小部件。README包含了如何使用仓库模板将模型部署到使用GitHub Pages的网页上的说明。

文档

如果想要了解更多关于inferencejs中特定函数的详细信息,请查看,或者点击指南中任何提及inferencejs方法的地方,以跳转到相应的文档。

安装

要将inference添加到项目中,只需使用npm安装或将脚本标签引用添加到页面的标签中。以下是安装命令和脚本标签的示例:

npm install inferencejs <script src="https://cdn.jsdelivr.net/npm/inferencejs"></script>

初始化

可以从Roboflow API设置页面获得publishable_key。可以通过进入工作区,进入设置,在Roboflow API页面中获取发布API密钥。请注意,publishable_key是与inferencejs一起使用的,而不是API密钥(应该保持秘密)。inferencejs使用webworkers,以便在不阻塞主UI线程的情况下使用多个模型。每个模型都通过webworker管理器InferenceEngine加载,它为抽象了必要的线程管理。首先,导入InferenceEngine并创建一个新的推理引擎对象:

import { InferenceEngine } from "inferencejs"; const inferEngine = new InferenceEngine();

加载模型

现在可以使用publishable_key和模型元数据(模型名称和版本)以及配置参数(如置信度阈值和重叠阈值)从roboflow加载模型。以下是启动工作器并获取工作器ID的示例代码:

const workerId = await inferEngine.startWorker("[model name]", "[version]", "[publishable key]");

inferencejs现在将启动一个运行所选模型的工作器。返回的工作器ID对应于InferenceEngine中的工作器ID,将用于推理。要对模型进行推理,可以在InferenceEngine上调用infer方法。但首先,需要一个输入图像。提供了CVImage包装类,它可以接收多种图像格式(HTMLImageElement、HTMLVideoElement、ImageBitmap或TFJS Tensor)。让加载一个图像并在工作器上进行推理:

const image = document.getElementById("image"); // 获取id为'image'的图像元素 const predictions = await inferEngine.infer(workerId, image); // 对图像进行推理

这将返回一个预测数组,在这种情况下是RFObjectDetectionPrediction。

配置

如果想要自定义和配置inferencejs过滤其预测的方式,可以在创建工作器时将参数传递给工作器。以下是配置示例代码:

const configuration = { scoreThreshold: 0.5, iouThreshold: 0.5, maxNumBoxes: 20 }; const workerId = await inferEngine.startWorker("[model name]", "[version]", "[publishable key]", [configuration]);
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485