reid工程中的小trick

本文探讨了如何通过将ResNet的最后一层block的步长设为1来扩大特征映射,并结合业务场景应用Randomerase进行数据增强。同时,介绍了GAN生成图像与LabelSmooth在扩充数据集中的作用,以及增大batch size对TriHard损失效率的影响。最后,讨论了label noise和长尾效应的普遍挑战。

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

  • 将ResNet的最后一个block的stride从2改为1,增大feature map
  • 针对业务场景使用合适的augmentation
  • Random erase可以增强泛化能力
  • 用GAN造图配合label smooth可以扩充数据
  • 增大batchsize可以提高TriHard损失的效率
  • label noise和长尾效应是普遍存在的
### REID 中重新排序 (Re-Ranking) 方法 #### 1. Re-Ranking 基本概念 Re-Ranking 是指在初次检索之后,通过更复杂的模型或算法对初步得到的结果进行二次排序的过程。这有助于提升最终检索结果的质量和准确性。 #### 2. Re-Ranking 技术原理 一种常见的 Re-Ranking 方法基于 k-reciprocal nearest neighbors (kNN)[^2]。该方法不仅考虑查询样本与其最近邻之间的关系,还引入了更高阶的关系——即这些邻居自身的邻居情况。具体来说: - 对于给定的测试图像 q 和数据库中的每一个候选匹配项 g_i ,计算两者间的相似度得分 s(q, gi). - 找到前 K 名最接近 g_i 的其他图片作为其近邻 N(gi),并从中筛选出那些也将 g_i 视作自己 Top-K 近邻的对象 R(gi). - 计算加权平均分数 w_avg = sum(s(q,n))/|R(gi)| ,其中 n 属于 R(gi). 这种方法能够有效减少误报率,并且提高了跨摄像头场景下的行人重识别性能. ```python def re_ranking(query_features, gallery_features, top_k=60): """ :param query_features: 查询集特征向量 numpy array 形状为(num_query_samples, feature_dim) :param gallery_features: 库内所有样本特征向量 numpy array 形状为(num_gallery_samples, feature_dim) :return: 经过再排名后的索引列表 list of int 长度等于 num_gallery_samples """ from sklearn.metrics.pairwise import cosine_similarity # 获取原始相似度矩阵 sim_matrix = cosine_similarity(query_features, gallery_features) final_ranks = [] for i in range(len(sim_matrix)): original_order = np.argsort(-sim_matrix[i])[:top_k] reciprocal_neighbors = set() for j in original_order: temp_sim_vector = cosine_similarity([gallery_features[j]], gallery_features)[0] closest_to_j = np.argsort(-temp_sim_vector)[:top_k] if i in closest_to_j: reciprocal_neighbors.add(j) weighted_scores = [] for neighbor_index in reciprocal_neighbors: score_sum = 0. count = 0 for another_neighbor in reciprocal_neighbors: score_sum += sim_matrix[i][another_neighbor]*cosine_similarity( [gallery_features[neighbor_index]], [gallery_features[another_neighbor]])[0][0] count+=1 avg_score = score_sum / max(count, 1e-8) weighted_scores.append((avg_score, neighbor_index)) sorted_weighted_scores = sorted(weighted_scores, key=lambda x:x[0], reverse=True) refined_indices = [item[1] for item in sorted_weighted_scores][:top_k] full_list = list(original_order)+refined_indices unique_elements = [] seen = set() for element in full_list: if not element in seen: unique_elements.append(element) seen.add(element) final_ranks.extend(unique_elements) return final_ranks ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值