هذا هو التنفيذ الرسمي لورقةنا: توسيع ضبط متناثر لاستخدام الذاكرة المنخفض.
نقترح طريقة تسمى Snell ( S parse ضبط مع Ker nel ized l ora) لتمكين الضبط المتناثر مع استخدام الذاكرة المنخفض. يتحلل Snell من المصفوفة القابلة للضبط للتفاؤل إلى مصفوفين منخفضة الرتبة يمكن التعلم ، مما يوفر من التخزين المكلف للمصفوفة الكاملة الأصلية. للحفاظ على فعالية الضبط المتفرقة مع المصفوفات منخفضة الرتبة ، نقوم بتمديد التحلل منخفض الرتبة من منظور kernel. على وجه التحديد ، نطبق وظائف kernel غير الخطية على دمج المصفوفة الكاملة واكتساب زيادة في رتبة المصفوفة المدمجة. يعزز استخدام الرتب العليا من قدرة Snell على تحسين النموذج الذي تم تدريبه مسبقًا بشكل متقطع لمهام المصب. لزيادة تقليل استخدام الذاكرة في الضبط المتفرّب ، نقدم آلية تنفيس قائمة على المنافسة ، وتجنب تخزين فهارس الوزن القابلة للضبط. تُظهر تجارب مكثفة على مهام متعددة المصب أن Snell يحقق أداءً أحدث مع استخدام ذاكرة منخفضة ، ويمتد PEFT فعال مع ضبط متناثر إلى نماذج واسعة النطاق.

إذا وجدت هذا المستودع أو ورقتنا مفيدة ، فيرجى التفكير في الاستشهاد بنا!
@InProceedings{Shen_2024_SNELL,
title={Expanding Sparse Tuning for Low Memory Usage},
author={Shen, Shufan and Sun, Junshu and Ji, Xiangyang and Huang, Qingming and Wang, Shuhui},
booktitle={Advances in Neural Information Processing Systems (NeurIPS)},
year={2024}
}
./train.py : قم بتشغيل هذا الملف للتدريب../scripts : البرامج النصية لتكييف النماذج التي تم تدريبها مسبقًا مع مهام المصب مع Snell../lib./model./engine.py./data : تخزين معايير FGVC و VTAB-1K.استنساخ هذا الريبو:
git clone https://github.com/ssfgunner/SNELL.git
cd SNELLقم بإنشاء بيئة افتراضية كوندا وقم بتنشيطها:
conda create -n snell python=3.8 -y
conda activate snell تثبيت torch==1.12.1 و torchvision==0.13.1 مع CUDA==11.3 :
conda install pytorch==1.12.1 torchvision==0.13.1 cudatoolkit=11.3 -c pytorchتثبيت تبعيات أخرى:
pip install -r requirements.txt
FGVC: يرجى تنزيل مجموعات البيانات التالية VPT.
VTAB-1K: نظرًا لأن معالجة بعض مجموعات البيانات في معيار VTAB الأصلي أمر صعب ، نوصي بمجموعات بيانات VTAB-1K المستخرجة التي شاركتها SSF للراحة. (لاحظ أن الترخيص في مؤشر VTAB).
يجب أن تبدو بنية الملف مثل:
data
├── fgvc
│ ├── cub
│ ├── nabirds
│ └── ...
└── vtab-1k
├── caltech101
├── cifar
└── ...mkdir checkpoints
cd checkpoints
# Supervisedly pre-trained ViT-B/16
wget https://console.cloud.google.com/storage/browser/_details/vit_models/imagenet21k/ViT-B_16.npz
# MAE pre-trained ViT-B/16
wget https://dl.fbaipublicfiles.com/mae/pretrain/mae_pretrain_vit_base.pth
# MoCo V3 pre-trained ViT-B/16
wget https://dl.fbaipublicfiles.com/moco-v3/vit-b-300ep/linear-vit-b-300ep.pth.tar
# Supervisedly pre-trained Swin-Transformer
wget https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_base_patch4_window7_224_22k.pth
# Supervisedly pre-trained ConvNeXt
wget https://dl.fbaipublicfiles.com/convnext/convnext_base_22k_224.pthلقد قدمنا البرامج النصية التدريبية لتكييف VIT الخاضعة للإشراف على FGVC و VTAB-1K مع SNELL-32 ، على سبيل المثال:
# Fine-tuning supervised pre-trained ViT-B/16 with SNELL-32 for CUB dataset of FGVC
bash scripts/fgvc/snell32/vit_cub_snell.sh
# Fine-tuning supervised pre-trained ViT-B/16 with SNELL-32 for CIFAR dataset of VTAB-1k
bash scripts/vtab/snell32/vit_cifar_snell.shبالنسبة للنماذج الأخرى ، نقدم البرامج النصية لضبطها على FGVC على سبيل المثال:
python train.py --data-path=./data/fgvc/ ${DATASET} --init_thres= ${init_thres}
--data-set= ${DATASET} --model_name=vit_base_patch16_224_in21k_snell --resume=checkpoints/mae_pretrain_vit_base.pth
--output_dir= ${save_dir}
--batch-size= ${batch_size} --lr=0.001 --epochs=100 --weight-decay= ${WEIGHT_DECAY} --mixup=0 --cutmix=0
--smoothing=0 --launcher= " none " --seed=0 --val_interval=10 --opt=adamw --low_rank_dim=32
--exp_name= " ViT_MAE_ ${DATASET} " --seed=0
--test --block=BlockSNELLParallel --tuning_model=snell --freeze_stagepython train.py --data-path=./data/fgvc/ ${DATASET} --init_thres= ${init_thres}
--data-set= ${DATASET} --model_name=vit_base_patch16_224_in21k_snell --resume=checkpoints/linear-vit-b-300ep.pth.tar
--output_dir= ${save_dir}
--batch-size= ${batch_size} --lr=0.001 --epochs=100 --weight-decay= ${WEIGHT_DECAY} --mixup=0 --cutmix=0
--smoothing=0 --launcher= " none " --seed=0 --val_interval=10 --opt=adamw --low_rank_dim=32
--exp_name= " ViT_MoCo_ ${DATASET} " --seed=0
--test --block=BlockSNELLParallel --tuning_model=snell --freeze_stagepython train.py --data-path=./data/fgvc/ ${DATASET} --init_thres= ${init_thres}
--data-set= ${DATASET} --model_name=swin_base_patch4_window7_224_in22k --resume=./checkpoints/swin_base_patch4_window7_224_22k.pth
--output_dir= ${save_dir}
--batch-size= ${batch_size} --lr=0.001 --epochs=100 --weight-decay= ${WEIGHT_DECAY} --mixup=0 --cutmix=0
--smoothing=0 --launcher= " none " --seed=0 --val_interval=10 --opt=adamw --low_rank_dim=32
--exp_name= " Swin_ ${DATASET} " --seed=0
--test --block=BlockSNELLParallel --tuning_model=snell --freeze_stagepython train.py --data-path=./data/fgvc/ ${DATASET} --init_thres= ${init_thres}
--data-set= ${DATASET} --model_name=convnext_base_in22k --resume=./checkpoints/convnext_base_22k_224.pth
--output_dir= ${save_dir}
--batch-size= ${batch_size} --lr=0.001 --epochs=100 --weight-decay= ${WEIGHT_DECAY} --mixup=0 --cutmix=0
--smoothing=0 --launcher= " none " --seed=0 --val_interval=10 --opt=adamw --low_rank_dim=32
--exp_name= " ConvNeXt_ ${DATASET} " --seed=0
--test --block=BlockSNELLParallel --tuning_model=snell --freeze_stageيتم تعديل الكود الخاص بنا من VPT و SSF و SPT. نشكر المؤلفين على رمزهم المفتوح.