
11 ธันวาคม : v2.8.0
2 พฤศจิกายน : v2.7.0
ดูโฟลเดอร์ตัวอย่างสำหรับสมุดบันทึกที่คุณสามารถดาวน์โหลดหรือเรียกใช้บน Google Colab
ไลบรารีนี้มี 9 โมดูลซึ่งแต่ละห้องสามารถใช้งานได้อย่างอิสระภายใน codebase ที่มีอยู่ของคุณหรือรวมกันเข้าด้วยกันสำหรับเวิร์กโฟลว์รถไฟ/ทดสอบที่สมบูรณ์

มาเริ่มต้น TripletMarginLoss ธรรมดา:
from pytorch_metric_learning import losses
loss_func = losses . TripletMarginLoss ()ในการคำนวณการสูญเสียในลูปการฝึกอบรมของคุณผ่านการฝังตัวที่คำนวณโดยโมเดลของคุณและฉลากที่เกี่ยวข้อง embeddings ควรมีขนาด (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 คำนวณ triplets ที่เป็นไปได้ทั้งหมดภายในแบทช์ตามป้ายกำกับที่คุณส่งผ่าน คู่ที่เป็นบวกจะเกิดขึ้นโดยการฝังตัวที่แบ่งปันฉลากเดียวกันและคู่ยึดติดตั้งจะเกิดขึ้นจากการฝังตัวที่มีฉลากที่แตกต่างกัน
บางครั้งอาจช่วยเพิ่มฟังก์ชั่นการขุด:
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 จะทำงานกับ triplets แต่ก็ยังเป็นไปได้ที่จะผ่านเป็นคู่ นี่เป็นเพราะห้องสมุดจะแปลงคู่เป็นแฝดสามและแฝดเป็นคู่โดยอัตโนมัติเมื่อจำเป็น
ฟังก์ชั่นการสูญเสียสามารถปรับแต่งได้โดยใช้ระยะทางตัวลดและเครื่องยนต์ปกติ ในแผนภาพด้านล่างคนงานเหมืองจะพบดัชนีของคู่แข็งภายในชุด สิ่งเหล่านี้ใช้ในการจัดทำดัชนีลงในเมทริกซ์ระยะทางคำนวณโดยวัตถุระยะทาง สำหรับแผนภาพนี้ฟังก์ชั่นการสูญเสียเป็นแบบคู่ดังนั้นจึงคำนวณการสูญเสียต่อคู่ นอกจากนี้ยังมีการจัดสรรให้เป็นประจำดังนั้นจึงมีการคำนวณการสูญเสียการทำให้เป็นมาตรฐานสำหรับการฝังแต่ละครั้งในแบทช์ การสูญเสียต่อคู่และต่อองค์ประกอบจะถูกส่งผ่านไปยังตัวลดซึ่ง (ในแผนภาพนี้) จะทำให้การสูญเสียมีค่าสูงเท่านั้น ค่าเฉลี่ยจะถูกคำนวณสำหรับคู่ที่มีมูลค่าสูงและการสูญเสียองค์ประกอบจากนั้นจะถูกเพิ่มเข้าด้วยกันเพื่อให้ได้การสูญเสียครั้งสุดท้าย

ตอนนี้นี่คือตัวอย่างของ 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 ())การสูญเสีย triplet ที่กำหนดเองนี้มีคุณสมบัติดังต่อไปนี้:
wrapper 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 ลองดูที่ MoCo บนโน้ตบุ๊ก CIFAR10 มันใช้ CrossBatchMemory เพื่อใช้คิวโมเมนตัมโมเมนตัมซึ่งหมายความว่าคุณสามารถใช้การสูญเสีย tuple และ miner tuple ใด ๆ เพื่อแยกตัวอย่างแข็งออกจากคิว
หากคุณขาดเวลาและต้องการเวิร์กโฟลว์รถไฟ/ทดสอบที่สมบูรณ์ให้ตรวจสอบตัวอย่างโน้ตบุ๊ก 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
เพื่อติดตั้งด้วยความสามารถในการประเมินและการบันทึก
(สิ่งนี้จะติดตั้ง FAISS-GPU เวอร์ชัน PYPI ที่ไม่เป็นทางการรวมถึง Record-Geeper และ Tensorboard):
pip install pytorch-metric-learning[with-hooks]
เพื่อติดตั้งด้วยความสามารถในการประเมินและการบันทึก (CPU)
(สิ่งนี้จะติดตั้ง FAISS-CPU เวอร์ชัน PYPI ที่ไม่เป็นทางการรวมถึงผู้รักษาและ 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 บน CPU:
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 | - ManioldLoss - P2SGRADLOSS - ฮิสโตแกรม - DynamicsoftMarginLoss - RankedListloss |
| mlopezantequera | - ทำให้ผู้ทดสอบทำงานเกี่ยวกับชุดการค้นหาและชุดอ้างอิงใด ๆ - ทำให้ความแม่นยำของการทำงานร่วมกันทำงานกับการเปรียบเทียบฉลากโดยพลการ |
| cwkeam | - selfsupervisedloss - Vicregloss - เพิ่มค่าเฉลี่ยความแม่นยำอันดับซึ่งกันและกันในความแม่นยำ - Baselosswrapper |
| IR2718 | - ThresholdConsistentMarginLoss - โมดูลชุดข้อมูล |
| marijnl | - batcheasyhardminer - Twostreammetricloss - GlobalTwostreamembeddingspacetester - ตัวอย่างการใช้ Trainers.twostreammetricloss |
| Chingisooinar | subcenterarceloss |
| Elias-Ramzi | ลำดับชั้น |
| FJSJ | supconloss |
| Alenubuntu | เป็นวงกลม |
| น่าสนใจ | pnploss |
| wconnell | เรียนรู้การฝังตัวชี้วัด SCRNASEQ |
| mkmenta | ปรับปรุง get_all_triplets_indices (แก้ไขข้อผิดพลาด INT_MAX ) |
| Alexschuy | utils.loss_and_miner_utils.get_random_triplet_indices |
| johngiorgi | all_gather ใน utils.distributed |
| Hummer12007 | utils.key_checker |
| vltanh | ทำ InferenceModel.train_indexer ชุดข้อมูล |
| Btseytlin | get_nearest_neighbors ในการอนุมาน |
| MLW214 | เพิ่ม return_per_class เป็น accuracycalculator |
| Layumi | instanceloss |
| คำบอกเล่า | ช่วยเพิ่ม ref_emb และ ref_labels ลงในเครื่องห่อแบบกระจาย |
| Elisonsherton | แก้ไขเคสขอบใน ArcFaceloss |
| กระทืบ | ปรับปรุงเอกสารสำหรับ NTXENTLOSS |
| puzer | แก้ไขข้อผิดพลาดสำหรับ PNPLOSS |
| เอลิซิม | การปรับปรุงนักพัฒนาเพื่อ DistributedLossWrapper |
| Gaetanlepage | |
| Z1W | |
| Thinline72 | |
| tpanum | |
| ฟราลิก | |
| Joaqo | |
| Jookuma | |
| Gkouros | |
| Yutanakamura-tky | |
| Kinglittleq | |
| Martin0258 | |
| Michaeldeyzel | |
| hsinger04 | |
| โรคไขข้ออักเสบ | |
| บ็อต 66 |
ขอบคุณ Ser-Nam Lim ที่ Facebook AI และที่ปรึกษาการวิจัยของฉันศาสตราจารย์ Serge Beanie โครงการนี้เริ่มขึ้นในระหว่างการฝึกงานที่ Facebook AI ซึ่งฉันได้รับข้อเสนอแนะที่มีค่าจาก Ser-Nam และทีมงานด้านการมองเห็นคอมพิวเตอร์และวิศวกรการเรียนรู้ของเครื่องจักรและนักวิทยาศาสตร์การวิจัย โดยเฉพาะอย่างยิ่งขอบคุณ Ashish Shah และ Austin Reiter สำหรับการตรวจสอบรหัสของฉันในช่วงเริ่มต้นของการพัฒนา
ไลบรารีนี้มีรหัสที่ได้รับการดัดแปลงและแก้ไขจาก repos โอเพนซอร์ซที่ยอดเยี่ยมต่อไปนี้:
ขอบคุณ 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}
}