
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는 트리플렛에서 작동하지만 여전히 쌍을 전달할 수 있습니다. 이는 라이브러리가 필요한 경우 쌍을 트리플렛으로 자동으로 변환하고 필요할 때 쌍으로 변환하기 때문입니다.
손실 기능은 거리, 리더 및 일반화를 사용하여 사용자 정의 할 수 있습니다. 아래 다이어그램에서 광부는 배치 내에서 딱딱한 쌍의 지수를 찾습니다. 이들은 거리 개체에 의해 계산 된 거리 매트릭스로 인덱싱하는 데 사용됩니다. 이 다이어그램의 경우 손실 함수는 쌍 기반이므로 쌍 당 손실을 계산합니다. 또한, 정규화자가 공급되었으므로 배치에 각각의 임베딩에 대해 정규화 손실이 계산됩니다. 쌍당 및 요소 당 손실은 감속기로 전달되며 (이 다이어그램에서) 손실은 높은 값으로 만 유지됩니다. 평균은 고가의 쌍 및 요소 손실에 대해 계산 된 다음 최종 손실을 얻기 위해 함께 추가됩니다.

이제 여기에 맞춤형 트리플렛 마진 로스의 예가 있습니다.
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를 살펴보십시오. 크로스 배치 메모리를 사용하여 모멘텀 인코더 큐를 구현하므로 튜플 손실과 튜플 광부를 사용하여 큐에서 딱딱한 샘플을 추출 할 수 있습니다.
시간이 부족하고 완전한 열차/테스트 워크 플로우를 원한다면 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
최신 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와 레코드 키퍼 및 텐서 보드를 설치합니다) :
pip install pytorch-metric-learning[with-hooks]
평가 및 로깅 기능 (CPU)으로 설치하려면
(이것은 비공식 PYPI 버전의 FAISS-CPU와 레코드 키퍼 및 텐서 보드를 설치합니다) :
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 - RankedListLoss |
| mlopezantequera | - 테스터가 쿼리와 참조 세트의 조합에서 작동하게했습니다. - 임의의 레이블 비교와 함께 정확한 계산기가 작동합니다 |
| CWKEAM | -SelfSupervisedLoss - Vicregloss - 정확도 계산기에 평균 상호 순위 정확도가 추가되었습니다 - BaselossWrapper |
| IR2718 | -Thesholdconsistentmarginloss - 데이터 세트 모듈 |
| 마리지 (Marijnl) | -BatcheAsyHardminer -WOSTREAMMETRICLOSS -Globaltwostreamembeddingspacetester - 트레이너 사용 예. TwostreamMetricLoss |
| Chingisooinar | subcenterarcfaceloss |
| Elias-Ramzi | 계층 샘플러 |
| fjsj | Supconloss |
| 알레부투틀투 | Circleloss |
| 흥미로운 zhuo | pnploss |
| WCONNELL | SCRNaseQ 메트릭 임베딩 학습 |
| mkmenta | 개선 된 get_all_triplets_indices ( INT_MAX 오류 수정) |
| Alexschuy | 최적화 된 utils.loss_and_miner_utils.get_random_triplet_indices |
| Johngiorgi | all_gather |
| Hummer12007 | utils.key_checker |
| Vltanh | InferenceModel.train_indexer 데이터 세트를 허용합니다 |
| Btseytlin | get_nearest_neighbors in retencemodel |
| MLW214 | accuracycalculator에 return_per_class 추가했습니다 |
| LAYUMI | Instanceloss |
| NOTODY | 분산 포장지에 ref_emb 및 ref_labels 추가하는 데 도움이되었습니다. |
| Elisonsherton | Arcfaceloss에서 가장자리 케이스를 수정했습니다. |
| stompsjo | ntxentloss에 대한 개선 된 문서. |
| 푸제 | pnploss의 버그 수정. |
| 엘리심 | DistributedLossWrapper의 개발자 개선. |
| Gaetanlepage | |
| Z1W | |
| Thinline72 | |
| tpanum | |
| Fralik | |
| Joaqo | |
| 주쿠마 | |
| Gkouros | |
| 유타나카 무라-틱 | |
| Kinglittleq | |
| 마틴 0258 | |
| Michaeldeyzel | |
| hsinger04 | |
| 비 카타르 | |
| bot66 |
Facebook AI의 Ser-Nam Lim과 저의 연구 고문 인 Serge Puffice 교수에게 감사드립니다. 이 프로젝트는 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}
}