؟؟؟؟ الأخبار : تم إصدار النسخة الدورية الموسعة من UniRepLKNet في arxiv.
تعمل شبكة ConvNet على توحيد الطرائق المتعددة وتتفوق في الأداء على النماذج الخاصة بالطرائق . تلخص هذه الورقة المبادئ التوجيهية المعمارية لبناء شبكة CNN ذات نواة كبيرة، والتي تعمل بشكل مذهل مع الصور والطرائق الأخرى. هذه هي أحدث مساهمة في كلا المجالين المؤثرين - إعادة الهيكلة (منذ RepVGG, Ding et al. 2021) و ConvNet ذات النواة الكبيرة جدًا (منذ RepLKNet, Ding et al. 2022). دقة ImageNet تبلغ 88.0%، وCOCO AP تبلغ 56.4، وADE20K mIoU تبلغ 55.6 مع التدريب المسبق على ImageNet-22K فقط . سرعة وأداء فعلي أعلى من الطرازات الحديثة مثل ConvNeXt v2 وInternImage. من خلال بنية موحدة ومعالجة مسبقة بسيطة للغاية خاصة بطريقة محددة، يحقق أداءً متطورًا في التعرف على الصوت، والأكثر إثارة للدهشة، التنبؤ بدرجة الحرارة العالمية وسرعة الرياح (مهمة تنبؤ بسلسلة زمنية صعبة النطاق وضخمة)، متفوقًا على نظام التنبؤ العالمي الحالي.
وبشكل أكثر تحديدًا، فإننا نساهم من جانبين:
لا تمثل UniRepLKNet "عودة" لـ ConvNet في مجالها الأصلي فحسب، بل تعرض أيضًا إمكانات ConvNet ذات النواة الكبيرة "لاحتلال" مناطق جديدة، مع تسليط الضوء على المزيد من القدرة على التكيف والفائدة الواسعة عبر الأساليب والمهام المختلفة.
تم إصدار نقاط فحص ImageNet وCOCO وADE20K (انظر مستودع Huggingface الموضح أدناه)، باستثناء UniRepLKNet-S التي تم تدريبها مسبقًا من ImageNet-22K، وUperNet مع UniRepLKNet-XL، والتي فُقدت، ونحن نقوم بإعادة إنتاجها.
آخر الأخبار: تم إصلاح الخلل الناتج عن هذا الالتزام في الأول من كانون الأول (ديسمبر) 2023. وتم إصلاحه الآن. إذا استخدمت unireplknet.py بعد الأول من كانون الأول (ديسمبر) 2023، فيرجى التحقق من الرمز الخاص بك.
unireplknet.py
بحيث يمكنك نسخها ولصقها مباشرة في MMDetection أو MMSegmentation، على سبيل المثال، هنا وهنا. إذا كنت لا تريد استخدامه مع MMDetection أو MMSegmentation، فيمكنك حذف سطور التعليمات البرمجية هذه بأمان.timm.create_model
لإنشاء النماذج. على سبيل المثال، model = timm.create_model('unireplknet_l', num_classes=num_classes_of_your_task, in_22k_pretrained=True)
سوف يستدعي الوظيفة unireplknet_l
المحددة هنا، والتي ستقوم ببناء UniRepLKNet-L وتنزيل نقاط التفتيش الخاصة بنا تلقائيًا وتحميل الأوزان. # The simplest way to use our model in your project is to copy-paste unireplknet.py into your working directory and create models. For example
from unireplknet import *
model = timm.create_model('unireplknet_l', num_classes=num_classes_of_your_task, in_22k_pretrained=True)
reparameterize_unireplknet()
التي تحول UniRepLKNet المدربة إلى بنية الاستدلال، والتي تزيل بشكل مكافئ الفروع المتوازية في كتل Reparam Dialted وطبقات Batch Norm ومصطلح التحيز في GRN. سيكون الكود الزائف لخط الأنابيب الكامل مثل training_model = unireplknet_l (..., deploy = False )
train ( training_model )
trained_results = evaluate ( training_model )
training_model . reparameterize_unireplknet ()
inference_results = evaluate ( training_model )
# you will see inference_results are identical to trained_results
save ( training_model , 'converted_weights.pth' )
# use the converted model
deploy_model = unireplknet_l (..., deploy = True )
load_weights ( deploy_model , 'converted_weights.pth' )
deploy_results = evaluate ( deploy_model )
# you will see deploy_results == inference_results == trained_results
some_unireplknet_model.reparameterize_unireplknet()
يعادل استدعاء timm.utils.reparameterize_model(some_unireplknet_model)
. لذا، إذا كنت تستخدم الكود الخاص بنا مع قاعدة بيانات timm، على سبيل المثال، كود تقييم timm، فما عليك سوى إضافة --reparam
إلى الأمر الخاص بك حتى يتم استدعاء timm.utils.reparameterize_model
(انظر هنا). لقد قدمنا خمس طرق لتنزيل نقاط التفتيش الخاصة بنا.
pip install huggingface_hub
ثم استخدم Huggingface_hub مثل هذا في كود بايثون الخاص بك، على سبيل المثال،
from huggingface_hub import hf_hub_download
repo_id = 'DingXiaoH/UniRepLKNet'
cache_file = hf_hub_download ( repo_id = repo_id , filename = FILE_NAME )
checkpoint = torch . load ( cache_file , map_location = 'cpu' )
model . load_state_dict ( checkpoint )
راجع مستودع Huggingface الخاص بنا أو الكود الخاص بنا لـ FILE_NAME (على سبيل المثال، unireplknet_xl_in22k_pretrain.pth
).
استخدم واجهة سطر الأوامر (CLI) المعانقة. تحقق من البرنامج التعليمي.
قم بتنزيل نقاط التحقق الخاصة بنا تلقائيًا عن طريق تمرير in_1k_pretrained=True
أو in_22k_pretrained=True
أو in_22k_to_1k=True
أثناء استدعاء الوظائف المتوفرة لدينا. انظر الكود هنا.
اسم | دقة | حساب@1 | #params | يتخبط | الأوزان |
---|---|---|---|---|---|
UniRepLKNet-A | 224x224 | 77.0 | 4.4 م | 0.6 جرام | ckpt |
UniRepLKNet-F | 224x224 | 78.6 | 6.2 م | 0.9 جرام | ckpt |
UniRepLKNet-P | 224x224 | 80.2 | 10.7 م | 1.6 جرام | ckpt |
UniRepLKNet-N | 224x224 | 81.6 | 18.3 م | 2.8 جرام | ckpt |
UniRepLKNet-T | 224x224 | 83.2 | 31 م | 4.9 جرام | ckpt |
UniRepLKNet-S | 224x224 | 83.9 | 56 م | 9.1 جرام | ckpt |
اسم | دقة | #params | يتخبط | ckpt |
---|---|---|---|---|
UniRepLKNet-S | 224x224 | 56 م | 26.7 جرام | ckpt |
UniRepLKNet-B | 224x224 | 98 م | 47.2 جرام | ckpt |
UniRepLKNet-L | 192x192 | 218 م | 105.4 جرام | ckpt |
UniRepLKNet-XL | 192x192 | 386 م | 187 جرام | ckpt |
اسم | دقة | حساب@1 | #params | يتخبط | ckpt |
---|---|---|---|---|---|
UniRepLKNet-S | 384x384 | 86.4 | 56 م | 26.7 جرام | ckpt |
UniRepLKNet-B | 384x384 | 87.4 | 98 م | 47.2 جرام | ckpt |
UniRepLKNet-L | 384x384 | 87.9 | 218 م | 105.4 جرام | ckpt |
UniRepLKNet-XL | 384x384 | 88.0 | 386 م | 187 جرام | ckpt |
تم إصدار ملفات التعليمات البرمجية والمستندات والتكوين. انظر دليل الكشف هنا.
لقد تم بالفعل إطلاق سراح نقاط التفتيش على وجه العناق. يمكنك تنزيلها الآن من https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main.
أو يمكنك تنزيل نقاط التفتيش هذه من Google Drive كما يلي:
اسم | دقة | خريطة الصندوق | خريطة القناع | #params | يتخبط | الأوزان |
---|---|---|---|---|---|---|
UniRepLKNet-T | 1280x800 | 51.7 | 44.9 | 89 م | 749 جرام | ckpt |
UniRepLKNet-S | 1280x800 | 53.0 | 45.9 | 113 م | 835 جرام | ckpt |
UniRepLKNet-S_22K | 1280x800 | 54.3 | 47.1 | 113 م | 835 جرام | ckpt |
UniRepLKNet-B_22K | 1280x800 | 54.8 | 47.4 | 155 م | 978 جرام | ckpt |
UniRepLKNet-L_22K | 1280x800 | 55.8 | 48.4 | 276 م | 1385 جرام | ckpt |
UniRepLKNet-XL_22K | 1280x800 | 56.4 | 49.0 | 443 م | 1952م | ckpt |
تم إصدار ملفات التعليمات البرمجية والمستندات والتكوين. انظر دليل التجزئة هنا.
لقد تم بالفعل إطلاق سراح نقاط التفتيش على وجه العناق. يمكنك تنزيلها الآن من https://huggingface.co/DingXiaoH/UniRepLKNet/tree/main.
أو يمكنك تنزيل نقاط التفتيش هذه من Google Drive كما يلي:
اسم | دقة | ميكرويو (ss/ms) | #params | يتخبط | الأوزان |
---|---|---|---|---|---|
UniRepLKNet-T | 512x512 | 48.6/49.1 | 61 م | 946 جرام | ckpt |
UniRepLKNet-S | 512x512 | 50.5/51.0 | 86 م | 1036 جرام | ckpt |
UniRepLKNet-S_22K | 512x512 | 51.9/52.7 | 86 م | 1036 جرام | ckpt |
UniRepLKNet-S_22K | 640x640 | 52.3/52.7 | 86 م | 1618 م | ckpt |
UniRepLKNet-B_22K | 640x640 | 53.5/53.9 | 130 م | 1850 جرام | ckpt |
UniRepLKNet-L_22K | 640x640 | 54.5/55.0 | 254 م | 2507 جرام | ckpt |
UniRepLKNet-XL_22K | 640x640 | 55.2/55.6 | 425 م | 3420 جرام | ckpt |
نعطي مثالا لأمر التقييم.
وحدة معالجة رسومية واحدة
python main.py --model unireplknet_b --eval true
--resume unireplknet_b_in22k_to_in1k_384_acc87.40.pth
--input_size 384
--data_path /path/to/imagenet-1k
وحدة معالجة الرسومات المتعددة
python -m torch.distributed.launch --nproc_per_node=8 main.py
--model unireplknet_b --eval true
--resume unireplknet_b_in22k_to_in1k_384_acc87.40.pth
--input_size 384
--data_path /path/to/imagenet-1k
للتدريب أو الضبط الدقيق لشبكات UniRepLKNets على ImageNet-1K أو 22K، راجع هذا الدليل
للحصول على وثائق مفصلة، يرجى الرجوع إلى هذه الوثائق على النحو التالي:
نحن نستخدم تطبيق تحويل كبير النواة في PyTorch وهو أكثر كفاءة من torch.nn.Conv2d الأصلي. يتم تنفيذه بناءً على خوارزمية iGEMM وأداة خفيفة الوزن تسمى Cutlass. التثبيت بسيط للغاية وسيكلفك أقل من دقيقة واحدة. إذا لم تقم بتثبيت هذا التنفيذ، فلا يزال بإمكانك استخدام نموذجنا في أي مكان تريده ولكنه سيكون أبطأ قليلاً.
unzip cutlass.zip
، وأدخل إلى الدليل. يعمل هذا الإصدار من Cutlass الموجود في هذا المستودع بشكل جيد مع تطبيق النواة الكبيرة وإصدارات Python المتعددة. يمكنك بدلاً من ذلك استخدام فرع Cutlass الذي يحتفظ به فريق MegEngine (استنساخ https://github.com/MegEngine/cutlass)، ولكن قد تحتاج إلى توخي المزيد من الحذر مع إصدار python الخاص بك (راجع هذه المشكلة).cd examples/19_large_depthwise_conv2d_torch_extension
./setup.py install --user
. إذا حصلت على أخطاء، فتحقق من CUDA_HOME
.python depthwise_conv2d_implicit_gemm.py
PATH_TO_CUTLASS_DIRECTORY/examples/19_large_depthwise_conv2d_torch_extension
إلى PYTHONPATH
الخاص بك بحيث يمكنك from depthwise_conv2d_implicit_gemm import DepthWiseConv2dImplicitGEMM
في أي مكان. بعد ذلك يمكنك استخدام DepthWiseConv2dImplicitGEMM
كبديل لـ nn.Conv2d
.يجب أن يعمل مع مجموعة واسعة من وحدات معالجة الرسومات وإصدارات PyTorch/CUDA. نقترح عليك المحاولة أولاً والتحقق من البيئات فقط في حالة حدوث أي أخطاء. استخدمت أحدث اختباراتنا كليهما
يُذكر (انظر هنا) أن عدم تطابق إصدار بايثون قد يؤدي إلى خطأ ( forward_fp32.cu(212): error: more than one instance of constructor "cutlass::Tensor4DCoord::Tensor4DCoord" ...
أو cutlass/include/cutlass/fast_math.h(741): error: no suitable conversion function from "__half" to "float" exists
). يرجى ترقية أو خفض مستوى بايثون الخاص بك. نشكر بصدق @sleeplessai و@ewrfcas على مشاركة تجربتهما.
يتم الترحيب بطلبات السحب (على سبيل المثال، تطبيقات أفضل أو تطبيقات أخرى أو تطبيقات على أطر عمل أخرى).
إذا كان الكود والورقة البحثية يساعدان في بحثك، فيرجى التكرم بالاستشهاد بما يلي:
@article{zhang2024scaling,
title={Scaling Up Your Kernels: Large Kernel Design in ConvNets towards Universal Representations},
author={Zhang, Yiyuan and Ding, Xiaohan and Yue, Xiangyu},
journal={arXiv preprint arXiv:2410.08049},
year={2024}
}
@inproceedings{ding2024unireplknet,
title={UniRepLKNet: A Universal Perception Large-Kernel ConvNet for Audio Video Point Cloud Time-Series and Image Recognition},
author={Ding, Xiaohan and Zhang, Yiyuan and Ge, Yixiao and Zhao, Sijie and Song, Lin and Yue, Xiangyu and Shan, Ying},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={5513--5524},
year={2024}
}
تم إصدار هذا المشروع بموجب ترخيص Apache 2.0. يرجى الاطلاع على ملف الترخيص لمزيد من المعلومات.