
11 декабря : v2.8.0
2 ноября : v2.7.0
Смотрите папку «Примеры» для ноутбуков, которые вы можете загрузить или запустить в Google Colab.
Эта библиотека содержит 9 модулей, каждый из которых может использоваться независимо в вашей существующей кодовой базе или объединена для полного рабочего процесса поезда/тестирования.

Давайте инициализируем простые триплеткинлосс:
from pytorch_metric_learning import losses
loss_func = losses . TripletMarginLoss ()Чтобы вычислить потерю в вашем тренировочном цикле, пропустите встроенные встроения, рассчитанные по вашей модели, и соответствующие этикетки. Внедрения должны иметь размер (n, Encedding_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 работает на триплетах, все равно возможно пройти в парах. Это связано с тем, что библиотека автоматически преобразует пары в триплеты и триплеты в пары, когда это необходимо.
Функции потерь могут быть настроены с использованием расстояний, редукторов и регуляризаторов. На приведенной ниже диаграмме шахтер находит индексы жестких пар в партии. Они используются для индекса в матрицу расстояния, рассчитанной по объекту расстояния. Для этой диаграммы функция потери основана на паре, поэтому она вычисляет потерю на пару. Кроме того, был поставлен регулятор, поэтому для каждого встраивания в партию вычисляется потеря регуляризации. Потери для каждой пары и каждого элемента передаются в восстановитель, который (на этой диаграмме) сохраняет убытки только с высокой стоимостью. Средние значения вычисляются для высокоотешенных пары и потерь элементов, а затем добавляются вместе, чтобы получить окончательные потери.

Теперь вот пример индивидуальной триплеткинлосс:
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 на Cifar10. Он использует 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
Чтобы получить последнюю версию Dev :
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
Установка с возможностями оценки и регистрации
(Это установит неофициальную версию PYPI FAISS-GPU, а также записывающий хранитель и Tensorboard):
pip install pytorch-metric-learning[with-hooks]
Для установки с возможностями оценки и ведения журнала (ЦП)
(Это установит неофициальную версию PYPI FAISS-CPU, а также записывающий хранитель и Tensorboard):
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Вы можете указать тестовые данные и тестовые устройства как переменные среды. Например, чтобы проверить с помощью 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 | - Marifoldloss - P2sgradloss - гистограмма - Dynamicsoftmarginloss - RankedListloss |
| Mlopezantequera | - Заставил тестеров работать над любой комбинацией запросов и справочных наборов - Сделано выполнено работать с произвольным сравнением метки |
| cwkeam | - Selfsupervisedloss - Vicregloss - Добавлена средняя точность взаимного ранга к точности - BaselossWrapper |
| IR2718 | - ThresholdConsistentMarginLoss - Модуль наборов данных |
| Marijnl | - Batcheasyhardminer - Twostreammetricloss - GlobaltwoStreamembeddingspacetester - Пример с использованием trainers.twostreammetricloss |
| Chingisoinar | Subcenterarcfaceloss |
| Элиас-Рамзи | Иерархический сцена |
| FJSJ | Supconloss |
| Alenubuntu | CircleLoss |
| Интересно | Pnploss |
| Wconnell | Изучение метрического встраивания ScrNaseQ |
| Mkmenta | Улучшен get_all_triplets_indices (исправлена ошибка INT_MAX ) |
| Alexschuy | Оптимизированные utils.loss_and_miner_utils.get_random_triplet_indices |
| Johngiorgi | all_gather in utils.distributed |
| Hummer12007 | utils.key_checker |
| Влтанх | Сделано InferenceModel.train_indexer принять наборы данных |
| Btseytlin | get_nearest_neighbors в neferencemodel |
| MLW214 | Добавлено return_per_class к точности |
| Layumi | Instanceloss |
| Нота | Помог добавить ref_emb и ref_labels в распределенные обертки. |
| Элисоншертон | Исправлено корпус края в Arcfaceloss. |
| Stompsjo | Улучшенная документация для ntxentloss. |
| Пузер | Исправление ошибки для Pnploss. |
| Илисим | Улучшения разработчика в DistributedLossWrapper. |
| GaetanlePage | |
| Z1W | |
| ThinLine72 | |
| Tpanum | |
| Фралик | |
| Жуако | |
| Джукума | |
| Gkouros | |
| Yutanakamura-tky | |
| Kinglittleq | |
| Martin0258 | |
| Майклдеейзель | |
| Hsinger04 | |
| рев | |
| BOT66 |
Спасибо Ser-Nam Lim в Facebook AI и мой консультант по исследованиям, профессор Серж-Кости. Этот проект начался во время моей стажировки в Facebook AI, где я получил ценные отзывы от Ser-Nam, а также его команду инженеров по компьютерному зрению и машинного обучения и исследователей. В частности, благодаря Ашишу Шаху и Остину Рейтеру за просмотр моего кода на ранних стадиях развития.
Эта библиотека содержит код, который был адаптирован и изменен из следующих великих репо с открытым исходным кодом:
Спасибо Джеффу Масгрейву за разработку логотипа.
Если вы хотите привести в свою бумагу, вы можете использовать этот 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}
}