Grounding DINO (GDINO)#
概述#
Grounding DINO 支持开放词汇对象检测,支持无限的对象类别。与基于图像和视频的空间、上下文理解的传统对象检测器相比,它还提供卓越的性能。 示例包括
多对象检测 - 示例:“汽车,自行车”
对象属性 - 示例:“红色汽车”
空间位置 - 示例:“狗旁边的男孩”
执行的动作 - 示例:“坐在椅子上的人”
微服务容器包含带有预训练权重的 Grounding Dino 模型,可直接使用。它可用于输入视频和图像进行处理。 作为 JPS 一部分分发的 Docker 容器包含 来自 NGC 的 TAO 预训练 Grounding DINO 模型 。
运行 GDINO#
拉取并启动容器
$ sudo docker pull nvcr.io/nvidia/jps/jps-gdino:ds7.1-public-12-11-1 $ sudo docker run -itd --runtime nvidia --network host nvcr.io/nvidia/jps/jps-gdino:ds7.1-public-12-11-1
请注意,默认情况下,容器使用端口 8000。如果端口已被其他程序占用,容器将抛出错误。 您可以通过将 -e SERVER_PORT=8025
标志添加到上述 docker run 命令来手动指定不同的端口,将 8025 更改为您想要的端口值。
您可能还希望使用 -v
docker run 标志在容器中 /ds_microservices/output
文件夹中挂载目录,以便您可以轻松访问输出视频和图像。
查看容器日志以确定服务何时完全启动。 当您看到类似于下面打印输出的内容时,即表示服务已完全启动。 由于引擎文件包含在容器中,因此这应该相当快(少于 30 秒)。 您最初可能会看到一些“Failed to connect”错误,但一旦容器内的 Triton 服务器实例启动并可访问,这些错误应该会消失。
}Starting inference server INFO: Started server process [627] INFO: Waiting for application startup. INFO: Application startup complete. INFO: Uvicorn running on http://0.0.0.0:8000 (Press CTRL+C to quit)
向服务器发送一些示例视频/图像。
如果使用图像
$ curl -X POST "https://127.0.0.1:8000/files" -H "Content-Type: multipart/form-data" -F purpose="vision" -F media_type="image" -F "file=@image.jpg"
或者如果使用视频
$ curl -X POST "https://127.0.0.1:8000/files" -H "Content-Type: multipart/form-data" -F purpose="vision" -F media_type="video" -F "file=@MOJD2.mp4"
文件参数应指向 Jetson 上的路径(相对于当前目录),而不是容器中的路径。
来自上面的 curl 请求将返回一个 ID。 需要将此 ID 添加到下面的 payload 中,以便请求对输入图像/视频进行分析。
创建一个具有以下内容的 JSON 文件,将
{asset_id}
替换为之前的 ID,并将prompt
替换为您要传入的任何提示。 您可能还需要调整threshold
值,具体取决于您的输入和提示,以便正确检测到所需对象。{ "model": "Grounding-Dino", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "prompt" }, { "type": "media_url", "media_url": { "url": "data:image/jpeg;asset_id,{asset_id}" } } ] } ], "threshold": 0.35 }
然后可以发出 curl 请求来请求分析。 确保更新端口(如果您在步骤 1 中更改了端口),并将 input.JSON 更改为您创建的 JSON 文件的路径/名称
$ curl -X POST https://127.0.0.1:8000/inference -H "Content-Type: application/json" -d @input.json
这会将检测到的边界框输出到控制台,并将叠加图像输出到容器中的
/ds_microservices/output/<id>/out1.jpg
(如果使用视频,则为/ds_microservices/output/<id>/out1.mp4
)。 API 请求还将返回检测数组。
GDINO 性能和示例结果#
性能#
性能将因所用设备、提示和输入流分辨率而异。 作为参考,在 AGX Orin 上,使用提示“car, bike, person, bus”的 1080p 示例视频能够以大约 11.8fps 的速度进行处理。
示例结果#
以下是使用图像输入的一些示例输出结果
提示:“car, bike”

提示:“red car”

提示:“person next to bike”
