轻量级实时跟踪算法NanoTrack在瑞芯微RK3588上的部署以及使用

这篇具有很好参考价值的文章主要介绍了轻量级实时跟踪算法NanoTrack在瑞芯微RK3588上的部署以及使用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

文章目录

前言

一、模型转换

1.环境配置

2.模型解构

二、rk3588平台使用

1.模型初始化

2.推理



前言

github: https://github.com/Try2ChangeX/NanoTrack_RK3588_python: python版本基于rk3588的NanoTrack,每秒可达120FPS

主要参考:

SiamTrackers/NanoTrack at master · HonglinChu/SiamTrackers · GitHub

GitHub - rockchip-linux/rknn-toolkit2

        本文主要记录了在rk3588开发板上开发并运行nanotack跟踪算法,主要参考上面大佬的SiamTrackers,然后将模型转为rk3588能使用的.rknn模型并成功运行。主要记录该算法在板子上运行需要注意的一些坑和细节点。


一、模型转换

1.环境配置

rk3588对应的python版本的开发库是:GitHub - rockchip-linux/rknn-toolkit2,模型转换需要在linux-x86机器上进行转换,可以参考官方提供的packages去配置相关环境,目前rknn_toolkit2就两个版本,如下。可以选择在ubuntu18.04的机器上python3.6环境下安装第一个package,最好联网安装,会有很多依赖包。

nanotrack,深度学习,算法,python,机器学习,目标跟踪,rknn

rknn_toolkit2的使用文档可参考./rknn-toolkit2-1.3/doc/下开发文档

由于rk3588板子系统为aarch64架构,需在板子上安装对应的rknn_toolkit_lite2,同样,环境可根据其packages进行配置,这里注意,只支持python3.7和python3.9,需提前配置好板子上的python版本,可选择使用虚拟环境。

nanotrack,深度学习,算法,python,机器学习,目标跟踪,rknn

 rknn_toolkit_lite2的使用文档可参考./rknn_toolkit_lite2/docs/下开发文档

2.模型解构

关于模型的前处理,后处理等部分,可参考代码,本文不对算法做过多描述。

模型的输入分为两部分:

模板T的input输入为[1,3,127,127],经过backbone特征提取网络得到output1[1,48,8,8]的模板特征;

图像X的input输入为[1,3,255,255],经过backbone特征提取网络得到output2[1,48,16,16]的图像特征;

output1和output2会被送入模型head部分,得到两部分输出,输出尺寸分别为[1,48,8,8]和[1,48,16,16]。

考虑到rknn在转换时需提前设置好输出节点,所以这里我将模型拆成了3个部分,分别为:

input 输入数量 model output 输出数量 备注
模板T输入[1,3,127,127] 1 backbone [1,48,8,8] 1 仅在init时进行推理
图像X输入[1,3,255,255] 1 backbone [1,48,16,16] 1 update时一直推理
[1,48,8,8],[1,48,16,16] 2 head

[1,2,16,16]

[1,4,16,16]

2 双输入双输出

提前将训练好的模型分别导出为.pt格式,方便后续转.rknn

# backbone 模板特征提取模型
trace_model = torch.jit.trace(backbone_net, torch.Tensor(1, 3, 127, 127))
trace_model.save('./models/pt/backbone_127.pt')

# backbone 图像特征提取模型
trace_model = torch.jit.trace(backbone_net, torch.Tensor(1, 3, 255, 255))
trace_model.save('./models/pt/backbone_255.pt')

# head 模型
trace_model = torch.jit.trace(model, (torch.Tensor(1, 48, 8, 8), torch.Tensor(1, 48, 16, 16)))
trace_model.save('./models/pt/head.pt')

然后通过rknn_toolkit2转为.rknn模型,转换时注意是否需要归一化,以及target_platform,为防止出错,最好直接指定目标平台。如:模板特征提取的模型部分转换如下

model = './pt/nanotrack_backbone_T127.pt'
        
input_size_list = [[1, 3, 127, 127]]

# Create RKNN object
rknn = RKNN(verbose=True)

# Pre-process config
print('--> Config model')
# 注意要将target_platform指定清楚
rknn.config(mean_values=[0, 0, 0], std_values=[1, 1, 1], target_platform='rk3588')
print('done')

# Load model
print('--> Loading model')
ret = rknn.load_pytorch(model=model, input_size_list=input_size_list)
if ret != 0:
    print('Load model failed!')
    exit(ret)
print('done')

# Build model
print('--> Building model')
ret = rknn.build(do_quantization=False)
if ret != 0:
    print('Build model failed!')
    exit(ret)
print('done')

# Export rknn model
print('--> Export rknn model')
ret = rknn.export_rknn('./rknn/backbone_127.rknn')
if ret != 0:
     print('Export rknn model failed!')
     exit(ret)
print('done')

到此,模型转换完成。

可以提前在linux-x86的机器上用用模拟环境运行,测试模型是否转换正常,输出是否符合预期。

模拟环境使用可直接参考./rknn-toolkit2-1.3/examples/下的程序示例。

二、rk3588平台使用

1.模型初始化

仅仅只做模型初始化

self.rknn_Tback = RKNNLite()

# load RKNN model
print('--> Load RKNN model')
ret = self.rknn_Tback.load_rknn(Tback_weight)
if ret != 0:
    print('Load RKNN model failed')
    exit(ret)
print('done')

# init runtime environment
print('--> Init runtime environment')

ret = self.rknn_Tback.init_runtime(core_mask=RKNNLite.NPU_CORE_0)
if ret != 0:
    print('Init runtime environment failed')
    exit(ret)
print('done')
 

2.推理

需要注意的是,在rknn_lite里面,inference时,数据的输入都是需按照NHWC格式储存,所以,在送进模型之前需要将数据进行换轴操作。(与模拟环境运行不同,模拟环境可以指定data_format='nchw'),这里在rknn_toolkit_lit2的开发文档中说明了。(还是要多看文档,rknn很多组件没有开发完全,使用起来有很多限制)

nanotrack,深度学习,算法,python,机器学习,目标跟踪,rknn

inference时候的参考代码如下:

back_T_in = z_crop.transpose((0,2,3,1)) //提前换成‘nhwc’格式
self.Toutput = self.rknn_Tback.inference(inputs=[back_T_in])

预测得到的数据都是一个list类型,只有一个输出则list长度为1,有两个输出则list长度为2。

附:

有C++部署需求的小伙伴可参考:

https://github.com/Try2ChangeX/NanoTrack_Libtorch: C++版本基于libtorch的NanoTrack跟踪算法

基于libtorch部署的Nanotrack跟踪算法,已验证跑通。文章来源地址https://www.toymoban.com/news/detail-635540.html

到了这里,关于轻量级实时跟踪算法NanoTrack在瑞芯微RK3588上的部署以及使用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • git轻量级服务器gogs、gitea,非轻量级gitbucket

    本文来源:git轻量级服务器gogs、gitea,非轻量级gitbucket, 或 gitcode/gogs,gitea.md 结论: gogs、gitea很相似 确实轻, gitbucket基于java 不轻, 这三者都不支持组织树(嵌套组织 nested group) 只能一层组织。 个人用,基于gogs、gitea,两层结构树 简易办法: 把用户当成第一层节点、该用户的

    2024年02月07日
    浏览(52)
  • 轻量灵动: 革新轻量级服务开发

    从 JDK 8 升级到 JDK 17 可以让你的应用程序受益于新的功能、性能改进和安全增强。下面是一些 JDK 8 升级到 JDK 17 的最佳实战: 1.1、确定升级的必要性:首先,你需要评估你的应用程序是否需要升级到 JDK 17。查看 JDK 17 的新特性、改进和修复的 bug,以确定它们对你的应用程序

    2024年02月07日
    浏览(35)
  • 轻量级 HTTP 请求组件

    Apache HttpClient 是著名的 HTTP 客户端请求工具——现在我们模拟它打造一套简单小巧的请求工具库, 封装 Java 类库里面的 HttpURLConnection 对象来完成日常的 HTTP 请求,诸如 GET、HEAD、POST 等等,并尝试应用 Java 8 函数式风格来制定 API。 组件源码在:https://gitee.com/sp42_admin/ajaxjs/tr

    2024年02月01日
    浏览(48)
  • C++轻量级单元测试框架

    单元测试是构建稳定、高质量的程序、服务或系统的必不可少的一环。通过单元测试,我们可以在开发过程中及时发现和修复代码中的问题,提高代码的质量和可维护性。同时,单元测试也可以帮助我们更好地理解代码的功能和实现细节,从而更好地进行代码重构和优化。

    2023年04月25日
    浏览(52)
  • 一种轻量级定时任务实现

    现在市面上有各式各样的分布式定时任务,每个都有其独特的特点,我们这边的项目因为一开始使用的是分布式开源调度框架TBSchedule,但是这个框架依赖ZK, 由于ZK的不稳定性和项目老旧无人维护 ,导致我们的定时任务会偶发出现异常,比如:任务停止、任务项丢失、任务不

    2024年02月14日
    浏览(27)
  • Tomcat轻量级服务器

    目录 1.常见系统架构  C-S架构 B-S架构 2.B-S架构系统的通信步骤 3.常见WEB服服务器软件 4.Tomcat服务器的配置 下载安装 环境变量配置 测试环境变量是否配置成功 测试Tomcat服务器是否配置成功  Tomcat窗口一闪而过的解决步骤 Tomcat解决乱码 介绍: C-S架构即Client/Server(客户端/服务

    2023年04月14日
    浏览(115)
  • Kotlin 轻量级Android开发

    Kotlin 是一门运行在 JVM 之上的语言。 它由 Jetbrains 创建,而 Jetbrains 则是诸多强大的工具(如知名的 Java IDE IntelliJ IDEA )背后的公司。 Kotlin 是一门非常简单的语言,其主要目标之一就是提供强大语言的同时又保持简单且精简的语法。 其主要特性如下所示: 轻量级:这一点对

    2024年02月07日
    浏览(43)
  • 108中超轻量级的加载动画!

    大家好,我是【程序视点】小二哥! 今天要上的菜不是 Animate.js,也不是 Move.js,而是能提供108种加载动画的库: Whirl . 话不多说,直接来看例子。 以上只是冰山一角。whirl的CSS加载动画集合中有108种选项供你挑选。选中喜欢的动画后,点击“Grab the CSS on Github!”。 将跳转到

    2024年02月03日
    浏览(36)
  • 一种轻量级websocket实现方案

    定义ws服务器工具类WsktUtil 开机启动ws服务器 测试结果 自定义一个WebSocketClient子类 测试连接ws服务器 测试效果

    2024年02月15日
    浏览(29)
  • 轻量级Web框架Flask(二)

    MySQL是免费开源软件,大家可以自行搜索其官网(https://www.MySQL.com/downloads/) 测试MySQL是否安装成功 在所有程序中,找到MySQL→MySQL Server 5.6下面的命令行工具,然后单击输入密码后回车,就可以知道MySQL数据库是否链接成功。 右击桌面上的“计算机”,在弹出的快捷键菜单中

    2023年04月15日
    浏览(42)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包