
12月11日:v2.8.0
11月2日:v2.7.0
请参阅示例文件夹以获取可以在Google Colab上下载或运行的笔记本。
该库包含9个模块,每个模块都可以在您现有的代码库中独立使用,也可以合并在一起以进行完整的火车/测试工作流程。

让我们初始化一个普通的TripletMarginloss:
from pytorch_metric_learning import losses
loss_func = losses . TripletMarginLoss ()要计算训练循环中的损失,请传递模型计算的嵌入式以及相应的标签。嵌入式应具有大小(n,embedding_size),标签应具有尺寸(n),其中n是批处理大小。
# your training loop
for i , ( data , labels ) in enumerate ( dataloader ):
optimizer . zero_grad ()
embeddings = model ( data )
loss = loss_func ( embeddings , labels )
loss . backward ()
optimizer . step ()TripletMarginloss根据您传递的标签计算批处理内的所有可能的三重态。锚阳性对由共享同一标签的嵌入形成形成,并且锚点阴性对由具有不同标签的嵌入形成。
有时它可以帮助添加采矿功能:
from pytorch_metric_learning import miners , losses
miner = miners . MultiSimilarityMiner ()
loss_func = losses . TripletMarginLoss ()
# your training loop
for i , ( data , labels ) in enumerate ( dataloader ):
optimizer . zero_grad ()
embeddings = model ( data )
hard_pairs = miner ( embeddings , labels )
loss = loss_func ( embeddings , labels , hard_pairs )
loss . backward ()
optimizer . step ()在上面的代码中,矿工发现它认为特别困难的正面和负面对。请注意,即使TripletMarginloss在三胞胎上运行,仍然可以成对通过。这是因为在必要时,库会自动将对转换为三胞胎和三重态。
损失功能可以使用距离,还原和正规化器来定制。在下图中,矿工在批处理中找到了硬对的索引。这些用于将距离矩阵索引到距离对象计算的距离矩阵。对于此图,损耗函数是基于对的,因此它计算每对损耗。此外,还提供了正规化程序,因此计算批处理中的每个嵌入的正规化损失。人均和每元素损失传递给还原器,该还原器(在此图中)仅将损失保持较高的值。计算高价值对和元素损失的平均值,然后将其添加在一起以获得最终损失。

现在,这是自定义的TripletMarginloss的示例:
from pytorch_metric_learning . distances import CosineSimilarity
from pytorch_metric_learning . reducers import ThresholdReducer
from pytorch_metric_learning . regularizers import LpRegularizer
from pytorch_metric_learning import losses
loss_func = losses . TripletMarginLoss ( distance = CosineSimilarity (),
reducer = ThresholdReducer ( high = 0.3 ),
embedding_regularizer = LpRegularizer ())该自定义的三重态损失具有以下属性:
为自我监督学习提供了一个SelfSupervisedLoss包装器:
from pytorch_metric_learning . losses import SelfSupervisedLoss
loss_func = SelfSupervisedLoss ( TripletMarginLoss ())
# your training for-loop
for i , data in enumerate ( dataloader ):
optimizer . zero_grad ()
embeddings = your_model ( data )
augmented = your_model ( your_augmentation ( data ))
loss = loss_func ( embeddings , augmented )
loss . backward ()
optimizer . step ()如果您对Moco风格的自我设计感兴趣,请查看CIFAR10笔记本上的Moco。它使用CrossBatchMemory来实现动量编码器队列,这意味着您可以使用任何元组损失,并且任何元组矿工从队列中提取硬样品。
如果您没有时间并想要完整的火车/测试工作流程,请查看Google Colab笔记本示例。
要了解以上所有内容的更多信息,请参见文档。
pytorch-metric-learning >= v0.9.90需要torch >= 1.6pytorch-metric-learning < v0.9.90没有版本要求,但用torch >= 1.2其他依赖性: numpy, scikit-learn, tqdm, torchvision
pip install pytorch-metric-learning
要获得最新的开发版本:
pip install pytorch-metric-learning --pre
在Windows上安装:
pip install torch===1.6.0 torchvision===0.7.0 -f https://download.pytorch.org/whl/torch_stable.html
pip install pytorch-metric-learning
使用评估和记录功能安装
(这将安装FAISS-GPU的非官方PYPI版本,以及记录保存器和Tensorboard):
pip install pytorch-metric-learning[with-hooks]
使用评估和记录功能(CPU)安装
(这将安装Faiss-CPU的非官方PYPI版本,以及记录保存器和张板):
pip install pytorch-metric-learning[with-hooks-cpu]
conda install -c conda-forge pytorch-metric-learning
要使用测试模块,您将需要FAISS,也可以通过Conda安装。请参阅FAISS的安装说明。
请参阅功能强大的基准测试器以查看基准结果并使用基准测试工具。
开发部门在dev部门进行:
git checkout dev
可以使用默认的unittest库进行单元测试:
python -m unittest discover您可以将测试数据类型和测试设备指定为环境变量。例如,在CPU上使用Float32和Float64进行测试:
TEST_DTYPES=float32,float64 TEST_DEVICE=cpu python -m unittest discover要运行一个测试文件,而不是整个测试套件,请指定文件名:
python -m unittest tests/losses/test_angular_loss.py代码是使用black和isort格式化的:
pip install black isort
./format_code.sh感谢提出拉的贡献者!
| 贡献者 | 亮点 |
|---|---|
| Domenicomuscill0 | - 歧管 -p2sgradloss - 直方图 -DynamicsOftMarginloss - 级别 |
| mlopezantequera | - 使测试人员可以解决查询和参考集的任何组合 - 使精确度量表与任意标签比较一起工作 |
| cwkeam | - 自我求婚 - vicregloss - 添加了精确度计算器的平均相互等级精度 - BaselossWrapper |
| IR2718 | - 阈值consistentmarginloss - 数据集模块 |
| Marijnl | - batcheasyhardminer - 两座米洛斯 - GlobalTwoStreameMbeddingsPacetester - 使用Trainers.twostreammetricloss示例 |
| chingisooinar | 子centerarcfaceloss |
| Elias-Ramzi | 层次采样器 |
| fjsj | supconloss |
| Alenubuntu | Circleloss |
| 有趣的祖 | pnploss |
| Wconnell | 学习scrnaseq公制嵌入 |
| Mkmenta | 改进的get_all_triplets_indices (修复了INT_MAX错误) |
| Alexschuy | 优化的utils.loss_and_miner_utils.get_random_triplet_indices |
| 约翰吉奥吉 | utils.distribed中的all_gather |
| 悍马12007 | utils.key_checker |
| Vltanh | 制作InferenceModel.train_indexer接受数据集 |
| btseytlin | get_nearest_neighbors中的推论emodel |
| MLW214 | 添加了return_per_class到精确度计算器 |
| Layumi | Instanceloss |
| 不可思议 | 帮助将ref_emb和ref_labels添加到分布式包装器中。 |
| Elisonsherton | 修复了Arcfaceloss中的边缘外壳。 |
| Stompsjo | 改进了NTXENTLOSS的文档。 |
| puzer | PNPLOSS的错误修复。 |
| Elisim | 开发人员改进了DistributeLossWrapper。 |
| Gaetanlepage | |
| Z1W | |
| Thinline72 | |
| tpanum | |
| 弗拉利克 | |
| joaqo | |
| Jookuma | |
| Gkouros | |
| yutanakamura-tky | |
| Kinglittleq | |
| MARTIN0258 | |
| Michaeldeyzel | |
| hsinger04 | |
| 感冒 | |
| BOT66 |
感谢您在Facebook AI的Ser-Nam Lim和我的研究顾问Serge属于您的研究。该项目始于我在Facebook AI实习期间,我收到了Ser-Nam的宝贵反馈,他的计算机视觉和机器学习工程师和研究科学家团队。特别是,感谢Ashish Shah和Austin Reiter在开发的早期阶段审查了我的代码。
该库包含已从以下大型开源存储库进行调整和修改的代码:
感谢Jeff Musgrave设计徽标。
如果您想在论文中引用Pytorch-metric-Learning,则可以使用此Bibtex:
@article{Musgrave2020PyTorchML,
title={PyTorch Metric Learning},
author={Kevin Musgrave and Serge J. Belongie and Ser-Nam Lim},
journal={ArXiv},
year={2020},
volume={abs/2008.09164}
}