【项目整理】SuperGlue和LoFTR特征匹配RKNN部署

写在前面

因整理简历需要,将项目放在博客简单介绍一下。

项目描述

应需在国产无人机上执行匹配定位任务,将当前主流的 SuperGlue 和 LoFTR 两种特征匹配方法 pytorch模型转换为 rknn 模型并部署在 npu 中。

RKNN模型的整体开发

在这里插入图片描述
整体开发流程主要包括模型转换、模型评估和板端部署。
为使用RKNPU,需要在PC上运行rknn-toolkit2工具,将训练好的模型转换为RKNN格式模型,之后使用RKNN C API或Python API在开发板上进行部署。

模型压缩和优化

模型算子适配问题

官方文档查询不支持ReduceLogSumExp,但是因为在superglue当中的sinkhorn算法会有这个算子进行计算,因此需要自定义这个算子,根据查询文档,在rknn-toolkit2转换模型过程中先对这个算子进行注册即可。
在这里插入图片描述
并在onnx模型中将所有node的type是ReduceLogSumExp都替换为cstReduceLogSumExp,在C API同样编写自定义算子并加载注册加执行。
因为转换过程中部分算子损失精度严重,加上算子适配问题,superglue的部署方案定为:onnx + rknn 混合部署,最终模型推理时间为0.63秒,相比纯onnx部署快近5.7倍。

rknn模型静态输入

rknn-toolkit2文档明确确定模型输入可以给动态输入形状列表(例如[[1,3,224,224], [1,3,512,512]]),但是不能是动态输入([1,3,h,w]),而两阶段的特征匹配模型superglue的特征提取部分superpoint输出是动态的关键点和描述子,这并不满足rknn模型转换规则,因此采用的是在superpoint输出部分去topk个输出,让superglue处理更可靠的关键点。
在这里插入图片描述

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值