
12月11日:v2.8.0
11月2日:v2.7.0
Google Colabでダウンロードまたは実行できるノートブックの例フォルダーを参照してください。
このライブラリには9つのモジュールが含まれており、それぞれが既存のコードベース内で個別に使用するか、完全な列車/テストワークフローのために一緒に組み合わせることができます。

プレーントリプレットマルギンロスを初期化しましょう:
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がトリプレットで動作している場合でも、ペアで通過することはまだ可能であることに注意してください。これは、ライブラリが必要に応じてペアをトリプレットやトリプレットに自動的に変換し、トリプレットにペアに変換するためです。
損失関数は、距離、還元剤、および正則化装置を使用してカスタマイズできます。下の図では、マイナーがバッチ内のハードペアのインデックスを見つけます。これらは、距離オブジェクトによって計算された距離マトリックスへのインデックスに使用されます。この図の場合、損失関数はペアベースであるため、ペアあたりの損失を計算します。さらに、正規者が供給されているため、バッチに埋め込むごとに正則化の損失が計算されます。ペアごとの損失と1ペアごとの損失は、(この図では)損失を高い値でのみ保持しているレデューサーに渡されます。平均は、高価値のペアと要素損失に対して計算され、一緒に加えて最終的な損失を得ます。

これがカスタマイズされた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を使用してMomentum Encoderキューを実装します。つまり、任意のタプル損失とタプルマイナーを使用して、キューからハードサンプルを抽出できます。
時間が足りず、完全な電車/テストワークフローが必要な場合は、Google Colabノートブックの例をご覧ください。
上記のすべての詳細については、ドキュメントを参照してください。
pytorch-metric-learning >= v0.9.90にはtorch >= 1.6が必要ですpytorch-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バージョンに加えて、レコードキーパーとテンソルボードがインストールされます):
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
テストモジュールを使用するには、Condaを介してインストールできるFAISSが必要です。 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 -LankListListLoss |
| Mlopezantequera | - テスターにクエリと参照セットの任意の組み合わせで動作させました - 任意のラベルの比較で精密な測定器を動作させました |
| cwkeam | -SelfSupervisedLoss - vicregloss - 精度の分解器に平均相互ランク精度を追加しました -BASELOSSWRAPPER |
| IR2718 | -thresholdConsistentMarginloss - データセットモジュール |
| Marijnl | -BatcheasyhardMiner -TwoStreamMetricLoss -GlobalTWoStreamembeddingspacetester - トレーナーを使用した例。TwoStreamMetricLoss |
| Chingisooinar | subcenterarcfaceloss |
| エリアス・ラムジ | HierarchicalSampler |
| FJSJ | supconloss |
| Alenubuntu | サークルロス |
| 面白いZhuo | pnploss |
| wconnell | scrnaseqメトリック埋め込みの学習 |
| Mkmenta | get_all_triplets_indicesの改善( INT_MAXエラーを修正) |
| Alexschuy | 最適化されたutils.loss_and_miner_utils.get_random_triplet_indices |
| ジョンジオルギ | utils.distributedのall_gather |
| Hummer12007 | utils.key_checker |
| Vltanh | dead InferenceModel.train_indexerはデータセットを受け入れました |
| Btseytlin | get_nearest_neighbors in diseencemodel |
| MLW214 | return_per_class精pRACHCALCALCULARに追加しました |
| layumi | Instanceloss |
| ノート | ref_embとref_labels分散ラッパーに追加するのを支援しました。 |
| エリソンハートン | Arcfacelossのエッジケースを修正しました。 |
| Stompsjo | ntxentlossの改善されたドキュメント。 |
| プーザー | pnplossのバグ修正。 |
| エリシム | DistributedLossWrapperの開発者の改善。 |
| gaetanlepage | |
| Z1W | |
| Thinline72 | |
| Tpanum | |
| フレリック | |
| ジョアコ | |
| Jookuma | |
| gkouros | |
| Yutanakamura-tky | |
| Kinglittleq | |
| MARTIN0258 | |
| マイケルデイゼル | |
| hsinger04 | |
| リウム | |
| BOT66 |
Facebook AIのSer-Nam Limと、私の研究アドバイザーであるSerge Belongieに感謝します。このプロジェクトは、Facebook AIでのインターンシップ中に始まりました。そこでは、Ser-Namから貴重なフィードバックを受け取りました。特に、開発の初期段階で私のコードをレビューしてくれたAshish ShahとAustin Reiterに感謝します。
このライブラリには、次の優れたオープンソースリポジトリから調整および変更されたコードが含まれています。
ロゴを設計してくれたジェフマスグレイブに感謝します。
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}
}