؟ [2023-10-26] تمت إضافة العمود الفقري لـ DINOv2 مع السجلات، بعد السجلات التي تحتاجها محولات الرؤية.
أبحاث ميتا آي آي، فير
ماكسيم أوكاب، تيموثي دارسيت، ثيو موتاكاني، هوي في.فو، مارك سزافرانيك، فاسيل خالدوف، باتريك لاباتوت، أرماند جولين، بيوتر بوجانوفسكي
[ Paper #1
] Paper #2
] [ Blog
] [ Demo
] [ BibTeX
]
تنفيذ PyTorch والنماذج المدربة مسبقًا لـ DINOv2. لمزيد من التفاصيل، راجع الأوراق البحثية: DINOv2: تعلم الميزات المرئية القوية دون إشراف ومحولات الرؤية التي تحتاج إلى سجلات .
تنتج نماذج DINOv2 ميزات مرئية عالية الأداء يمكن استخدامها مباشرة مع مصنفات بسيطة مثل الطبقات الخطية في مجموعة متنوعة من مهام رؤية الكمبيوتر؛ تتميز هذه الميزات المرئية بالقوة والأداء الجيد عبر المجالات دون الحاجة إلى الضبط الدقيق. تم تدريب النماذج مسبقًا على مجموعة بيانات مكونة من 142 مليون صورة دون استخدام أي تسميات أو تعليقات توضيحية.
نموذج | # ل المعلمات | مع السجلات | إيماج نت ك-ن.ن | إيماج نت خطي | تحميل |
---|---|---|---|---|---|
ViT-S/14 مقطر | 21 م | 79.0% | 81.1% | العمود الفقري فقط | |
ViT-S/14 مقطر | 21 م | ✅ | 79.1% | 80.9% | العمود الفقري فقط |
ViT-B/14 مقطر | 86 م | 82.1% | 84.5% | العمود الفقري فقط | |
ViT-B/14 مقطر | 86 م | ✅ | 82.0% | 84.6% | العمود الفقري فقط |
ViT-L/14 مقطر | 300 م | 83.5% | 86.3% | العمود الفقري فقط | |
ViT-L/14 مقطر | 300 م | ✅ | 83.8% | 86.7% | العمود الفقري فقط |
فيتامين-ز/14 | 1,100 م | 83.5% | 86.5% | العمود الفقري فقط | |
فيتامين-ز/14 | 1,100 م | ✅ | 83.7% | 87.1% | العمود الفقري فقط |
برجاء اتباع التعليمات الواردة هنا لتثبيت PyTorch (التبعية الوحيدة المطلوبة لتحميل النموذج). يوصى بشدة بتثبيت PyTorch بدعم CUDA.
يتم تضمين بطاقة النموذج المقابلة في المستودع.
import torch
# DINOv2
dinov2_vits14 = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vits14' )
dinov2_vitb14 = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitb14' )
dinov2_vitl14 = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitl14' )
dinov2_vitg14 = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitg14' )
# DINOv2 with registers
dinov2_vits14_reg = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vits14_reg' )
dinov2_vitb14_reg = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitb14_reg' )
dinov2_vitl14_reg = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitl14_reg' )
dinov2_vitg14_reg = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitg14_reg' )
العمود الفقري | مع السجلات | تحميل |
---|---|---|
إيماج نت | ||
ViT-S/14 مقطر | رأس خطي (طبقة واحدة، 4 طبقات) | |
ViT-S/14 مقطر | ✅ | رأس خطي (طبقة واحدة، 4 طبقات) |
ViT-B/14 مقطر | رأس خطي (طبقة واحدة، 4 طبقات) | |
ViT-B/14 مقطر | ✅ | رأس خطي (طبقة واحدة، 4 طبقات) |
ViT-L/14 مقطر | رأس خطي (طبقة واحدة، 4 طبقات) | |
ViT-L/14 مقطر | ✅ | رأس خطي (طبقة واحدة، 4 طبقات) |
فيتامين-ز/14 | رأس خطي (طبقة واحدة، 4 طبقات) | |
فيتامين-ز/14 | ✅ | رأس خطي (طبقة واحدة، 4 طبقات) |
يمكن تحميل نماذج المصنف (الكاملة) عبر PyTorch Hub:
import torch
# DINOv2
dinov2_vits14_lc = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vits14_lc' )
dinov2_vitb14_lc = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitb14_lc' )
dinov2_vitl14_lc = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitl14_lc' )
dinov2_vitg14_lc = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitg14_lc' )
# DINOv2 with registers
dinov2_vits14_reg_lc = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vits14_reg_lc' )
dinov2_vitb14_reg_lc = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitb14_reg_lc' )
dinov2_vitl14_reg_lc = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitl14_reg_lc' )
dinov2_vitg14_reg_lc = torch . hub . load ( 'facebookresearch/dinov2' , 'dinov2_vitg14_reg_lc' )
العمود الفقري | تحميل الرأس | |
---|---|---|
جامعة نيويورك | كيتي | |
ViT-S/14 مقطر | خطي (طبقة واحدة، 4 طبقات)، DPT | خطي (طبقة واحدة، 4 طبقات)، DPT |
ViT-B/14 مقطر | خطي (طبقة واحدة، 4 طبقات)، DPT | خطي (طبقة واحدة، 4 طبقات)، DPT |
ViT-L/14 مقطر | خطي (طبقة واحدة، 4 طبقات)، DPT | خطي (طبقة واحدة، 4 طبقات)، DPT |
فيتامين-ز/14 | خطي (طبقة واحدة، 4 طبقات)، DPT | خطي (طبقة واحدة، 4 طبقات)، DPT |
العمود الفقري | نموذج التحميل | تحميل الرأس | |
---|---|---|---|
20 ألف درهم إماراتي | 20 ألف درهم إماراتي | المركبات العضوية المتطايرة2012 | |
ViT-S/14 مقطر | خطية، متعددة النطاق | خطية، متعددة النطاق | |
ViT-B/14 مقطر | خطية، متعددة النطاق | خطية، متعددة النطاق | |
ViT-L/14 مقطر | خطية، متعددة النطاق | خطية، متعددة النطاق | |
فيتامين-ز/14 | Mask2Former | خطية، متعددة النطاق | خطية، متعددة النطاق |
يتطلب رمز التدريب والتقييم PyTorch 2.0 وxFormers 0.0.18 بالإضافة إلى عدد من حزم الطرف الثالث الأخرى. لاحظ أنه تم اختبار الكود فقط مع الإصدارات المحددة ويتوقع أيضًا بيئة Linux. لإعداد جميع التبعيات المطلوبة للتدريب والتقييم، يرجى اتباع التعليمات التالية:
conda (مستحسن) - قم باستنساخ المستودع ثم قم بإنشاء وتنشيط بيئة dinov2
conda باستخدام تعريف البيئة المقدم:
conda env create -f conda.yaml
conda activate dinov2
النقطة - قم باستنساخ المستودع ثم استخدم ملف requirements.txt
المتوفر لتثبيت التبعيات:
pip install -r requirements.txt
بالنسبة للمهام الكثيفة (تقدير العمق والتجزئة الدلالية)، هناك تبعيات إضافية (إصدارات محددة من mmcv
و mmsegmentation
) والتي تم التقاطها في مواصفات التبعيات extras
:
كوندا (مستحسن) :
conda env create -f conda-extras.yaml
conda activate dinov2-extras
نقطة :
pip install -r requirements.txt -r requirements-extras.txt
يجب أن يحتوي الدليل الجذر لمجموعة البيانات على المحتويات التالية:
<ROOT>/test/ILSVRC2012_test_00000001.JPEG
<ROOT>/test/[..]
<ROOT>/test/ILSVRC2012_test_00100000.JPEG
<ROOT>/train/n01440764/n01440764_10026.JPEG
<ROOT>/train/[...]
<ROOT>/train/n15075141/n15075141_9993.JPEG
<ROOT>/val/n01440764/ILSVRC2012_val_00000293.JPEG
<ROOT>/val/[...]
<ROOT>/val/n15075141/ILSVRC2012_val_00049174.JPEG
<ROOT>/labels.txt
يتوقع تنفيذ مجموعة البيانات المقدمة وجود عدد قليل من ملفات البيانات التعريفية الإضافية ضمن الدليل الإضافي:
<EXTRA>/class-ids-TRAIN.npy
<EXTRA>/class-ids-VAL.npy
<EXTRA>/class-names-TRAIN.npy
<EXTRA>/class-names-VAL.npy
<EXTRA>/entries-TEST.npy
<EXTRA>/entries-TRAIN.npy
<EXTRA>/entries-VAL.npy
يمكن إنشاء ملفات البيانات الوصفية هذه (مرة واحدة) باستخدام الأسطر التالية من كود Python:
from dinov2 . data . datasets import ImageNet
for split in ImageNet . Split :
dataset = ImageNet ( split = split , root = "<ROOT>" , extra = "<EXTRA>" )
dataset . dump_extra ()
لاحظ أن المجلدين الجذري والإضافي لا يجب أن يكونا مجلدين منفصلين.
يرجى تعديل فئة مجموعة البيانات لتتناسب مع الإعداد المحلي الخاص بك.
dinov2
في مسار بحث وحدة Python، أي ببساطة قم ببدء الأمر الذي سيتم تشغيله باستخدام PYTHONPATH=.
.
قم بتشغيل تدريب DINOv2 على 4 عقد A100-80GB (32 وحدة معالجة رسومات) في بيئة مجموعة SLURM مع الإرسال:
python dinov2/run/train/train.py
--nodes 4
--config-file dinov2/configs/train/vitl16_short.yaml
--output-dir < PATH/TO/OUTPUT/DIR >
train.dataset_path=ImageNet:split=TRAIN:root= < PATH/TO/DATASET > :extra= < PATH/TO/DATASET >
وقت التدريب هو يوم واحد تقريبًا ويجب أن تصل نقطة التفتيش الناتجة إلى 81.6% على تقييم k-NN و82.9% على التقييم الخطي.
يقوم كود التدريب بحفظ أوزان المعلم في مجلد eval
كل 12500 تكرار للتقييم.
قم بتشغيل تدريب DINOv2 على 12 عقدة A100-80GB (96 وحدة معالجة رسومات) في بيئة مجموعة SLURM مع الإرسال:
python dinov2/run/train/train.py
--nodes 12
--config-file dinov2/configs/train/vitl14.yaml
--output-dir < PATH/TO/OUTPUT/DIR >
train.dataset_path=ImageNet22k:root= < PATH/TO/DATASET > :extra= < PATH/TO/DATASET >
وقت التدريب حوالي 3.3 أيام وينبغي أن تصل نقطة التفتيش الناتجة إلى 82.0% على تقييم k-NN و84.5% على التقييم الخطي.
يقوم كود التدريب بحفظ أوزان المعلم في مجلد eval
كل 12500 تكرار للتقييم.
يقوم كود التدريب بحفظ أوزان المعلم بانتظام. من أجل تقييم النموذج، قم بتشغيل التقييم التالي على عقدة واحدة:
python dinov2/run/eval/knn.py
--config-file < PATH/TO/OUTPUT/DIR > /config.yaml
--pretrained-weights < PATH/TO/OUTPUT/DIR > /eval/training_24999/teacher_checkpoint.pth
--output-dir < PATH/TO/OUTPUT/DIR > /eval/training_24999/knn
--train-dataset ImageNet:split=TRAIN:root= < PATH/TO/DATASET > :extra= < PATH/TO/DATASET >
--val-dataset ImageNet:split=VAL:root= < PATH/TO/DATASET > :extra= < PATH/TO/DATASET >
python dinov2/run/eval/log_regression.py
--config-file < PATH/TO/OUTPUT/DIR > /config.yaml
--pretrained-weights < PATH/TO/OUTPUT/DIR > /eval/training_24999/teacher_checkpoint.pth
--output-dir < PATH/TO/OUTPUT/DIR > /eval/training_24999/logreg
--train-dataset ImageNet:split=TRAIN:root= < PATH/TO/DATASET > :extra= < PATH/TO/DATASET >
--val-dataset ImageNet:split=VAL:root= < PATH/TO/DATASET > :extra= < PATH/TO/DATASET >
python dinov2/run/eval/linear.py
--config-file < PATH/TO/OUTPUT/DIR > /config.yaml
--pretrained-weights < PATH/TO/OUTPUT/DIR > /eval/training_24999/teacher_checkpoint.pth
--output-dir < PATH/TO/OUTPUT/DIR > /eval/training_24999/linear
--train-dataset ImageNet:split=TRAIN:root= < PATH/TO/DATASET > :extra= < PATH/TO/DATASET >
--val-dataset ImageNet:split=VAL:root= < PATH/TO/DATASET > :extra= < PATH/TO/DATASET >
نطلق الأوزان من تقييم النماذج المختلفة:
نموذج | مع السجلات | إيماج نت أعلى 1 | التقييم الخطي |
---|---|---|---|
ViT-S/14 مقطر | 81.1% | أوزان الرأس الخطية | |
ViT-S/14 مقطر | ✅ | 80.8% | أوزان الرأس الخطية |
ViT-B/14 مقطر | 84.5% | أوزان الرأس الخطية | |
ViT-B/14 مقطر | ✅ | 84.4% | أوزان الرأس الخطية |
ViT-L/14 مقطر | 86.3% | أوزان الرأس الخطية | |
ViT-L/14 مقطر | ✅ | 86.5% | أوزان الرأس الخطية |
فيتامين-ز/14 | 86.5% | أوزان الرأس الخطية | |
فيتامين-ز/14 | ✅ | 87.0% | أوزان الرأس الخطية |
يمكن تقييم أداء أوزان النماذج المدربة مسبقًا على النحو التالي في ImageNet-1k:
python dinov2/run/eval/linear.py
--config-file dinov2/configs/eval/vitg14_pretrain.yaml
--pretrained-weights https://dl.fbaipublicfiles.com/dinov2/dinov2_vitg14/dinov2_vitg14_pretrain.pth
--train-dataset ImageNet:split=TRAIN:root= < PATH/TO/DATASET > :extra= < PATH/TO/DATASET >
--val-dataset ImageNet:split=VAL:root= < PATH/TO/DATASET > :extra= < PATH/TO/DATASET >
يتم توفير عدد قليل من دفاتر الملاحظات لمساعدة المجتمع على الاستفادة من النماذج والتعليمات البرمجية:
تم إصدار كود DINOv2 وأوزان الطراز بموجب ترخيص Apache 2.0. راجع الترخيص للحصول على تفاصيل إضافية.
انظر المساهمة ومدونة قواعد السلوك.
إذا وجدت هذا المستودع مفيدًا، فيرجى التفكير في إعطاء نجمة واقتباس؟:
@misc{oquab2023dinov2,
title={DINOv2: Learning Robust Visual Features without Supervision},
author={Oquab, Maxime and Darcet, Timothée and Moutakanni, Theo and Vo, Huy V. and Szafraniec, Marc and Khalidov, Vasil and Fernandez, Pierre and Haziza, Daniel and Massa, Francisco and El-Nouby, Alaaeldin and Howes, Russell and Huang, Po-Yao and Xu, Hu and Sharma, Vasu and Li, Shang-Wen and Galuba, Wojciech and Rabbat, Mike and Assran, Mido and Ballas, Nicolas and Synnaeve, Gabriel and Misra, Ishan and Jegou, Herve and Mairal, Julien and Labatut, Patrick and Joulin, Armand and Bojanowski, Piotr},
journal={arXiv:2304.07193},
year={2023}
}
@misc{darcet2023vitneedreg,
title={Vision Transformers Need Registers},
author={Darcet, Timothée and Oquab, Maxime and Mairal, Julien and Bojanowski, Piotr},
journal={arXiv:2309.16588},
year={2023}
}