【论文阅读】OSTrack:Joint Feature Learning and Relation Modeling for Tracking A One-Stream Framework

文章提出了一个结合特征提取和关系建模的一流程跟踪框架,通过早期候选消除模块提高推理速度,并在实验中展现出优秀的性能和收敛速度。该方法包括联合特征提取、候选区域消除及恢复、以及使用FCN层和分类回归损失的头部设计。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

背景

现有的双流网络,双阶段跟踪网络分别提取模板特征和搜索区域的特征,因此提取的特征缺乏对目标的关注,目标背景判别力有限

创新点

  1. 通过结合特征提取和关系建模,提出一个简单高效的一流程,一阶段跟踪框架;
  2. 候选区域消除模块,用来提高模型的推理速度;
  3. 大量实验证明,SOTA,并且具有较高的推理速度和收敛速度。

方法

在这里插入图片描述

1 Joint Feature Extraction and Relation Modeling

  1. 输入的图像对为图像进行分裂并展平成的patches对,template image patch Z ( 3 ∗ H ∗ W ) Z(3*H*W) Z(3HW),搜索区域 X X X
  2. 经过一个参数可学习的线性映射层和参数可学习的position embeddings
    在这里插入图片描述
  3. 然后concatHz和Hx,作为encoder的输入
  4. 对关系建模的解释:
    在这里插入图片描述
    在这里插入图片描述
    中间层的可视化
    在这里插入图片描述

2 Early Candidate Elimination

  1. 针对相似度得分比较低的候选X,进行删除,相似度得分为:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

where qi, Kz, Kx and V denote the query vector of token hz, the key matrix corresponding to the template, the key matrix corresponding to the search region and the value matrix.
M:multi head的头数

Candidate Restoration

作用:做的padding,用于恢复原图片。
在这里插入图片描述

Head and Loss

Head:堆叠了4个FCN层
Loss:采用的是分类和回归损失
在这里插入图片描述

Experiments

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

### 关于 Relation Network 的 Few-Shot Learning 复现 #### 使用 PyTorch 实现 Relation Network 以下是基于 PyTorch 的 Relation Network 实现代码示例: ```python import torch import torch.nn as nn import torch.optim as optim from torchvision import transforms, datasets class CNNEncoder(nn.Module): """CNN Encoder""" def __init__(self): super(CNNEncoder, self).__init__() self.layer1 = nn.Sequential( nn.Conv2d(3, 64, kernel_size=3, padding=0), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(2)) self.layer2 = nn.Sequential( nn.Conv2d(64, 64, kernel_size=3, padding=0), nn.BatchNorm2d(64), nn.ReLU(), nn.MaxPool2d(2)) self.layer3 = nn.Sequential( nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.BatchNorm2d(64), nn.ReLU()) self.layer4 = nn.Sequential( nn.Conv2d(64, 64, kernel_size=3, padding=1), nn.BatchNorm2d(64), nn.ReLU()) def forward(self, x): out = self.layer1(x) out = self.layer2(out) out = self.layer3(out) out = self.layer4(out) return out.view(out.size(0), -1) class RelationNetwork(nn.Module): """Relation Network""" def __init__(self, input_size, hidden_size): super(RelationNetwork, self).__init__() self.fc1 = nn.Linear(input_size*2, hidden_size) self.fc2 = nn.Linear(hidden_size, 1) def forward(self, x): out = torch.relu(self.fc1(x)) out = torch.sigmoid(self.fc2(out)) return out def train(model_encoder, model_relation, optimizer, criterion, support_set, query_set, device='cpu'): model_encoder.train() model_relation.train() support_features = model_encoder(support_set.to(device)) # Extract features from the support set query_features = model_encoder(query_set.to(device)) # Extract features from the query set relations = [] for i in range(len(support_features)): pair_feature = torch.cat([support_features[i], query_features], dim=-1) # Concatenate pairs of features relation_score = model_relation(pair_feature).view(-1) # Compute similarity score relations.append(relation_score) output = torch.stack(relations).squeeze() # Stack all scores into a tensor target = torch.zeros(output.shape[0]).to(device) # Create ground truth labels loss = criterion(output, target) # Calculate loss optimizer.zero_grad() loss.backward() optimizer.step() return loss.item() ``` 上述代码实现了 `CNNEncoder` 和 `RelationNetwork`,并定义了一个简单的训练函数。 --- #### TensorFlow 实现 Relation Network 下面是基于 TensorFlow 的 Relation Network 实现代码示例: ```python import tensorflow as tf from tensorflow.keras.layers import Conv2D, BatchNormalization, MaxPooling2D, Flatten, Dense, ReLU, Input, concatenate from tensorflow.keras.models import Model def create_cnn_encoder(): inputs = Input(shape=(84, 84, 3)) x = Conv2D(filters=64, kernel_size=3)(inputs) x = BatchNormalization()(x) x = ReLU()(x) x = MaxPooling2D(pool_size=2)(x) x = Conv2D(filters=64, kernel_size=3)(x) x = BatchNormalization()(x) x = ReLU()(x) x = MaxPooling2D(pool_size=2)(x) x = Conv2D(filters=64, kernel_size=3, padding="same")(x) x = BatchNormalization()(x) x = ReLU()(x) x = Conv2D(filters=64, kernel_size=3, padding="same")(x) x = BatchNormalization()(x) x = ReLU()(x) outputs = Flatten()(x) encoder_model = Model(inputs=inputs, outputs=outputs, name="cnn_encoder") return encoder_model def create_relation_network(input_dim, hidden_units): feature_a = Input(shape=input_dim) feature_b = Input(shape=input_dim) concatenated = concatenate([feature_a, feature_b]) x = Dense(units=hidden_units, activation="relu")(concatenated) x = Dense(units=1, activation="sigmoid")(x) relation_model = Model(inputs=[feature_a, feature_b], outputs=x, name="relation_network") return relation_model # Example usage encoder = create_cnn_encoder() relation_net = create_relation_network(input_dim=1600, hidden_units=8) ``` 此代码展示了如何使用 Keras API 构建 CNN 编码器和关系网络模型。 --- #### 方法概述 Relation Network 是一种通过学习嵌入空间中的相似性来解决小样本分类问题的有效方法[^2]。其核心思想在于设计一个深度非线性距离度量函数,该函数能够捕捉查询样本和支持集之间的关系。相比其他元学习方法,Relation Network 更加简洁高效,在多种任务上表现出色。 为了验证其实效性,可以采用 Omniglot 或 Mini-ImageNet 数据集进行实验,并按照 N-way-K-shot 设置划分支持集与查询集。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值