在Jetson上玩转大模型Day10:OWL-ViT应用

科技   2024-11-05 12:52   江苏  











 在Jetson上玩转大模型:写在前面

在Jetson上玩转大模型Day2:环境搭建

在Jetson上玩转大模型Day3:TGW智能助手

在Jetson上玩转大模型Day4:SDW文生图

在Jetson上玩转大模型Day5:Ollama指令模式的智能助手

在Jetson上玩转大模型Day6:Ollama的Webui智能助手

在Jetson上玩转大模型Day7:執行RAG功能的Jetson Copilot

在Jetson上玩转大模型Day8:多模態搜圖的NanoDB

在Jetson上玩转大模型Day9:建立EffectiveViT测试环境


做过机器视觉模型训练的人都知道,最耗时费力的阶段,就是对图片集进行标注的环节,这通常必须交由人力来进行,很难交给计算机去自动化标注,因此这个阶段也是除了采购设备之外,成本最高的环节。

为了解决机器视觉领域的这个痛点,由Google实验室的Matthias Minderer等人,提出了一种简单而强大的OWL(Open-World Localization with Vision Transformers)方法,将图像级别的预训练转移到开放词汇表目标检测任务中。

使用标准的Vision Transformer 架构,并对其进行了最小修改,通过对比图像-文本预训练和端到端的目标检测微调来实现,目标是为了实现“Zero Shot”的境界,其实就是要与YOLO的“One Shot”别个苗头。

不过总的来说,YOLO和OWL-ViT还是各有优势的,适用于不同的应用场景。YOLO 更侧重于速度和实时性能,而OWL-ViT则在开放词汇表和长尾分布数据集上展现出更强的泛化能力,给定一个图像和一个自由文本查询,它会在图像中找到与该查询匹配的对象。它还可以进行一次性对象检测,即基于单个示例图像检测对象。

OWL-ViT是Google Research的Scenic项目之下的一个子项目,其开源仓位置在 https://github.com/google-research/scenic/tree/main/scenic/projects/owl_vit,基于Python与JAX科学库所搭建,开源仓所提供的安装步骤依然很简单,如下:

git clone https://github.com/google-research/scenic.git

cd ~/scenic

python -m pip install -vq .

python -m pip install -r scenic/projects/owl_vit/requirements.txt

# For GPU support:

pip install --upgrade "jax[cuda]" -f https://storage.googleapis.com/jax-releases/jax_cuda_releases.html

但实际的操作依旧是很难顺利完成,总是出现如下图的错误:

因此最简单的方法,还是在Jetson Orin设备上使用Jetson AI Lab所提供的nanoowl镜像文件来创建容器,这个容器不仅提过对CUDA的支持,并且也对TersorRT进行过优化。操作的指令如下:

$ jetson-container  run  --workdir /opt/nanoowl  $(autotag  nanoowl)

这里使用“--workdir  /opt/nanoowl”参数,就是将容器内的/opt/nanoowl设为指定的工作目录,如果没有添加这个参数,也可以进到容器之后再用“cd  /opt/nanoowl”指令去切换。

現在我們先到examples裏,跑一跑最基本的owl_predict.py應用,先執行下面指令看一下所需要的參數:

$ cd examples

$ python3  owl_predict.py  --help

下圖是執行 --help 所顯示的輸出,裏面總共有8個可調用的參數。

上面每個參數都提供預設值,這也是一種很好的防呆措施。以下列出每個參數的用途與預設值:

  • --image:圖片路徑,預設值 "../assets/owl_glove_small.jpg"

  • --prompt:提示詞,預設值爲 "[an owl, a glove]"

  • --threshold:閾值,預設值爲 "0.1,0.1"

  • --output:輸出結果路徑,預設值 "../data/owl_predict_out.jpg"

  • --model:使用的模型,預設值爲 "google/owlvit-base-patch32"

  • --image_encoder_engine:使用的圖片編碼引擎,預設值爲"../data/owl_image_encoder_patch32.engine",這是用build_image_encoder_engine.py所訓練的模型。

  • --profile:預設值爲"store_true"

  • --num_profiling_runs:預設值爲30

如果我們執行下面最簡單的指令,所有參數都用預設值:

$ python3  owl_predict.py

第一次執行時,會如下圖一樣先下載所需要的模型到本地使用。

一切就緒之後就會開始執行。下圖左原圖是"../assets/owl_glove_small.jpg",根據提示詞"[an owl, a glove]"所執行的標識,圖右"../data/owl_predict_out.jpg"爲輸出的結果。

如果覺得這種靜態圖片檢測不夠生動的話,我們可以執行examples/tree_demo下面的tree_demo.py程序,這是可以接上USB Camera直接對現場物體進行實時檢測的應用。如果先前啓動容器時還未連上USB Camera的話,請先跳出容器、連上USB Camera之後,再重新啓動容器,然後執行以下指令:

$ cd examples/tree_demo

$ python3 tree_demo.py ../../data/owl_image_encoder_patch32.engine

正確執行後會出現下面信息:

現在啓動瀏覽器,輸入“0.0.0.0:7860”後就會出現Camra畫面,下方出現可以互動的Prompt框,就可以在這裏輸入多層提示語,然後看到畫面根據提示語找到目標。

如何?這個應用很酷吧,可以用在非常多實用的場景,動態地找出一些特定的物體,還可以根據需求隨時修改要定位的物種。

最新福利:

【全攻略】解锁职业新机遇:NVIDIA DLI首次推出认证考试


GPUS开发者
在这里,你可以及时了解NVIDIA GPU的行业资讯、最新进展、应用场景和各项功能。还有一些工具、技巧和教程,帮助你利用GPU打造未来的科技。参与GPU世界举办的精彩活动,体验人工智能的未来生活。
 最新文章