Skip to content

Reference training

train.trainer

EpochCallback

Bases: Protocol

Interface for callbacks called by the trainer after each epoch.

BasicTrainer(dataset, model, objective, optimizer, epochs, scheduler=None, device='cuda', batch_size=128, num_workers=1, accumulation_steps=1, epoch_callback=None)

Implements basic training loop for Pytorch models. Checkpoints includes random states - any restarts from checkpoint preservers reproducibility.

Parameters:

Name Type Description Default
dataset ImageDataset

Training dataset that gives (x, y) tensor pairs.

required
model Module

Pytorch nn.Module for model / backbone.

required
objective Module

Pytorch nn.Module for objective / loss function.

required
optimizer Optimizer

Pytorch optimizer.

required
epochs int

Number of training epochs.

required
scheduler (_LRScheduler, optinal)

Pytorch scheduler.

None
device str

Device to be used for training.

'cuda'
batch_size int

Training batch size.

128
num_workers int

Number of data loading workers in torch DataLoader.

1
accumulation_steps int

Number of gradient accumulation steps.

1
epoch_callback EpochCallback | None

Callback function to be called after each epoch.

None

get_random_states()

Gives dictionary of random states for reproducibility.

train.objective

GSAPLoss(temperature=0.001, negative_drop_rate=0.9, chunk_size=64)

Bases: SmoothAPLoss

Global sigmoid AP surrogate (gSAP), arXiv:2610.09863.

All valid directed pairs are ranked together, including negatives from queries without positives. Optional negative dropping removes the lowest negative scores and preserves all positives. Defaults follow the paper's distractor-query recipe; set negative_drop_rate=0 for the full loss.

Parameters:

Name Type Description Default
temperature float

Positive sigmoid temperature, default 0.001.

0.001
negative_drop_rate float

Fraction of lowest negatives to drop, in [0, 1].

0.9
chunk_size int

Number of positive ranks computed per checkpointed chunk.

64

Configure global ranking temperature, negative dropping, and chunk size.

from_similarity(similarities, positive_mask, valid_mask=None)

Optimize AP over the flattened set of valid pairs.

SigLIPLoss(scale=10.0, bias=-10.0, learnable=True)

Bases: Module

Sigmoid pairwise objective with a shared learnable scale and bias.

Uses cosine similarities and excludes self-pairs for embedding batches. from_similarity also supports rectangular/cross-modal matrices. The signed logistic loss is summed over valid pairs and divided by the number of queries, as in SigLIP; it is not averaged over all pairs. Negative-only batches still train. No-positive batches behave differently from AP losses.

Initialize the logit scale and bias, optionally making them trainable.

forward(embeddings, labels)

Compute sigmoid pair loss from labeled embeddings, excluding self-pairs.

from_similarity(similarities, positive_mask, valid_mask=None)

Sum signed logistic losses over valid pairs and divide by query count.

SmoothAPLoss(temperature=0.01, chunk_size=64)

Bases: Module

Per-query sigmoid AP surrogate (mSAP).

forward(embeddings, labels) uses cosine similarities and excludes self-pairs. from_similarity(S, Y, valid_mask=None) accepts rectangular similarity/relevance matrices, including cross-modal diagonal positives. Queries without valid positives are omitted from the mean. Empty batches return a differentiable zero. Each rank includes sigmoid(0) = 0.5.

Parameters:

Name Type Description Default
temperature float

Positive sigmoid temperature.

0.01
chunk_size int

Number of positive ranks computed per checkpointed chunk.

64

Set the sigmoid temperature and positive-comparison chunk size.

forward(embeddings, labels)

Compute the AP surrogate from labeled embeddings, excluding self-pairs.

from_similarity(similarities, positive_mask, valid_mask=None)

Optimize the mean AP of rows with at least one valid positive.

ArcFaceLoss(num_classes, embedding_size, margin=0.5, scale=64)

Bases: Module

Wraps Pytorch Metric Learning ArcFaceLoss.

Parameters:

Name Type Description Default
num_classes int

Number of classes.

required
embedding_size int

Size of the input embeddings.

required
margin int

Margin for ArcFace loss (in radians).

0.5
scale int

Scale parameter for ArcFace loss.

64

SubCenterArcFaceLoss(num_classes, embedding_size, margin=0.5, scale=64, sub_centers=3)

Bases: Module

ArcFace with multiple centers per class; margin is in radians.

Parameters:

Name Type Description Default
num_classes int

Number of training classes.

required
embedding_size int

Embedding dimension.

required
margin float

Angular margin in radians, matching the ArcFace wrapper.

0.5
scale float

Logit scale.

64
sub_centers int

Number of centers per class.

3

TripletLoss(margin=0.2, mining='semihard', distance='l2_squared')

Bases: Module

Wraps Pytorch Metric Learning TripletMarginLoss.

Parameters:

Name Type Description Default
margin int

Margin for triplet loss.

0.2
mining str

Type of triplet mining. One of: 'all', 'hard', 'semihard'

'semihard'
distance str

Distance metric for triplet loss. One of: 'cosine', 'l2', 'l2_squared'

'l2_squared'

SoftmaxLoss(num_classes, embedding_size)

Bases: Module

CE with single dense layer classification head.

Parameters:

Name Type Description Default
num_classes int

Number of classes.

required
embedding_size int

Size of the input embeddings.

required

MinedLoss(loss, miner)

Bases: Module

Apply a PyTorch Metric Learning miner before a compatible backend loss.

Both modules are registered so proxies and any trainable loss parameters remain available to the optimizer and checkpoint state.

CombinedLoss(objectives, weights=None)

Bases: Module

Weighted sum of named objective(embeddings, labels) modules.

Weights are stored in checkpoint state. Include this module's parameters in the optimizer to train constituent classifiers, proxies, or scales.

train.ranking

Differentiable per-query and global average precision objectives.

The sigmoid ranks follow Eqs. (3), (8)--(10) of Psomas et al., "Global Average Precision for Representation Learning", arXiv:2610.09863.

SmoothAPLoss(temperature=0.01, chunk_size=64)

Bases: Module

Per-query sigmoid AP surrogate (mSAP).

forward(embeddings, labels) uses cosine similarities and excludes self-pairs. from_similarity(S, Y, valid_mask=None) accepts rectangular similarity/relevance matrices, including cross-modal diagonal positives. Queries without valid positives are omitted from the mean. Empty batches return a differentiable zero. Each rank includes sigmoid(0) = 0.5.

Parameters:

Name Type Description Default
temperature float

Positive sigmoid temperature.

0.01
chunk_size int

Number of positive ranks computed per checkpointed chunk.

64

Set the sigmoid temperature and positive-comparison chunk size.

forward(embeddings, labels)

Compute the AP surrogate from labeled embeddings, excluding self-pairs.

from_similarity(similarities, positive_mask, valid_mask=None)

Optimize the mean AP of rows with at least one valid positive.

GSAPLoss(temperature=0.001, negative_drop_rate=0.9, chunk_size=64)

Bases: SmoothAPLoss

Global sigmoid AP surrogate (gSAP), arXiv:2610.09863.

All valid directed pairs are ranked together, including negatives from queries without positives. Optional negative dropping removes the lowest negative scores and preserves all positives. Defaults follow the paper's distractor-query recipe; set negative_drop_rate=0 for the full loss.

Parameters:

Name Type Description Default
temperature float

Positive sigmoid temperature, default 0.001.

0.001
negative_drop_rate float

Fraction of lowest negatives to drop, in [0, 1].

0.9
chunk_size int

Number of positive ranks computed per checkpointed chunk.

64

Configure global ranking temperature, negative dropping, and chunk size.

from_similarity(similarities, positive_mask, valid_mask=None)

Optimize AP over the flattened set of valid pairs.

SigLIPLoss(scale=10.0, bias=-10.0, learnable=True)

Bases: Module

Sigmoid pairwise objective with a shared learnable scale and bias.

Uses cosine similarities and excludes self-pairs for embedding batches. from_similarity also supports rectangular/cross-modal matrices. The signed logistic loss is summed over valid pairs and divided by the number of queries, as in SigLIP; it is not averaged over all pairs. Negative-only batches still train. No-positive batches behave differently from AP losses.

Initialize the logit scale and bias, optionally making them trainable.

forward(embeddings, labels)

Compute sigmoid pair loss from labeled embeddings, excluding self-pairs.

from_similarity(similarities, positive_mask, valid_mask=None)

Sum signed logistic losses over valid pairs and divide by query count.