losses¶
All losses are divided into three groups:
classifier-based
pair-based
proxy-based
classifier-based¶
method |
description |
|---|---|
CrossEntropyLoss |
Cross entropy loss for unsupervised methods |
LargeMarginSoftmaxLoss |
paper: Large-Margin Softmax Loss for Convolutional Neural Networks |
ArcFaceLoss |
paper: ArcFace: Additive Angular Margin Loss for Deep Face Recognition |
CosFaceLoss |
paper: CosFace: Large Margin Cosine Loss for Deep Face Recognition |
pair-based¶
method |
description |
|---|---|
ContrastiveLoss |
paper: Learning a Similarity Metric Discriminatively, with Application to Face Verification |
MarginLoss |
paper: Sampling Matters in Deep Embedding Learning |
TripletLoss |
paper: Learning local feature descriptors with triplets and shallow convolutional neural networks |
AngularLoss |
paper: Deep Metric Learning with Angular Loss |
CircleLoss |
paper: Circle Loss: A Unified Perspective of Pair Similarity Optimization |
FastAPLoss |
paper: Deep Metric Learning to Rank |
LiftedStructureLoss |
paper: Deep Metric Learning via Lifted Structured Feature Embedding |
MultiSimilarityLoss |
paper: Multi-Similarity Loss With General Pair Weighting for Deep Metric Learning |
NPairLoss |
paper: Improved Deep Metric Learning with Multi-class N-pair Loss Objective |
SignalToNoiseRatioLoss |
paper: Signal-To-Noise Ratio: A Robust Distance Metric for Deep Metric Learning |
PosPairLoss |
paper: Exploring Simple Siamese Representation Learning |
proxy-based¶
method |
description |
|---|---|
ProxyLoss |
paper: No Fuss Distance Metric Learning Using Proxies |
ProxyAnchorLoss |
paper: Proxy Anchor Loss for Deep Metric Learning |
SoftTripleLoss |
paper: SoftTriple Loss: Deep Metric Learning Without Triplet Sampling |
Example
Take ContrastiveLoss for example:
>>> loss_func = ContrastiveLoss()
>>> x = torch.randn(100, 128)
>>> mat = torch.cdist(x, x)
>>> labels = torch.randint(0, 10, size=(100,))
>>> loss = loss_func(mat, labels.unsqueeze(1), labels.unsqueeze(0))
Class¶
BaseLoss¶
- class gedml.core.losses.base_loss.BaseLoss(**kwargs)[source]¶
Bases:
gedml.core.modules.with_recorder.WithRecorderBase loss module. The output of this module will be wrapped with “FINISH” flag which indicates the output doesn’t need to be further processed.
- abstract compute_loss(metric_mat, row_labels, col_labels, indices_tuple=None, weights=None, is_same_source=False) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
- forward(metric_mat, row_labels, col_labels, indices_tuple=None, weights=None, is_same_source=False) torch.Tensor[source]¶
Defines the computation performed at every call.
Should be overridden by all subclasses.
Note
Although the recipe for forward pass needs to be defined within this function, one should call the
Moduleinstance afterwards instead of this since the former takes care of running the registered hooks while the latter silently ignores them.
CrossEntropyLoss¶
- class gedml.core.losses.classifier_based_loss.cross_entropy_loss.CrossEntropyLoss(**kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLosspaper: Momentum Contrast for Unsupervised Visual Representation Learning
Cross-entropy loss designed for MoCo.
- compute_loss(metric_mat, row_labels, col_labels, is_same_source=False, *args, **kwargs) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
LargeMarginSoftmaxLoss¶
- class gedml.core.losses.classifier_based_loss.large_margin_softmax_loss.LargeMarginSoftmaxLoss(margin=4, scale=1, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLossmodified from: https://github.com/KevinMusgrave/pytorch-metric-learning
paper: Large-Margin Softmax Loss for Convolutional Neural Networks
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple=None, is_same_source=False, *args, **kwargs) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
ArcFaceLoss¶
- class gedml.core.losses.classifier_based_loss.arcface_loss.ArcFaceLoss(margin=28.6, scale=64, **kwargs)[source]¶
Bases:
gedml.core.losses.classifier_based_loss.large_margin_softmax_loss.LargeMarginSoftmaxLosspaper: ArcFace: Additive Angular Margin Loss for Deep Face Recognition
CosFaceLoss¶
- class gedml.core.losses.classifier_based_loss.cosface_loss.CosFaceLoss(margin=0.35, scale=64, **kwargs)[source]¶
Bases:
gedml.core.losses.classifier_based_loss.large_margin_softmax_loss.LargeMarginSoftmaxLosspaper: CosFace: Large Margin Cosine Loss for Deep Face Recognition
ContrastiveLoss¶
- class gedml.core.losses.pair_based_loss.contrastive_loss.ContrastiveLoss(pos_margin=0, neg_margin=1, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLosspaper: Learning a Similarity Metric Discriminatively, with Application to Face Verification
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple, is_same_source=False, *args, **kwargs) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
MarginLoss¶
- class gedml.core.losses.pair_based_loss.margin_loss.MarginLoss(alpha=0.2, beta=1.2, nu=0, num_classes=100, beta_constant=False, is_similarity=False, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLosspaper: Sampling Matters in Deep Embedding Learning
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple, is_same_source=False, *args, **kwargs) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
TripletLoss¶
- class gedml.core.losses.pair_based_loss.triplet_loss.TripletLoss(margin=1, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLosspaper: Learning local feature descriptors with triplets and shallow convolutional neural networks
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple, is_same_source=False, *args, **kwargs) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
AngularLoss¶
- class gedml.core.losses.pair_based_loss.angular_loss.AngularLoss(alpha=40, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLosspaper: Deep Metric Learning with Angular Loss
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple, is_same_source=False, *args, **kwargs) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
CircleLoss¶
- class gedml.core.losses.pair_based_loss.circle_loss.CircleLoss(m=0.4, gamma=80, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLossmodified from: https://github.com/KevinMusgrave/pytorch-metric-learning
paper: Circle Loss: A Unified Perspective of Pair Similarity Optimization
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple, weights=None, is_same_source=False) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
FastAPLoss¶
- class gedml.core.losses.pair_based_loss.fast_ap_loss.FastAPLoss(num_bins=10, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLossmodified from: https://github.com/KevinMusgrave/pytorch-metric-learning
paper: Deep Metric Learning to Rank
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple=None, weights=None, is_same_source=False) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
LiftedStructureLoss¶
- class gedml.core.losses.pair_based_loss.lifted_structure_loss.LiftedStructureLoss(neg_margin=1, pos_margin=0, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLosspaper: Deep Metric Learning via Lifted Structured Feature Embedding
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple=None, weights=None, is_same_source=False) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
MultiSimilarityLoss¶
- class gedml.core.losses.pair_based_loss.multi_similarity_loss.MultiSimilarityLoss(alpha=2, beta=50, base=0.5, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLosspaper: Multi-Similarity Loss With General Pair Weighting for Deep Metric Learning
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple=None, weights=None, is_same_source=False) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
NPairLoss¶
- class gedml.core.losses.pair_based_loss.n_pair_loss.NPairLoss(**kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLossWork with NPairSelector (Recommend)
paper: Improved deep metric learning with multi-class n-pair loss objective
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple=None, weights=None, is_same_source=False) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
SignalToNoiseRatioLoss¶
- class gedml.core.losses.pair_based_loss.signal_to_noise_ratio_loss.SignalToNoiseRatioLoss(**kwargs)[source]¶
Bases:
gedml.core.losses.pair_based_loss.contrastive_loss.ContrastiveLosspaper: Signal-To-Noise Ratio: A Robust Distance Metric for Deep Metric Learning
PosPairLoss¶
- class gedml.core.losses.pair_based_loss.pos_pair_loss.PosPairLoss(**kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLossDesigned for SimSiam.
paper: Exploring Simple Siamese Representation Learning
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple, weights=None, is_same_source=False) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
ProxyLoss¶
- class gedml.core.losses.proxy_based_loss.proxy_loss.ProxyLoss(gamma, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLosspaper: No Fuss Distance Metric Learning Using Proxies
- compute_loss(metric_mat, row_labels, col_labels, is_same_source=False, *args, **kwargs) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
ProxyAnchorLoss¶
- class gedml.core.losses.proxy_based_loss.proxy_anchor_loss.ProxyAnchorLoss(margin=0.1, alpha=32, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLosspaper: Proxy Anchor Loss for Deep Metric Learning
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple=None, weights=None, is_same_source=False) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor
SoftTripleLoss¶
- class gedml.core.losses.proxy_based_loss.soft_triple_loss.SoftTripleLoss(centers_per_class=10, num_classes=100, la=20, gamma=0.1, margin=0.01, **kwargs)[source]¶
Bases:
gedml.core.losses.base_loss.BaseLosspaper: SoftTriple Loss: Deep Metric Learning Without Triplet Sampling
- compute_loss(metric_mat, row_labels, col_labels, indices_tuple=None, weights=None, is_same_source=False) torch.Tensor[source]¶
Compute loss value.
- Parameters
metric_mat (torch.Tensor) – Metric matrix.
row_labels (torch.Tensor) – Labels of matrix rows.
col_labels (torch.Tensor) – Labels of matrix columns.
indices_tuple (dict) – Dict that has two keys: “tuples” and “flags”
weights (torch.Tensor) – Can be element-wised, tuple-wised etc.
is_same_source (bool) –
- Returns
Final loss value (a tensor value).
- Return type
torch.Tensor