当前位置: 首页 > news >正文

NanoTrack原理与转tensorrt推理

在这里插入图片描述

文章目录

  • 前言
  • 一、NanoTrack 工作原理
  • 二、运行demo与转换tensorrt模型
    • 2.1 运行pt模型demo
    • 2.2 转onnx模型
    • 2.3 转tensorrt模型
    • 2.4 运行trt模型推理
  • 三、推理速度对比
  • 总结


前言

NanoTrack 是一种轻量级且高效的目标跟踪算法,基于Siamese网络架构,旨在在资源受限的设备(如无人机、嵌入式系统等)上实现实时且精确的目标跟踪。随着计算机视觉领域的快速发展,传统的目标跟踪算法(如KCF等)逐渐暴露出在复杂场景中的局限性,特别是在处理目标的尺度变化、遮挡和背景复杂时,性能难以保证。
本文档将详细介绍 NanoTrack 的模型结构以帮助读者更好地理解并应用该算法,同时对比pt、onnx、tensorrt进行推理的耗时情况。
NanoTrack源码下载:https://github.com/HonglinChu/SiamTrackers/tree/master/NanoTrack


一、NanoTrack 工作原理

NanoTrackV1 Architecture
示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。

  1. 模型架构:NanoTrack 使用两个相同的卷积神经网络分别处理模板图像(target template)和搜索区域图像(search region)。这两个网络提取的特征随后用于相似性计算。

  2. 模板分支与搜索分支:
    模板分支:处理目标的模板图像,通常是目标的初始帧或之前帧的一个小区域。通过卷积操作,提取模板的深度特征表示。模板T的input输入为[1,3,127,127],经过backbone特征提取网络得到output1[1,48,8,8]的模板特征;
    搜索分支:处理搜索区域图像,该图像包含当前帧中可能包含目标的较大区域。这个分支也通过卷积操作提取深度特征。图像S的input输入为[1,3,255,255],经过backbone特征提取网络得到output2[1,48,16,16]的图像特征;

  3. 相关性计算:特征图上的每个位置都进行一次简单的元素级相乘,通过这种方式生成一个新的响应图。这个响应图每个像素的位置反映了该位置上的模板和搜索区域特征的相似度,表示目标在搜索区域中的可能位置。

  4. 边界框回归:在响应图生成后,跟踪器会根据该响应图来估计目标的位置和尺寸。Pointwise-Correlation 的输出会传递给回归网络,预测目标的最终边界框。

二、运行demo与转换tensorrt模型

2.1 运行pt模型demo

配置环境这些基础的步骤这里就不做赘述了。
以下讲解以V3源码为例:
NanoTrack/bin/demo.py里修改配置文件与模型路径,改成V3版本的:

parser = argparse.ArgumentParser(description='tracking demo') parser.add_argument('--config', default='../models/config/configv3.yaml',type=str, help='config file')parser.add_argument('--snapshot', default='../models/pretrained/nanotrackv3.pth', type=str, help='model name')parser.add_argument('--video_name', default='../bin/girl_dance.mp4', type=str, help='videos or image files')parser.add_argument('--save', action='store_true', help='whether visualzie result') args = parser.parse_args()

然后运行:

python demo.py

2.2 转onnx模型

这里将pt模型拆成3个部分,在NanoTrack/pytorch2onnx.py中进行修改:

# backbone input-xfbackbone_s = torch.randn([1, 3, 255, 255], device=device)export_onnx_file_path = './models/onnx/nanotrack_backbone_S.onnx'torch.onnx.export(backbone_net, backbone_s, export_onnx_file_path, input_names=['input'], output_names=['output'],verbose=True, opset_version=14)# backbone input-xfbackbone_x = torch.randn([1, 3, 127, 127], device=device)export_onnx_file_path = './models/onnx/nanotrack_backbone_T.onnx'torch.onnx.export(backbone_net, backbone_x, export_onnx_file_path, input_names=['input'], output_names=['output'],verbose=True, opset_version=14)# head  change forward  /media/dell/Data/NanoTrack/nanotrack/models/model_builder.pyhead_zf, head_xf = torch.randn([1, 96, 8, 8], device=device), torch.randn([1, 96, 16, 16], device=device)export_onnx_file_path = './models/onnx/nanotrack_head.onnx'torch.onnx.export(head_net, (head_zf, head_xf), export_onnx_file_path, input_names=['input1', 'input2'],output_names=['output1', 'output2'], verbose=True, opset_version=14)

这里需要注意V3模型,模板T的input输入为[1,3,127,127],经过backbone特征提取网络得到output1[1,96,8,8]的模板特征;
在这里插入图片描述
图像S的input输入为[1,3,255,255],经过backbone特征提取网络得到output2[1,96,16,16]的图像特征;
在这里插入图片描述

output1和output2会作为input1与input2被送入模型head部分,v3默认输出是output1[1,2,15,15],output2[1,4,15,15]
在这里插入图片描述
具体的可以查询NanoTrack/models/config/configv3.yaml中的:
在这里插入图片描述

2.3 转tensorrt模型

下载NanoTrack TRT项目:https://github.com/SSSSSSL/NanoTrack_TensorRT/tree/master

这里根据自己转出的onnx模型为例,进行修改路径(也可以直接运行NanoTrack_TensorRT/create_trt_engine.sh生成项目自带的模型)

BACK_EXAM_ONNX="models/nanotrack_backbone_S.onnx"
BACK_TEMP_ONNX="models/nanotrack_backbone_T.onnx"
HEAD_ONNX="models/nanotrack_head.onnx"TRT_BIN="/usr/src/tensorrt/bin/trtexec"BACK_EXAM_TRT="models/nanotrack_backbone_S.engine"
BACK_TEMP_TRT="models/nanotrack_backbone_T.engine"
HEAD_TRT="models/nanotrack_head.engine"

运行NanoTrack_TensorRT/create_trt_engine.sh

在这里插入图片描述
出现上图说明转模型成功

2.4 运行trt模型推理

修改NanoTrack_TensorRT/main.py中的engine文件路径:

def main():""" 主要功能是加载TensorRT引擎并进行推理 """back_exam_engine_path = "models/nanotrack_backbone_S.engine"back_temp_engine_path = "models/nanotrack_backbone_T.engine"head_engine_path = "models/nanotrack_head.engine"tracker = Tracker(back_exam_engine_path, back_temp_engine_path, head_engine_path)# webcam 开始追踪# trackLive(tracker)# video 开始追踪video_path = "/home/nvidia/Desktop/project/video/girl_dance.mp4"trackVideo(tracker, video_path, save_video=True)# benchmark 开始# vot_path = "/home/rgblab/tracking/dataset/VOT"# benchmarkVOT(tracker, vot_path)

因为我们输出的onnx响应图为15*15的,需要在NanoTrack_TensorRT/core/config.py进行相应修改:
在这里插入图片描述
相应的NanoTrack_TensorRT/core/process.py中的HeadProcessorpost部分也要修改:
在这里插入图片描述
完成以上运行:

python main.py

三、推理速度对比

模型平均FPS
pt70
onnx95
tensorrt132

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述


总结

本文介绍了 NanoTrack 的工作原理,并通过实践展示了如何运行pt模型、转换为ONNX模型以及TensorRT模型,最终在嵌入式设备上进行推理。通过对比不同推理框架的耗时情况,展示了TensorRT模型在加速推理方面的优势(相比于pt模型,TensorRT模型平均FPS提升了约90%)。

参考文档:
https://github.com/HonglinChu/SiamTrackers/tree/master/NanoTrack
https://github.com/SSSSSSL/NanoTrack_TensorRT/tree/master
https://blog.csdn.net/X_windy/article/details/126153227
https://blog.csdn.net/qq_58248345/article/details/135825911

如果阅读本文对你有用,欢迎一键三连呀!!!
2024年10月24日08:48:03
在这里插入图片描述

相关文章:

NanoTrack原理与转tensorrt推理

文章目录 前言一、NanoTrack 工作原理二、运行demo与转换tensorrt模型2.1 运行pt模型demo2.2 转onnx模型2.3 转tensorrt模型2.4 运行trt模型推理 三、推理速度对比总结 前言 NanoTrack 是一种轻量级且高效的目标跟踪算法,基于Siamese网络架构,旨在在资源…...

YOLO11改进 | 卷积模块 | 卷积模块替换为选择性内核SKConv【附完整代码一键运行】

秋招面试专栏推荐 :深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 💡💡💡本专栏所有程序均经过测试,可成功执行💡💡💡 本文给大家带来的教程是将YOLO11的卷积替…...

CentOS进入单用户模式进行密码重置

一、单用户模式介绍 单用户模式是一种特殊的启动模式,主要用于系统维护和故障排除。在单用户模式下,系统以最小化的状态启动,只有最基本的系统服务会被加载,通常只有root用户可以登录。这种模式提供了对系统的完全控制&#xff0…...

bitpoke- mysql-operator cluster

sidecar版本只支持到8.0.35,35可以支持到mysql8.0.35 . 默认镜像是5.7的。需要自己打sidecar的镜像: # Docker image for sidecar containers # https://github.com/bitpoke/mysql-operator/tree/master/images/mysql-operator-sidecar-8.0 # 参考5…...

第5课 基本数据类型

一、数据类型的诞生 在Python的世界里,万物皆对象,每个对象都有自己的若干属性,每一个属性都能描述对象的某一个方面。就像我们每个人,都有自己的身高、年龄、姓名、性别等很多方面的信息,这里的身高、年龄、姓名、性…...

OceanBase 首席科学家阳振坤:大模型时代的数据库思考

2024年 OceanBase 年度大会 即将于10月23日,在北京举行。 欢迎到现场了解更多“SQL AI ” 的探讨与分享! 近期,2024年金融业数据库技术大会在北京圆满举行,聚焦“大模型时代下数据库的创新发展”议题,汇聚了国内外众多…...

国内知名的几个镜像源

在国内,有许多常用的Python库镜像源可以帮助加速库的下载。以下是几个知名的镜像源: 1. 清华大学TUNA协会 网址: https://pypi.tuna.tsinghua.edu.cn/simple命令示例:pip install numpy --index-url https://pypi.tuna.tsinghua.edu.cn/simple2. 阿里云…...

海外著名新闻门户媒体软文发稿之华盛顿独立报-大舍传媒

在当今全球化的时代,信息传播的速度和范围达到了前所未有的程度。对于企业和个人而言,如何在国际舞台上有效地展示自己、传递信息,成为了一项至关重要的任务。而海外媒体发稿,特别是通过像华盛顿独立报这样的知名新闻门户&#xf…...

青少年编程与数学 02-002 Sql Server 数据库应用 13课题、函数的编写

青少年编程与数学 02-002 Sql Server 数据库应用 13课题、函数的编写 课题摘要:一、函数内置函数用户定义的函数 (User-Defined Functions, UDFs)使用示例主要特点 二、内置函数数学函数(Mathematical Functions)字符串函数(String Functions…...

关于LaTeX的floatrow包导入后标题无法直接放到浮动体上方

排版一个文章,标题怎么弄都弄不到表格上方,经过阅读帮助文档才发现问题。又是一个坑。 标题位置控制 使用floatrow包之后,类似 \begin{table}[htbp]\caption{xxx。}\label{table1}\centering\begin{tabular}{lcccc}\toprule& \multicol…...

Flutter Image和Text图文组件实战案例

In this section, we’ll go through the process of building a user interface that showcases a product using the Text and Image widgets. We’ll follow Flutter’s best practices to ensure a clean and effective UI structure. 在本节中,我们将使用“Te…...

使用 xlrd 和 xlwt 库进行 Excel 文件操作

使用 xlrd 和 xlwt 库进行 Excel 文件操作 在数据分析和处理的过程中,Excel 文件是最常用的数据存储格式之一。Python 提供了多种库来处理 Excel 文件,其中 xlrd 和 xlwt 是两个经典的库,分别用于读取和写入 Excel 文件。本文将详细介绍如何使用这两个库进行 Excel 文件的操…...

03.04、化栈为队

03.04、化栈为队 1、题目描述 实现一个 MyQueue 类,该类用两个栈来实现一个队列。 2、解题思路 本题要求使用两个栈来实现一个队列。队列遵循先进先出(FIFO)的原则,而栈遵循后进先出(LIFO)的原则。因此…...

Coppelia Sim (v-REP)仿真 机器人3D相机手眼标定与实时视觉追踪 (二)

coppelia sim[V-REP]仿真实现 机器人于3D相机手眼标定与实时视觉追踪 二 zmq API接口python调用python获取3D相机的数据获取彩色相机的数据获取深度相机的数据用matpolit显示 python控制机器人运动直接控制轴的位置用IK运动学直接移动到末端姿态 相机内参的标定记录拍照点的位置…...

苏州金龙技术创新赋能旅游新质生产力

2024年10月23日,备受瞩目的“2024第六届旅游出行大会”在云南省丽江市正式开幕。作为客车行业新质生产力标杆客车,苏州金龙在大会期间现场展示了新V系V12商旅版、V11和V8E纯电车型,为旅游出行提供全新升级方案。 其中,全新15座V1…...

ceph pg stale 恢复

问题 如果 ceph -s 看到 ceph 有类似如下状态的 pg data:volumes: 1/1 healthypools: 5 pools, 113 pgsobjects: 6.94k objects, 22 GiBusage: 24 GiB used, 33 TiB / 33 TiB availpgs: 0.885% pgs not active366/13880 objects degraded (2.637%)...

Openlayers高级交互(8/20):选取feature,平移feature

本示例介绍如何在vue+openlayers中使用Translate,选取feature,平移feature。选择的时候需要按住shift。Translate 功能通常是指在地图上平移某个矢量对象的位置。在 OpenLayers 中,可以通过修改矢量对象的几何位置来实现这一功能。 效果图 配置方式 1)查看基础设置:http…...

uniapp renderjs页面传值

scrip标签里加 lang“renderjs” ,可以使用原生js的dom,但是我在使用中发现以下问题,导致数据不能动态获取 1. onLoad获取上级页面传值 // APP不会触发,h5可以 2. props不会触发 解决办法添加 script 逻辑层数据传入渲染层 ren…...

AI赋能R-Meta分析核心技术:从热点挖掘到高级模型、助力高效科研与论文发表

Meta分析是针对某一科研问题,根据明确的搜索策略、选择筛选文献标准、采用严格的评价方法,对来源不同的研究成果进行收集、合并及定量统计分析的方法,现已广泛应用于农林生态,资源环境等方面,成为Science、Nature论文的…...

AMD锐龙8845HS+780M核显 虚拟机安装macOS 15 Sequoia 15.0.1 (2024.10)

最近买了机械革命无界14X,CPU是8845HS,核显是780M,正好macOS 15也出了正式版,试试兼容性,安装过程和之前差不多,这次我从外网获得了8核和16核openCore,分享一下。 提前发一下ISO镜像地址和open…...

多模态2025:技术路线“神仙打架”,视频生成冲上云霄

文|魏琳华 编|王一粟 一场大会,聚集了中国多模态大模型的“半壁江山”。 智源大会2025为期两天的论坛中,汇集了学界、创业公司和大厂等三方的热门选手,关于多模态的集中讨论达到了前所未有的热度。其中,…...

Oracle查询表空间大小

1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...

学校招生小程序源码介绍

基于ThinkPHPFastAdminUniApp开发的学校招生小程序源码,专为学校招生场景量身打造,功能实用且操作便捷。 从技术架构来看,ThinkPHP提供稳定可靠的后台服务,FastAdmin加速开发流程,UniApp则保障小程序在多端有良好的兼…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好,总是藏在那些你咬牙坚持的日子里。 硬件:OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写,"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

【git】把本地更改提交远程新分支feature_g

创建并切换新分支 git checkout -b feature_g 添加并提交更改 git add . git commit -m “实现图片上传功能” 推送到远程 git push -u origin feature_g...

拉力测试cuda pytorch 把 4070显卡拉满

import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...

智能仓储的未来:自动化、AI与数据分析如何重塑物流中心

当仓库学会“思考”,物流的终极形态正在诞生 想象这样的场景: 凌晨3点,某物流中心灯火通明却空无一人。AGV机器人集群根据实时订单动态规划路径;AI视觉系统在0.1秒内扫描包裹信息;数字孪生平台正模拟次日峰值流量压力…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信

文章目录 Linux C语言网络编程详细入门教程:如何一步步实现TCP服务端与客户端通信前言一、网络通信基础概念二、服务端与客户端的完整流程图解三、每一步的详细讲解和代码示例1. 创建Socket(服务端和客户端都要)2. 绑定本地地址和端口&#x…...

C++.OpenGL (14/64)多光源(Multiple Lights)

多光源(Multiple Lights) 多光源渲染技术概览 #mermaid-svg-3L5e5gGn76TNh7Lq {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-3L5e5gGn76TNh7Lq .error-icon{fill:#552222;}#mermaid-svg-3L5e5gGn76TNh7Lq .erro…...