引言

多模态目标跟踪(Multi-modal Object Tracking)旨在通过结合RGB模态与其他辅助模态(如热红外、深度、事件数据)来增强可见光传感器的感知能力,尤其在复杂场景下显著提升跟踪鲁棒性。然而,现有方法在频域和时间域的关键线索利用上仍存在不足,导致性能受限。本文提出了一种新颖的视觉与记忆双适配器(Visual and Memory Dual Adapter, VMDA),通过联合建模频域、空间和通道特征,构建更鲁棒的多模态表示,并引入基于人类记忆机制的记忆适配器,有效捕捉全局时间线索。

Fig.1: Framework comparisons between the existing prompt-learning-based tracker and our tracker.(a) Existing trackers propagate temporal cues from adjacent frames and fuse multi-modal features in channel and spatial dimensions.(b) The proposed method integrates a memory adapter to propagate cues adaptively and merge features in channel,spatial, and frequency dimensions.

模型原理

整体框架

本文提出的VMDA框架主要包括四个组件:ViT骨干网络、视觉适配器、记忆适配器和预测头。具体流程如下:

  1. 输入嵌入​:将RGB和辅助模态的模板和搜索区域通过补丁嵌入层转换为令牌。
  2. 浅层特征融合​:使用频率引导多模态融合模块(FMFM)进行初步特征融合。
  3. 时间线索传播​:从多级记忆池中检索时间跟踪线索令牌,并通过记忆滤波器处理后输入ViT块。
  4. 多模态增强与融合​:在每个ViT块后,输出特征通过多模态融合模块(MFM)进行增强和融合,时间跟踪线索则通过记忆滤波器处理。
  5. 最终预测​:经过L层ViT块后,最终令牌用于头部操作生成跟踪结果,并将时间跟踪线索存储在多级记忆池中。

Fig. 3: The framework of the proposed method. We first transform the templates and search region of each modality into tokens, then concatenate them with temporal cue tokens and feed them into the L-layer ViT block. The visual adapter and memory adapter are paralleled with the ViT block. The memory adapter is used to propagate the valuable temporal cues across frames, and the visual adapter is used for modality interaction and fusion. The output features are fed into the prediction head to produce the tracking results.

视觉适配器

视觉适配器的核心在于频率引导多模态融合模块,其设计如下:

频率选择器

频率选择器通过分离高频和低频成分来提取丰富的纹理细节和边缘信息:

其中,Fori​表示输入特征,Fhigh​和Flow​分别表示高频和低频特征。随后,通过全局平均池化和线性层选择和融合不同频率特征:

最终通过元素级加法组合高频和低频成分。

多模态融合模块

多模态融合模块从空间和通道视角整合多模态信息:

通过元素级加法组合三个分支的输出,并通过卷积层生成最终输出。

记忆适配器

记忆适配器由短期、长期和永久记忆组成,通过记忆更新和检索操作实现全局时间线索的传播:

在检索操作中,使用最新时间跟踪线索作为查询选择各层记忆:

并通过元素级加法组合结果,再通过内存滤波器调整。

创新点

  1. 频率引导多模态融合模块​:首次在多模态跟踪中联合建模频域、空间和通道特征,显著提升了跨模态特征融合的效果。
  2. 多级记忆适配器​:借鉴人类记忆机制,设计多级记忆池存储全局时间线索,并通过动态更新和检索操作确保可靠的时间信息传播。
  3. 轻量化适配器设计​:仅微调少量参数,显著降低了训练成本和计算复杂度。

实验结果

数据集与评估指标

实验在RGB-T、RGB-D和RGB-E三个主流多模态跟踪数据集上进行评估:

  • RGB-T跟踪​:RGBT234和LasHeR数据集,使用精度率(PR)和成功率(SR)作为主要指标。
  • RGB-D跟踪​:DepthTrack和VOT22-RGBD数据集,使用精度(Pre)、召回率(Re)、F-score和EAO等指标。
  • RGB-E跟踪​:VisEvent数据集,使用PR和SR作为评估指标。
对比结果

实验结果表明,本文方法在所有数据集上均显著优于现有方法:

  • RGB-T跟踪​:在RGBT234数据集上,PR达到0.919,SR达到0.689;在LasHeR数据集上,PR达到0.726,SR达到0.571。
  • RGB-D跟踪​:在DepthTrack数据集上,Pre、Re和F-score分别为0.636、0.663和0.649;在VOT22-RGBD数据集上,EAO达到0.773,A达到0.821,R达到0.933。
  • RGB-E跟踪​:在VisEvent数据集上,PR达到0.803,SR达到0.626。

Fig. 6: Precision scores of different attributes on the VisEvent test set.

代码

import torch
import torch.nn as nn
import torch.nn.functional as Fclass FrequencySelector(nn.Module):def __init__(self, in_channels, hidden_dim=64):super().__init__()self.conv = nn.Conv2d(in_channels, hidden_dim, 1)self.bn = nn.BatchNorm2d(hidden_dim)self.fc_global = nn.Linear(hidden_dim, hidden_dim)self.fc_high = nn.Linear(hidden_dim, hidden_dim)self.fc_low = nn.Linear(hidden_dim, hidden_dim)def forward(self, x):# 分离高频和低频特征ap_x = F.avg_pool2d(x, kernel_size=3, stride=1, padding=1)conv_x = self.conv(ap_x)bn_x = self.bn(conv_x)softmax_x = F.softmax(bn_x, dim=1)f_high = x * softmax_xf_low = x - f_high# 全局特征融合f_global = torch.cat([f_high, f_low], dim=1)f_global = F.adaptive_avg_pool2d(f_global, 1).view(f_global.size(0), -1)f_global = self.fc_global(f_global)# 动态加权f_high_gate = torch.sigmoid(self.fc_high(f_global)).unsqueeze(-1).unsqueeze(-1)f_low_gate = torch.sigmoid(self.fc_low(f_global)).unsqueeze(-1).unsqueeze(-1)f_high = f_high * f_high_gatef_low = f_low * f_low_gatereturn f_high + f_lowclass MultiModalFusion(nn.Module):def __init__(self, in_channels):super().__init__()self.conv_rgb = nn.Conv2d(in_channels, in_channels, 1)self.conv_aux = nn.Conv2d(in_channels, in_channels, 1)self.spatial_att = nn.Sequential(nn.Conv2d(in_channels*2, in_channels, 1),nn.Softmax(dim=1))self.channel_att = nn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(in_channels, in_channels//8, 1),nn.ReLU(),nn.Conv2d(in_channels//8, in_channels, 1),nn.Sigmoid())def forward(self, x_rgb, x_aux):# 空间注意力x_rgb_s = self.conv_rgb(x_rgb)x_aux_s = self.conv_aux(x_aux)concat_s = torch.cat([x_rgb_s, x_aux_s], dim=1)spatial_weight = self.spatial_att(concat_s)x_s_fused = x_rgb_s * spatial_weight[:, :x_rgb_s.size(1)] + \x_aux_s * spatial_weight[:, x_rgb_s.size(1):]# 通道注意力x_concat = torch.cat([x_rgb, x_aux], dim=1)channel_weight = self.channel_att(x_concat)x_c_fused = x_concat * channel_weight# 合并return x_s_fused + x_c_fusedclass MemoryAdapter(nn.Module):def __init__(self, mem_slots=8, token_dim=768):super().__init__()self.mem_slots = mem_slotsself.token_dim = token_dimself.query_proj = nn.Linear(token_dim, token_dim)self.key_proj = nn.Linear(token_dim, token_dim)self.value_proj = nn.Linear(token_dim, token_dim)def forward(self, query, memory_bank):# 计算注意力权重Q = self.query_proj(query).unsqueeze(1)  # [B, 1, D]K = self.key_proj(memory_bank)          # [B, S, D]V = self.value_proj(memory_bank)          # [B, S, D]attn_scores = torch.matmul(Q, K.transpose(-2, -1)) / torch.sqrt(torch.tensor(self.token_dim))attn_weights = F.softmax(attn_scores, dim=-1)# 加权求和retrieved = torch.matmul(attn_weights, V)  # [B, 1, D]return retrieved.squeeze(1)class VMDATracker(nn.Module):def __init__(self, num_classes=2):super().__init__()# 假设ViT骨干网络已预训练self.vit = VisionTransformer()  # 用户需自行实现或调用预训练模型self.visual_adapter = nn.Sequential(FrequencySelector(in_channels=3),MultiModalFusion(in_channels=3))self.memory_adapter = MemoryAdapter(mem_slots=3, token_dim=768)self.prediction_head = nn.Sequential(nn.Linear(768, 256),nn.ReLU(),nn.Linear(256, num_classes))def forward(self, x_rgb, x_aux, template_tokens):# 多模态特征提取x_rgb = self.visual_adapter(x_rgb)x_aux = self.visual_adapter(x_aux)# 时间线索融合memory_tokens = self.memory_adapter(x_aux, template_tokens)# ViT主干网络fused_tokens = torch.cat([x_rgb, x_aux, memory_tokens], dim=1)vit_output = self.vit(fused_tokens)# 预测头bbox_pred = self.prediction_head(vit_output)return bbox_pred# 使用示例
model = VMDATracker()
optimizer = torch.optim.AdamW(model.parameters(), lr=1e-4)
loss_fn = nn.CrossEntropyLoss()# 假设输入数据格式为 (B, C, H, W)
inputs_rgb = torch.randn(2, 3, 256, 256)
inputs_aux = torch.randn(2, 3, 256, 256)
templates = torch.randn(2, 3, 64, 64)# 前向传播
outputs = model(inputs_rgb, inputs_aux, templates)
loss = loss_fn(outputs, labels)
loss.backward()
optimizer.step()

总结

本文提出了一种基于视觉与记忆双适配器的多模态目标跟踪方法,通过频率引导的多模态融合和多级记忆适配器,显著提升了多模态跟踪的性能。实验结果表明,该方法在RGB-T、RGB-D和RGB-E等多个任务上均达到了最先进的性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/pingmian/87686.shtml
繁体地址,请注明出处:http://hk.pswp.cn/pingmian/87686.shtml
英文地址,请注明出处:http://en.pswp.cn/pingmian/87686.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理想汽车6月交付36279辆 第二季度共交付111074辆

理想汽车-W(02015)发布公告,2025年6月,理想汽车交付新车36279辆,第二季度共交付111074辆。截至2025年6月30日,理想汽车历史累计交付量为133.78万辆。 在成立十周年之际,理想汽车已连续两年成为人民币20万元以上中高端市…

MobileNets: 高效的卷积神经网络用于移动视觉应用

摘要 我们提出了一类高效的模型,称为MobileNets,专门用于移动和嵌入式视觉应用。MobileNets基于一种简化的架构,利用深度可分离卷积构建轻量级的深度神经网络。我们引入了两个简单的全局超参数,能够有效地在延迟和准确性之间进行…

SDP服务发现协议:动态查询设备能力的底层逻辑(面试深度解析)

SDP的底层逻辑揭示了物联网设备交互的本质——先建立认知,再开展协作。 一、SDP 核心知识点高频考点解析 1.1 SDP 的定位与作用 考点:SDP 在蓝牙协议栈中的位置及核心功能 解析:SDP(Service Discovery Protocol,服务发现协议)位于蓝牙协议栈的中间层,依赖 L2CAP 协议传…

CppCon 2018 学习:GIT, CMAKE, CONAN

提到的: “THE MOST COMMON C TOOLSET” VERSION CONTROL SYSTEM BUILDING PACKAGE MANAGEMENT 这些是 C 项目开发中最核心的工具链组成部分。下面我将逐一解释每部分的作用、常见工具,以及它们如何协同构建现代 C 项目。 1. VERSION CONTROL SYSTEM&am…

使用tensorflow的线性回归的例子(五)

我们使用Iris数据,Sepal length为y值而Petal width为x值。import matplotlib.pyplot as pltimport numpy as npimport tensorflow as tffrom sklearn import datasetsfrom tensorflow.python.framework import opsops.reset_default_graph()# Load the data# iris.d…

虚幻基础:动作——蒙太奇

能帮到你的话,就给个赞吧 😘 文章目录 动作——蒙太奇如果动作被打断,则后续的动画通知不会执行 动作——蒙太奇 如果动作被打断,则后续的动画通知不会执行

[工具系列] 开源的 API 调试工具 Postwoman

介绍 随着 Web 应用的复杂性增加,API 测试已成为开发中不可或缺的一部分,无论是前端还是后端开发,确保 API 正常运行至关重要。 Postman 长期以来是开发者进行 API 测试的首选工具,但是很多基本功能都需要登陆才能使用&#xff…

【力扣 简单 C】746. 使用最小花费爬楼梯

目录 题目 解法一 题目 解法一 int min(int a, int b) {return a < b ? a : b; }int minCostClimbingStairs(int* cost, int costSize) {const int n costSize; // 楼顶&#xff0c;第n阶// 爬到第n阶的最小花费 // 爬到第n-1阶的最小花费从第n-1阶爬上第n阶的花费…

python+django开发带auth接口

pythondjango开发带auth接口 # coding utf-8 import base64 from django.contrib import auth as django_authfrom django.core.exceptions import ObjectDoesNotExist from django.http import JsonResponsefrom sign.models import Eventdef user_auth(request):"&quo…

RBAC权限模型如何让API访问控制既安全又灵活?

url: /posts/9f01e838545ae8d34016c759ef461423/ title: RBAC权限模型如何让API访问控制既安全又灵活? date: 2025-07-01T04:52:07+08:00 lastmod: 2025-07-01T04:52:07+08:00 author: cmdragon summary: RBAC权限模型通过用户、角色和权限的关联实现访问控制,核心组件包括用…

安达发|告别低效排产:APS高级排程如何助力电池企业智造升级?

在全球能源转型的背景下&#xff0c;动力电池、储能电池等市场需求快速增长&#xff0c;电池制造企业面临着订单波动大、工艺复杂、交期严格等挑战。传统的手工排产或基于ERP的简单计划模式已难以满足高效、精准的生产需求。APS高级排程通过智能算法优化生产计划&#xff0c;实…

数据结构20250620_数据结构考试

试卷01 天津金海通软件笔试题 选择题(4*416) 对于双向循环链表,在p指针所指的结点之后插入s指针所指结点的操作应为 p->nexts; s->prip; p->next->pris; s->nextp->nextp->nexts; p->next->pris; s->prip; s->nextp->nexts->pri …

4. 寻找正序数组的中位数

题目&#xff1a; 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 示例&#xff1a; 输入&#xff1a;nums1 [1,3], nums2 [2] 输出&#xff1a…

DeepSeek飞机大战小游戏HTML5(附源码)

用DeepSeek帮忙生成的飞机大战小游戏网页版&#xff0c;基于HTML5。 提示词prompt 帮我做一个网页版的飞机大战游戏 html5的游戏功能说明 玩家控制&#xff1a; 使用键盘方向键或WASD移动飞机 空格键发射子弹 移动设备支持触摸控制 游戏机制&#xff1a; 敌机会从屏幕顶部随机位…

全素山药开发指南:从防痒处理到高可用食谱架构

摘要&#xff1a;本文系统性解析山药的化学特性&#xff08;黏液蛋白/皂苷致痒机制&#xff09;及全素场景下的烹饪解决方案&#xff0c;提供6种高内聚低耦合的食谱实现&#xff0c;附完整防氧化与黏液控制技术方案。一、核心问题分析&#xff1a;山药处理中的“痛点”致痒物质…

OpenLayers 入门指南:序言

本专栏旨在帮助零GIS基础的开发人员系统掌握OpenLayers这一强大的开源Web地图库&#xff0c;通过 “理论实战” 结合的方式&#xff0c;逐步实现从创建地图到构建一个基础地图应用模版。无论你是前端开发者、GIS爱好者&#xff0c;都可以通过此专栏零基础开始用OpenLayers开发一…

WebRTC轻量学习 libdatachannel

最近想了解一些在浏览器中推送音视频流&#xff0c;寻找很多版本的代码&#xff0c;C、Go、Python等语言实现的webRTC协议。 按照搭建难度和快速实现首选Python版本的WebRTC&#xff0c;这种是最适合原型开发的。 选型&#xff1a;C的开源库libdatachannel Python的开源库Ai…

Vue2中的keep-alive:组件状态缓存与性能优化实战指南

目录 一、什么是keep-alive&#xff1f; 与普通组件切换的对比 二、核心用法详解 1. 基础用法&#xff1a;动态组件缓存 2. 路由视图缓存 3. 生命周期钩子 三、进阶配置与优化 1. 精准控制缓存组件 &#xff08;1&#xff09;include/exclude属性 &#xff08;2&…

FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护?

url: /posts/f96ba438de34dc197fd2598f91ae133d/ title: FastAPI安全加固:密钥轮换、限流策略与安全头部如何实现三重防护? date: 2025-07-02T22:05:04+08:00 lastmod: 2025-07-02T22:05:04+08:00 author: cmdragon summary: FastAPI框架安全加固方案包括密钥轮换自动化、请…

NeighborGeo:基于邻居的IP地理定位(五)

NeighborGeo:基于neighbors的IP地理定位 X. Wang, D. Zhao, X. Liu, Z. Zhang, T. Zhao, NeighborGeo: IP geolocation based on neighbors, Comput. Netw. 257 (2025) 110896, 5. Case analysis 为了说明NeighborGeo在优化图结构和利用邻居信息进行预测方面的优势,将目标I…