OA0
OA0 是一个探索 AI 的社区
现在注册
已注册用户请  登录
OA0  ›  代码  ›  NanoOWL — 轻量级开放词汇目标检测工具

NanoOWL — 轻量级开放词汇目标检测工具

 
  control ·  2026-04-22 11:00:25 · 15 次点击  · 0 条评论  

NanoOWL

👍 使用方法 - ⏱️ 性能 - 🛠️ 安装设置 - 🤸 示例
- 👏 致谢 - 🔗 另请参阅

NanoOWL 是一个优化项目,旨在让 OWL-ViT 模型借助 NVIDIA TensorRTNVIDIA Jetson Orin 平台 上实现 🔥 实时 🔥 运行。NanoOWL 还引入了一种新的“树状检测”流程,它结合了 OWL-ViT 和 CLIP,只需提供文本,即可在任何层级对任何物体进行嵌套式检测和分类。

是否也对检测物体掩码感兴趣?可以尝试将 NanoOWL 与 NanoSAM 结合,实现零样本开放词汇实例分割。

👍 使用方法

你可以在 Python 中像这样使用 NanoOWL:

from nanoowl.owl_predictor import OwlPredictor

predictor = OwlPredictor(
    "google/owlvit-base-patch32",
    image_encoder_engine="data/owlvit-base-patch32-image-encoder.engine"
)

image = PIL.Image.open("assets/owl_glove_small.jpg")

output = predictor.predict(image=image, text=["an owl", "a glove"], threshold=0.1)

print(output)

或者,更棒的是,要结合 OWL-ViT 和 CLIP 来在任何层级检测和分类任何物体,请查看下面的树状预测器示例!

关于如何构建图像编码器引擎,请参阅 安装设置 部分的说明。

⏱️ 性能

NanoOWL 可在 Jetson Orin Nano 上实现实时运行。

模型 † 图像尺寸 Patch 尺寸 ⏱️ Jetson Orin Nano (FPS) ⏱️ Jetson AGX Orin (FPS) 🎯 准确率 (mAP)
OWL-ViT (ViT-B/32) 768 32 待定 95 28
OWL-ViT (ViT-B/16) 768 16 待定 25 31.7

🛠️ 安装设置

  1. 安装依赖

    1. 安装 PyTorch。
    2. 安装 torch2trt
    3. 安装 NVIDIA TensorRT。
    4. 安装 Transformers 库。
      bash python3 -m pip install transformers
    5. (可选) 安装 NanoSAM (用于实例分割示例)。
  2. 安装 NanoOWL 包。
    bash git clone https://github.com/NVIDIA-AI-IOT/nanoowl cd nanoowl python3 setup.py develop --user

  3. 为 OWL-ViT 视觉编码器构建 TensorRT 引擎
    bash mkdir -p data python3 -m nanoowl.build_image_encoder_engine \ data/owl_image_encoder_patch32.engine

  4. 运行一个预测示例以确保一切正常
    bash cd examples python3 owl_predict.py \ --prompt="[an owl, a glove]" \ --threshold=0.1 \ --image_encoder_engine=../data/owl_image_encoder_patch32.engine

完成!如果一切正常,你应该能看到一个可视化结果保存到 data/owl_predict_out.jpg

🤸 示例

示例 1 - 基础预测

此示例演示了如何使用 TensorRT 优化的 OWL-ViT 模型,通过提供物体标签的文本描述来检测物体。

要运行此示例,首先进入 examples 文件夹:

cd examples

然后运行示例:

python3 owl_predict.py \
    --prompt="[an owl, a glove]" \
    --threshold=0.1 \
    --image_encoder_engine=../data/owl_image_encoder_patch32.engine

默认情况下,输出将保存到 data/owl_predict_out.jpg

你也可以使用此示例进行推理性能分析,只需设置 --profile 标志即可。

示例 2 - 树状预测

此示例演示了如何使用树状预测器类在任何层级检测和分类物体。

要运行此示例,首先进入 examples 文件夹:

cd examples

要检测所有猫头鹰,并在每个检测到的猫头鹰感兴趣区域(ROI)内检测所有翅膀和眼睛,请输入:

python3 tree_predict.py \
    --prompt="[an owl [a wing, an eye]]" \
    --threshold=0.15 \
    --image_encoder_engine=../data/owl_image_encoder_patch32.engine

默认情况下,输出将保存到 data/tree_predict_out.jpg

要将图像分类为室内或室外,请输入:

python3 tree_predict.py \
    --prompt="(indoors, outdoors)" \
    --threshold=0.15 \
    --image_encoder_engine=../data/owl_image_encoder_patch32.engine

要将图像分类为室内或室外,如果是室外则检测所有猫头鹰,请输入:

python3 tree_predict.py \
    --prompt="(indoors, outdoors [an owl])" \
    --threshold=0.15 \
    --image_encoder_engine=../data/owl_image_encoder_patch32.engine

示例 3 - 树状预测(实时摄像头)

此示例演示了树状预测器在实时摄像头流上运行,并支持实时编辑文本提示。

要运行此示例:
1. 确保已连接摄像头设备。
2. 启动演示:
bash cd examples/tree_demo python3 tree_demo.py ../../data/owl_image_encoder_patch32.engine
3. 在浏览器中打开 http://<IP地址>:7860
4. 输入任何你想要的提示语,看看效果如何!以下是一些示例:
- 示例:[a face [a nose, an eye, a mouth]]
- 示例:[a face (interested, yawning / bored)]
- 示例:(indoors, outdoors)

👏 致谢

感谢 OWL-ViT 的作者们出色的开放词汇检测工作。

🔗 另请参阅

15 次点击  ∙  0 人收藏  
登录后收藏  
0 条回复
关于 ·  帮助 ·  PING ·  隐私 ·  条款   
OA0 - Omni AI 0 一个探索 AI 的社区
沪ICP备2024103595号-2
耗时 17 ms
Developed with Cursor