完全指南:用法、源码原理与实战配置)
人工智能机器学习深度学习计算机视觉【免费下载链接】pytorch-metric-learningThe easiest way to use deep metric learning in your application. Modular, flexible, and extensible. Written in PyTorch.项目地址https://gitcode.com/gh_mirrors/py/pytorch-metric-learning点击查看免费下载导读本文档系统讲解 pytorch-metric-learning 中的正则化器Regularizers模块。正则化器是唯一一种**既不依赖标签、也不依赖元组tuples**就能施加约束的组件——它直接作用于网络的权重weights或嵌入embeddings例如限制嵌入范数、惩罚过于接近的类中心、促使多个类中心合并等。读完本文你将掌握 6 个内置正则化器BaseRegularizer、CenterInvariantRegularizer、LpRegularizer、RegularFaceRegularizer、SparseCentersRegularizer、ZeroMeanRegularizer的构造参数、默认配置、源码级实现原理以及如何把它们挂接到ArcFaceLoss等带权重的损失函数上为你的度量学习实验增加正则约束。什么是 Regularizer无标签、无元组的约束在 pytorch-metric-learning 中损失函数losses依赖标签与正负样本元组挖掘器miners依赖距离排序而正则化器regularizers被应用到权重和嵌入上完全不需要标签或元组。它们通常作为辅助损失项叠加在主损失之上用于约束参数空间从而提升泛化能力。以一个权重正则化器传给损失函数的经典示例为例from pytorch_metric_learning import losses, regularizers R regularizers.RegularFaceRegularizer() loss losses.ArcFaceLoss(margin30, num_classes100, embedding_size128, weight_regularizerR)这里RegularFaceRegularizer被传入ArcFaceLoss的weight_regularizer参数它会在主损失之外额外计算一项类中心互斥正则损失直接惩罚彼此过于接近的类向量。正则化器如何接入损失函数从源码来看正则化器的接入点由 mixins.py 中的两个 Mixin 决定WeightRegularizerMixin提供weight_regularizer与weight_reg_weight参数weight_regularization_loss方法会计算self.weight_regularizer(weights) * self.weight_reg_weight并把结果写入损失字典中的weight_reg_loss键EmbeddingRegularizerMixin提供embedding_regularizer与embedding_reg_weight参数计算self.embedding_regularizer(embeddings) * self.embedding_reg_weight结果写入embedding_reg_loss键。在 base_metric_loss_function.py 中所有损失函数都继承了EmbeddingRegularizerMixin因此任何损失函数都可以接收embedding_regularizer而所有继承了WeightRegularizerMixin的损失函数如 large_margin_softmax_loss.py 中的LargeMarginSoftmaxLoss、normalized_softmax_loss.py 中的NormalizedSoftmaxLoss、proxy_anchor_loss.py 中的ProxyAnchorLoss、proxy_losses.py 中的ProxyNCALoss、soft_triple_loss.py 中的SoftTripleLoss都可以接收weight_regularizer。注意weight_reg_weight与embedding_reg_weight的默认值均为1用于控制正则项在总损失中的占比实际使用时可根据任务调整。BaseRegularizer所有正则化器的基类所有正则化器都继承自BaseRegularizer其构造函数签名如下regularizers.BaseWeightRegularizer(collect_stats False, reducer None, distance None)文档中该基类命名为BaseWeightRegularizer其源码实际类名位于 base_regularizer.py类名为BaseRegularizer二者指的是同一类使用时以regularizers.BaseRegularizer为准。参数说明参数说明collect_stats若为True会收集各种统计数据如同一类中心相似度、不同类中心相似度供实验分析使用若为False则跳过这些计算。想让True成为全局默认值可设置全局 COLLECT_STATS 标志对应 common_functions.py 中的COLLECT_STATS False。reducer一个 reducer 对象用于聚合逐元素损失。若为None使用默认 reducer。distance一个 distance 对象用于计算相似度/距离。若为None使用默认 distance。默认 distanceLpDistance(normalize_embeddingsTrue, p2, power1)默认 reducerMeanReducer源码级执行流程BaseRegularizer继承自ModuleWithRecordsReducerAndDistance其核心执行逻辑在forward方法中base_regularizer.pydef forward(self, x): # x 的形状应为 (N, embedding_size) self.reset_stats() loss_dict self.compute_loss(x) return self.reducer(loss_dict, x, c_f.torch_arange_from_size(x))流程分三步① 重置统计状态② 调用子类实现的compute_loss计算逐元素损失字典③ 交给reducer聚合为标量损失。子类只需要实现compute_loss并可按需覆写get_default_distance/get_default_reducer来定义默认配置。CenterInvariantRegularizer中心不变正则化论文出处Deep Face Recognition with Center Invariant Loss该正则化器鼓励未归一化的嵌入或权重拥有相同的 Lp 范数即使得所有样本/类中心的范数趋向一致。regularizers.CenterInvariantRegularizer(**kwargs)默认 distanceLpDistance(normalize_embeddingsFalse, p2, power1)约束必须是LpDistance(normalize_embeddingsFalse, power1)但p可以修改。默认 reducerMeanReducer源码实现原理在 center_invariant_regularizer.py 中__init__通过c_f.assert_distance_type(self, LpDistance, power1, normalize_embeddingsFalse)强制校验距离类型——这正是必须是LpDistance(normalize_embeddingsFalse, power1)这一约束的源码依据compute_loss先利用self.distance.get_norm(weights) ** 2计算每个向量的平方范数再计算其与全体均值torch.mean(...)的偏差最终损失为偏差平方的 1/4squared_weight_norms self.distance.get_norm(weights) ** 2 deviations_from_mean squared_weight_norms - torch.mean(squared_weight_norms) losses (deviations_from_mean**2) / 4该损失鼓励各向量范数围绕均值收敛从而中心不变。LpRegularizer小 Lp 范数正则化该正则化器鼓励嵌入/权重拥有较小的 Lp 范数起到类似权重衰减的约束作用。regularizers.LpRegularizer(p2, power1, **kwargs)参数说明参数说明p范数的类型。例如p1是曼哈顿距离L1 范数p2是欧氏距离L2 范数。默认 distance该正则化器不使用 distance 对象设置该参数不会产生任何效果。默认 reducerMeanReducer源码实现原理在 lp_regularizer.py 中compute_loss对每一行向量计算torch.norm(embeddings, pself.p, dim1)若power ! 1则再取power次幂即reg reg ** self.power。因此p2, power2时等价于对嵌入施加 L2 平方范数正则。p与power会被注册为可记录属性add_to_recordable_attributes便于在实验日志中查看。RegularFaceRegularizer类中心互斥正则化论文出处RegularFace: Deep Face Recognition via Exclusive Regularization应作为权重正则化器weight regularizer使用它惩罚彼此非常接近的类向量class vectors促使各类中心在嵌入空间中充分分离。regularizers.RegularFaceRegularizer(**kwargs)默认 distanceCosineSimilarity()只有 inverted 距离兼容。例如 DotProductSimilarity() 也可以使用。默认 reducerMeanReducer源码实现原理在 regular_face_regularizer.py 中实现参考自 http://kaizhao.net/regularface__init__中断言self.distance.is_inverted——这就是只有 inverted 距离兼容的源码依据CosineSimilarity与DotProductSimilarity均为 inverted 距离值越大表示越相似compute_loss计算权重矩阵的两两相似度矩阵cos随后在torch.no_grad()下把对角线置为负无穷fill_diagonal_通过self.distance.smallest_dist找到每一行每个类中心最相似的其他类中心构造 one-hot 掩码mask最终损失为每个类中心与其最相似类中心的相似度之和losses torch.sum(cos * mask, dim1)。也就是说某个类中心与其最近邻类中心越相似相似度越大正则损失越大从而推动类中心相互排斥、拉开间距。SparseCentersRegularizer稀疏中心正则化论文出处SoftTriple Loss: Deep Metric Learning Without Triplet Sampling应作为权重正则化器使用它鼓励一个类的多个类中心合并merge即互相靠拢聚集。该正则化器通常配合SoftTripleLoss使用一个类由多个中心表示同时希望同类的多个中心保持紧凑。regularizers.SparseCentersRegularizer(num_classes, centers_per_class, **kwargs)参数说明参数说明num_classes训练数据集中类别的数量。centers_per_class权重矩阵中对应单个类别的行数即每个类用几个中心表示。默认 distanceCosineSimilarity()这是唯一兼容的距离。默认 reducerDivisorReducer源码实现原理在 sparse_centers_regularizer.py 中__init__中断言centers_per_class 1每个类至少要有 2 个中心才有合并可言并通过c_f.assert_distance_type(self, CosineSimilarity)强制距离类型必须为CosineSimilarity——这就是唯一兼容距离的源码依据set_class_masks会构造两个布尔掩码矩阵same_class_mask标记同一类别内部中心对仅取上三角避免重复计数与diff_class_mask标记不同类别的中心对compute_loss先计算全部中心的相似度矩阵取同类中心对的相似度2.0 * center_similarities[self.same_class_mask]并clamp到最大值 2再计算reg torch.sqrt(2.0 small_val - center_similarities_masked)——相似度越高越接近 1该项越小从而鼓励同类中心靠拢损失字典中携带自定义divisor2 * torch.sum(self.same_class_mask)由DivisorReducer完成归一化求和见 divisor_reducer.py 的sum_and_dividetorch.sum(losses) / divisor当collect_statsTrue时还会记录same_class_center_sim与diff_class_center_sim两个统计量用于观察同类/异类中心相似度的变化趋势。ZeroMeanRegularizer零均值正则化论文出处Signal-to-Noise Ratio: A Robust Distance Metric for Deep Metric Learningregularizers.ZeroMeanRegularizer(**kwargs)计算公式公式中N为 batch sizeM为每个嵌入的维度size。默认 distance该正则化器不使用 distance 对象设置该参数不会产生任何效果。默认 reducerMeanReducer源码实现原理在 zero_mean_regularizer.py 中compute_loss的实现非常简洁对每个嵌入向量按维度求和并取绝对值即losses torch.abs(torch.sum(embeddings, dim1))。该损失鼓励嵌入在各维度上的和趋近于零即嵌入向量围绕原点呈零均值分布这与 signal_to_noise_ratio_losses.py 中基于信噪比的损失设计相互呼应常用于需要约束嵌入统计分布的实验。实战如何在训练中组合使用正则化器正则化器既可以作用于权重也可以作用于嵌入两者可同时使用from pytorch_metric_learning import losses, regularizers # 权重正则化推动类中心互斥 R regularizers.RegularFaceRegularizer() # 嵌入正则化约束嵌入范数 E regularizers.LpRegularizer(p2, power1) loss losses.ArcFaceLoss( margin30, num_classes100, embedding_size128, weight_regularizerR, weight_reg_weight1.0, # 可选调整正则项占比 embedding_regularizerE, # 可选作用于嵌入的正则化器 embedding_reg_weight1.0, )要点归纳weight_regularizer仅对继承WeightRegularizerMixin的损失函数可用如ArcFaceLoss、NormalizedSoftmaxLoss、ProxyAnchorLoss、ProxyNCALoss、SoftTripleLossembedding_regularizer任何损失函数都可用因为它继承自EmbeddingRegularizerMixin见 base_metric_loss_function.py六个内置正则化器统一从 regularizers/init.py 导出导入方式为from pytorch_metric_learning import regularizers若开启collect_stats或设置全局COLLECT_STATS True正则化器会记录如same_class_center_sim、diff_class_center_sim、divisor等统计量配合 logging_presets 可在训练日志中观察正则约束的收敛趋势仓库测试覆盖了各正则化器的数值正确性见 tests/regularizers/test_regular_face_regularizer.py 与 tests/regularizers/test_center_invariant_regularizer.py以及 tests/losses/test_soft_triple_loss.py 等与损失组合的测试可作为自行验证实现的参考。附内置正则化器速查表正则化器作用对象核心效果默认 distance默认 reducer关键参数CenterInvariantRegularizer嵌入/权重使所有向量范数一致LpDistance(normalize_embeddingsFalse, power1)MeanReducerp可改LpRegularizer嵌入/权重使范数尽量小不使用 distanceMeanReducerp、powerRegularFaceRegularizer权重惩罚接近的类中心互斥CosineSimilarity()inverted 距离均可MeanReducer—SparseCentersRegularizer权重鼓励同类多个中心合并CosineSimilarity()唯一兼容DivisorReducernum_classes、centers_per_classZeroMeanRegularizer嵌入/权重使各维求和趋近于零不使用 distanceMeanReducer—赞分享人工智能机器学习深度学习计算机视觉【免费下载链接】pytorch-metric-learningThe easiest way to use deep metric learning in your application. Modular, flexible, and extensible. Written in PyTorch.项目地址https://gitcode.com/gh_mirrors/py/pytorch-metric-learning点击查看免费下载相关推荐PyTorch Metric Learning 安装与配置完全指南PyTorch Metric Learning 安装与配置完全指南 项目基础介绍与编程语言 PyTorch Metric Learning 是一个深度度量学习领人工智能机器学习深度学习计算机视觉PyTorch Metric Learning正则化器从Lp正则化到中心不变性PyTorch Metric Learning正则化器从Lp正则化到中心不变性 PyTorch Metric Learning是一个强大的深度度量学习库它提人工智能机器学习深度学习计算机视觉PyTorch Metric Learning损失函数自定义距离、约简器与正则化器完全指南PyTorch Metric Learning损失函数自定义距离、约简器与正则化器完全指南 想要在深度度量学习中实现最佳性能PyTorch Metric L人工智能机器学习深度学习计算机视觉上一篇旧电视盒子装 Armbian3 步把 Amlogic 盒子改成长期在线的 Linux 服务器下一篇城通网盘直连解析工具深度体验与技术剖析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考