👍 使用方法 - ⏱️ 性能 - 🛠️ 安装设置 - 🤸 示例
- 👏 致谢 - 🔗 另请参阅
NanoOWL 是一个优化项目,旨在让 OWL-ViT 模型借助 NVIDIA TensorRT 在 NVIDIA 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 |
安装依赖
bash
python3 -m pip install transformers安装 NanoOWL 包。
bash
git clone https://github.com/NVIDIA-AI-IOT/nanoowl
cd nanoowl
python3 setup.py develop --user
为 OWL-ViT 视觉编码器构建 TensorRT 引擎
bash
mkdir -p data
python3 -m nanoowl.build_image_encoder_engine \
data/owl_image_encoder_patch32.engine
运行一个预测示例以确保一切正常
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。

此示例演示了如何使用 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 标志即可。

此示例演示了如何使用树状预测器类在任何层级检测和分类物体。
要运行此示例,首先进入 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

此示例演示了树状预测器在实时摄像头流上运行,并支持实时编辑文本提示。
要运行此示例:
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 的作者们出色的开放词汇检测工作。