
11 ديسمبر : v2.8.0
2 نوفمبر : v2.7.0
راجع مجلد الأمثلة للحصول على دفاتر الملاحظات التي يمكنك تنزيلها أو تشغيلها على Google Colab.
تحتوي هذه المكتبة على 9 وحدات ، يمكن استخدام كل منها بشكل مستقل داخل قاعدة الشفرة الحالية الخاصة بك ، أو مجتمعة معًا للحصول على سير عمل كامل للقطار/الاختبار.

دعونا نهيئ tripletmarginloss عادي:
from pytorch_metric_learning import losses
loss_func = losses . TripletMarginLoss ()لحساب الخسارة في حلقة التدريب الخاصة بك ، مرر في التضمينات المحسوبة بواسطة النموذج الخاص بك ، والعلامات المقابلة. يجب أن يكون لحجم التضمينات (N ، embeddding_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 ، فقم بإلقاء نظرة على MOCO على دفتر CIFAR10. يستخدم CrossBatchMemory لتنفيذ قائمة انتظار تشفير الزخم ، مما يعني أنه يمكنك استخدام أي خسارة Tuple ، وأي من عمال المناجم tuple لاستخراج العينات الصلبة من قائمة الانتظار.
إذا كنت أقل من الوقت وتريد سير العمل الكامل للقطار/الاختبار ، تحقق من مثال Google Colab Notebooks.
لمعرفة المزيد حول كل ما سبق ، راجع الوثائق.
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 ، والتي يمكن تثبيتها عبر كوندا أيضًا. انظر تعليمات التثبيت لـ 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 | - Massoldloss - P2Sgradloss - الرسم البياني - DynamicsoftMarginLoss - RankedListLoss |
| Mlopezantequera | - جعل المختبرون يعملون على أي مجموعة من الاستعلام والمجموعات المرجعية - صنعت AccuracyCalculator مع مقارنات الملصقات التعسفية |
| cwkeam | - selfsupervisedloss - Vicregloss - أضيفت متوسط دقة الترتيب المتبادل إلى AccuracyCalculator - Baselosswrapper |
| IR2718 | - ThresholdConsistentMarginloss - وحدة مجموعات البيانات |
| ماريجن | - Batcheasyhardminer - TwoStreamMetricloss - GlobalTwoStreamedDingspacetester - مثال باستخدام المدربين. twostreammetricloss |
| Chingisooinar | Subcenterarcfaceloss |
| إلياس رامزي | الهرمية |
| FJSJ | supconloss |
| Alenubuntu | circleloss |
| مثيرة للاهتمام | pnploss |
| Wconnell | تعلم مقياس SCRNASEQ التضمين |
| mkmenta | تحسين get_all_triplets_indices (إصلاح خطأ INT_MAX ) |
| أليكسشوي | utils.loss_and_miner_utils.get_random_triplet_indices |
| جونجيورجي | all_gather في utils.dibributed |
| Hummer12007 | utils.key_checker |
| Vltanh | جعل InferenceModel.train_indexer قبول مجموعات البيانات |
| Btseytlin | get_nearest_neighbors في استدلال العدو |
| MLW214 | تمت إضافة return_per_class إلى AccuracyCalculator |
| لايومي | Instanceloss |
| لا | ساعد في إضافة ref_emb و ref_labels إلى الأغلفة الموزعة. |
| إليسونشيرتون | تم إصلاح علبة الحافة في arcfaceloss. |
| Stompsjo | تحسين الوثائق لـ NTXENTLOSS. |
| بوزر | إصلاح الأخطاء ل pnploss. |
| إليزم | تحسينات المطور على DistributedLosswrapper. |
| Gaetanlepage | |
| Z1W | |
| Thinline72 | |
| tpanum | |
| فراليك | |
| جاكو | |
| Jookuma | |
| gkouros | |
| Yutanakamura-tky | |
| kinglittleq | |
| Martin0258 | |
| MichaelDeyzel | |
| Hsinger04 | |
| روم | |
| BOT66 |
شكرًا لك على Ser-Nam Lim في Facebook AI ، ومستشار البحث الخاص بي ، البروفيسور سيرج هودي. بدأ هذا المشروع خلال فترة التدريب في Facebook AI حيث تلقيت تعليقات قيمة من Ser-Nam ، وفريقه من رؤية الكمبيوتر والتعلم الآلي وعلماء الأبحاث. على وجه الخصوص ، بفضل آشيش شاه وأوستن رايتر لمراجعتي الكود خلال مراحله المبكرة من التطوير.
تحتوي هذه المكتبة على رمز تم تكييفه وتعديله من الإعادة المفيدة التالية المفتوحة المصدر:
بفضل جيف موسغريف لتصميم الشعار.
إذا كنت ترغب في الاستشهاد بالتعلم في Pytorch-Metric في ورقتك ، فيمكنك استخدام هذا 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}
}