Hierarchical Clustering with Hard-batch Triplet Loss for Person Re-identification

Hierarchical Clustering with Hard-batch Triplet Loss for Person Re-identification

Contribution :

  • 提出了无监督重识别方法 HCT ;
  • 在每次聚类迭代后使用 PK sampling ,减少 hard example 的影响 , 减少False Positive 样本;

HCT :

  • 使用 euclidean 距离 ;
  • 分为四个步骤 : 聚类 – PK 取样 – 微调 – 评估模型性能,并反复迭代直到性能不再提升;
  • 使用 hard_batch triplet loss 损失函数;

Conclusion:

作者在 BUC 的基础上提出无监督的重识别方法 HCT, 用 euclidean 距离代替 BUC 中使用的 minmum 距离,解决了 BUC 在 merge 次数过多后性能越来越差的问题;通过 PK samplinghard-batch triplet loss 进行训练,解决了 BUC 难以区分 hard examples 的问题。
作者还通过初始化伪标签并且交替训练提高了伪标签的质量。

在对象导航(Object Navigation)任务中,构建**分层对象到区域图**(Hierarchical Object-to-Zone Graph)是一种有效的方式,用于组织场景中的语义信息并辅助智能体进行路径规划和目标定位。这类方法通常通过将环境建模为多个抽象层次的图结构,从而实现从高层语义指导到底层动作决策的高效导航。 ### 分层对象到区域图的核心思想 1. **区域划分与对象关联** 场景被划分为若干个功能区域(例如厨房、客厅、卧室等),每个区域内包含一组相关的物体对象(如厨房中包含冰箱、微波炉、餐桌等)。这种区域划分可以基于语义分割或空间聚类算法实现。 2. **图结构构建** 图中的节点包括: - 区域节点:表示不同功能区域。 - 对象节点:表示区域内的具体物体。 - 边缘关系:表示区域之间的连通性以及对象与区域之间的归属关系。 3. **分层推理机制** 导航过程通常分为两个阶段: - 高层策略网络:负责根据任务目标选择下一个目标区域。 - 底层策略网络:负责在选定的区域内寻找具体的物体目标,并生成低级动作指令。 ### 实现方法概述 #### 1. **场景感知与图构建** - 利用模拟器(如Matterport3D、AI2Thor)提供的深度、RGB图像及语义信息来检测物体并进行区域划分。 - 使用3D点云处理技术或语义分割模型(如Mask R-CNN)提取对象类别和位置信息。 - 构建图结构时,可以使用图神经网络(GNNs)或图注意力网络(GAT)来建模区域与对象之间的关系[^2]。 #### 2. **图神经网络的应用** - 图注意力网络(GAT)能够动态地学习区域与对象之间的依赖关系,适用于非规则连接的图结构。 - 图卷积网络(GCN)可用于聚合邻居节点的信息,增强图中节点的表示能力。 - 在训练过程中,图结构可以作为输入提供给策略网络,以辅助强化学习代理做出更合理的决策。 #### 3. **多层级策略网络设计** - 高层策略:基于当前区域的状态和任务目标,预测下一个要访问的区域。 - 底层策略:专注于在当前区域中识别目标对象,并控制机器人执行移动操作(如前向移动、旋转等)。 #### 4. **训练与评估** - 使用模仿学习(Imitation Learning)或深度强化学习(Deep RL)进行端到端训练。 - 常见奖励函数包括:接近目标的正奖励、碰撞惩罚、无效动作惩罚等。 - 评估指标包括成功率(SPL)、路径长度、与目标的距离等。 ### 示例代码框架(基于PyTorch与GNN) 以下是一个简化的图构建与推理流程示例: ```python import torch import torch.nn as nn from torch_geometric.data import Data from torch_geometric.nn import GATConv class HierarchicalGraphModel(nn.Module): def __init__(self, num_region_classes, num_object_classes): super(HierarchicalGraphModel, self).__init__() self.region_embedding = nn.Embedding(num_region_classes, 64) self.object_embedding = nn.Embedding(num_object_classes, 64) self.gat1 = GATConv(64, 128, heads=4) self.gat2 = GATConv(512, 128) def forward(self, data: Data): x_region = self.region_embedding(data.region_x) x_object = self.object_embedding(data.object_x) x = torch.cat([x_region, x_object], dim=0) edge_index = data.edge_index x = self.gat1(x, edge_index) x = torch.relu(x) x = self.gat2(x, edge_index) return x # 示例数据构建 data = Data() data.region_x = torch.tensor([0, 1, 2]) # 区域ID data.object_x = torch.tensor([3, 4, 5, 6]) # 对象ID data.edge_index = torch.tensor([ [0, 1, 2, 0, 1, 2], [3, 4, 5, 6, 3, 5] ]) # 区域与对象间的连接边 ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值