尧图精选

【SAM3部署至AGX Orin】环境配置→模型部署→问题记录

🕒 发布时间:2026/10/1 2:58:34 📁 来源:尧图网络
已在GitHub开源与本博客同步的SAM3_AGXOrin项目地址:https://github.com/A7bert777/Qwen2.5_VL_RK1828详细使用教程可参考README.md或参考本博客第七章 RK1828边缘部署注本文是以Jetson AGX Orin 为部署平台其他型号设备也酌情参考文章目录一、项目简介二、文件梳理三、模型下载四、环境配置五、实测运行5.1 使用CUDA直接调用GPU推理PT模型5.1.1 直接推理5.1.2 预加载后推理5.2 使用TensorRT调用GPU推理.engine模型一、项目简介博主之前主要使用瑞芯微、昇腾、地平线、英伟达系列的SoC及对应生态进行YOLO、Unet等常规视觉模型的部署以及Qwen、LocateAnything等LLM、VLM的边缘部署最近考虑到要做语义分割之前也接触过Meta的SAM而且已经出到了最新的SAM3加入了LLM结构可以实现Point点选以及文字描述进行语义分割了但发现CSDN上目前没有什么比较详细的免费文章与开源项目供大家入手.因此自己尝试进行完整流程的部署遂以此文分享供大家一起学习。博主之前有写过在华为Ascend、瑞芯微RK系列、地平线Sunrise系列的SoC上的YOLOv8目标检测图像分割、YOLOv10目标检测、MoblieNetv2图像分类的以及模型训练、转换、部署文章也包括部分LLM、VLM的部署内容感兴趣的小伙伴可以了解下【LocateAnything部署至AGX Orin】环境配置→模型部署→问题记录【Qwen2.5VL-3B部署至RK1828】ONNX转换→模型量化→边缘部署【YOLOv8cls部署至RDK X5】模型训练→转换bin→Sunrise 5部署【YOLOv8pose部署至RDK X5】模型训练→转换bin→Sunrise 5部署【YOLOv8seg部署至RDK X5】模型训练→转换bin→Sunrise 5部署【YOLOv8det部署至RDK X5】模型训练→转换bin→Sunrise 5部署【YOLOv8部署至Ascend 310B】模型训练→转换om→310B部署【YOLO11-obb部署至RK3588】模型训练→转换RKNN→开发板部署【YOLO11部署至RK3588】模型训练→转换RKNN→开发板部署【YOLOv10部署RK3588】模型训练→转换rknn→部署流程【YOLOv8-obb部署至RK3588】模型训练→转换RKNN→开发板部署【YOLOv8-pose部署至RK3588】模型训练→转换RKNN→开发板部署【YOLOv8seg部署RK3588】模型训练→转换rknn→部署全流程【YOLOv8部署至RK3588】模型训练→转换rknn→部署全流程【YOLOv7部署至RK3588】模型训练→转换RKNN→开发板部署【YOLOv6部署至RK3588】模型训练→转换RKNN→开发板部署【YOLOv5部署至RK3588】模型训练→转换RKNN→开发板部署【MobileNetv2图像分类部署至RK3588】模型训练→转换rknn→部署流程【ResNet50图像分类部署至RK3588】模型训练→转换RKNN→开发板部署YOLOv8n部署RK3588开发板全流程pt→onnx→rknn模型转换、板端后处理检测二、文件梳理OK进入正题整个部署需要以下文件博主个人Github仓库SAM3_AGXOrin链接在此(需翻墙)三、模型下载执行命令./sh/download.sh终端如下所示jetsonubuntu:~/zhangtianqi/github/SAM3_AGXOrin$ ./sh/download.sh[下载]https://huggingface.co/facebook/sam3/resolve/main/sam3.pt % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed0121000000--:--:-- --:--:-- --:--:--0curl:(22)The requested URL returned error:401[下载]https://huggingface.co/1038lab/sam3/resolve/main/sam3.pt % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed1009981009980051200:00:010:00:01 --:--:--5121003290M1003290M00716k01:18:231:18:23 --:--:-- 724k[完成]/home/jetson/zhangtianqi/github/SAM3_AGXOrin/models/sam3.pt(3.3G)[跳过]已存在/home/jetson/zhangtianqi/github/SAM3_AGXOrin/assets/bpe_simple_vocab_16e6.txt.gz(1.3M)资源就绪 -rw-rw-r--1jetson jetson1356917Sep3012:26 /home/jetson/zhangtianqi/github/SAM3_AGXOrin/assets/bpe_simple_vocab_16e6.txt.gz -rw-rw-r--1jetson jetson3450062241Sep3014:18 /home/jetson/zhangtianqi/github/SAM3_AGXOrin/models/sam3.pt可以看到模型此时已经下载到models文件夹下了四、环境配置在项目路径下执行./sh/setup.sh运行完成后会在当前项目路径下生成venv310环境是用于后续运行的环境五、实测运行SAM3和SAM的不同点在于除了具有SAM的Point方法外还加入了LLM功能可以通过Prompt去理解要分割的内容对非实时性且环境复杂高的项目友好度非常好实测运行主要分为两种第一种是直接使用CUDA调用GPU去推理原生的PT模型另一种是使用TensorRT调用GPU推理.engine模型这两种方法博主都已经尝试过了并且在项目里都进行了适配以下是对比这两种方法的具体使用记录。5.1 使用CUDA直接调用GPU推理PT模型在使用博主的仓库后是有两种推理方式的一种是直接推理另一种是预加载后再进行推理这么做的区别是因为SAM3模型大小在3.4G左右每次初始化的加载时间比较长主要取决于设备的带宽大小AGX Orin64GB版本的带宽是204.8GB/S相对来说还是不错的但是整体来说加载SAM3还是要10秒以上等待时间较长所以才使用了预加载后处理的方式不过博主此处已经做好了优化无论是哪种方法都非常简单。5.1.1 直接推理在项目路径下执行如下命令./sh/run.sh--imageinputimage/2.jpg--textshoe--outoutputimage/2_out_text.png结果如下所示jetsonubuntu:~/zhangtianqi/SAM3_AGXOrin$ ./sh/run.sh--imageinputimage/2.jpg--textshoe--outoutputimage/2_out_text.png[提示]未检测到常驻服务本地加载模型约 16s。如需加速可先执行 ./sh/serve.sh start /home/jetson/zhangtianqi/SAM3_AGXOrin/venv310/lib/python3.10/site-packages/torch/backends/__init__.py:46: UserWarning: Please use the new API settings to control TF32 behavior, such as torch.backends.cudnn.conv.fp32_precisiontf32or torch.backends.cuda.matmul.fp32_precisionieee.Old settings, e.g, torch.backends.cuda.matmul.allow_tf32True, torch.backends.cudnn.allow_tf32True, allowTF32CuDNN()and allowTF32CuBLAS()will be deprecated after Pytorch2.9. Please see https://pytorch.org/docs/main/notes/cuda.html#tensorfloat-32-tf32-on-ampere-and-later-devices (Triggered internally at /opt/pytorch/aten/src/ATen/Context.cpp:80.)self.setter(val)[信息]模型加载13.0s|设备 cuda[计时]初始化: 导入三方库1.7s|模型加载14.8s|Processor0.00s|初始化总计16.5s[信息]图像 inputimage/2.jpg 640x480[计时]首次推理: 图像编码1029.1ms|提示前向431.2ms|合计1460.3ms[计时]热身后推理: 图像编码820.0ms|提示前向252.8ms|合计1072.8ms[结果]提示text(shoe)|目标数2阈值0.5 masks 形状(2,1,480,640)|boxes 形状(2,4)#0: score0.951 box(362,185,610,350) 面积19972px#1: score0.964 box(170,98,282,226) 面积5366px[输出]可视化 -outputimage/2_out_text.png[计时]端到端(含初始化):19.2s推理出的结果图片如下所示可以看到模型的分割效果还是很好的但是整体的加载速度要14.8s比较慢如果需要频繁执行推理或者是大批量的推理时会频繁加载非常麻烦。推荐采用5.1.2的预加载后处理。5.1.2 预加载后推理博主已经配置好了预加载的脚本已经后推理的脚本都在sh文件夹下其中serve.sh即为预加载模型先在第一个终端中加载serve.sh如下所示jetsonubuntu:~/zhangtianqi/SAM3_AGXOrin$ ./sh/serve.sh start[服务]正在后台启动首次需加载模型约 16s...[服务]就绪PID1867922 日志./sh/serve.sh log 现在可直接用./sh/run.sh--imageinputimage/xxx.jpg--pointxxx xxx--outoutputimage/xxx_out_point.png示例此时SAM3.pt已经加载到了设备内存中如下所示可以看到目前空余内存为14G加上缓存实际可用内存还有40GB整体还是比较富裕的。此时在新的终端里再执行相同的调用命令./sh/run.sh--imageinputimage/2.jpg--textshoe--outoutputimage/2_out_text.png此时终端如下所示再执行别的图片的分割如下所示可以看到分割效果都是不错的而且此时每次推理时都可以快速推理推理时间都要1.1秒左右还是能接受的。另外推理的时候通过jtop命令可以看到GPU负载直接拉满了当推理任务完成后我们可以释放掉模型内存了在之前的终端中执行如下命令./sh/serve.sh stop如下所示此时查看内存如下所示可以看到可用内存从39G释放到45G模型释放成功另外serve.sh还有一些别的功能如下所示# 用法./sh/serve.sh start[额外参数]# 后台启动服务默认不超时退出./sh/serve.sh stop# 释放模型与显存./sh/serve.sh restart# 重启./sh/serve.sh status# 查看服务状态与显存./sh/serve.sh log# 跟踪服务日志./sh/serve.sh fore[额外参数]# 前台启动CtrlC 退出大家可以酌情分别使用这里综合对比下640*480图片的SAM3.pt的推理效果原图命令如下所示./sh/run.sh--imageinputimage/1.jpg--texttelegraph pole--outoutputimage/1_out_text.png ./sh/run.sh--imageinputimage/2.jpg--textshoe--outoutputimage/2_out_text.png ./sh/run.sh--imageinputimage/3.jpg--textcan--outoutputimage/3_out_text.png ./sh/run.sh--imageinputimage/4.jpg--textbottle--outoutputimage/4_out_text.png ./sh/run.sh--imageinputimage/5.jpg--textbottle--outoutputimage/5_out_text.png ./sh/run.sh--imageinputimage/6.jpg--textshoe--outoutputimage/6_out_text.png结果图可以看到整体的分割效果非常不错5.2 使用TensorRT调用GPU推理.engine模型
上一篇/下一篇内容由系统自动关联 返回资讯列表 →