统一视觉参数高效迁移学习基准
🔥 新闻与更新
-
✅ [2024/07/25] 视觉PEFT基准开始发布数据集、代码等。
-
✅ [2024/06/20] 视觉PEFT基准主页创建。
-
✅ [2024/06/01] 视觉PEFT基准仓库创建。
📚 目录
⭐ 简介
参数高效迁移学习(PETL)方法在将预训练模型适应到各种下游任务时表现出promising的效果,同时只需训练少量参数。在计算机视觉(CV)领域,已经提出了许多PETL算法,但直接使用或比较它们仍然不便。为解决这一挑战,我们通过从图像识别、视频动作识别和密集预测任务中选择30个多样化、具有挑战性和综合性的数据集构建了一个统一的视觉PETL基准(V-PETL Bench)。在这些数据集上,我们系统地评估了25种主流PETL算法,并开源了一个模块化和可扩展的代码库,用于对这些算法进行公平评估。
⚙️ 入门指南
👉 数据准备
1. 图像分类数据集
-
细粒度视觉分类任务(FGVC)
FGVC包含5个细粒度视觉分类数据集。可以按照官方链接下载这些数据集。如果没有公开的验证集,我们会对训练数据进行分割。分割后的数据集可以在这里找到:下载链接。
-
视觉任务适应基准(VTAB)
VTAB包含19个多样化的视觉分类数据集。我们已经处理了所有数据集,可以在这里下载:下载链接。具体的处理程序和技巧,请参见VTAB_SETUP。
2. 视频动作识别数据集
-
Kinetics-400
-
通过将视频的短边调整为320像素来预处理数据集。你可以参考MMAction2 数据基准。
-
为数据加载器生成所需的注释("<video_id> <video_class>"格式的注释)。注释通常包括
train.csv
、val.csv
和test.csv
。*.csv
文件的格式如下:video_1.mp4 label_1 video_2.mp4 label_2 video_3.mp4 label_3 ... video_N.mp4 label_N
-
Something-Something V2 (SSv2)
-
从下载链接下载数据集。
-
通过将视频扩展名从
webm
更改为.mp4
,并保持原始高度为240像素来预处理数据集。你可以参考MMAction2 数据基准。 -
为数据加载器生成所需的注释("<video_id> <video_class>"格式的注释)。注释通常包括
train.csv
、val.csv
和test.csv
。*.csv
文件的格式如下:video_1.mp4 label_1 video_2.mp4 label_2 video_3.mp4 label_3 ... video_N.mp4 label_N
-
3. 密集预测数据集
-
MS-COCO
MS-COCO可从此下载链接获取。
-
ADE20K
-
PASCAL VOC
Pascal VOC 2012可从下载链接下载。 此外,大多数针对Pascal VOC数据集的最新工作通常会利用额外的增强数据,可以在下载链接找到。
👉 预训练模型准备
- 下载并将ViT-B/16预训练模型放置在
/path/to/pretrained_models
中。
mkdir pretrained_models
wget https://storage.googleapis.com/vit_models/imagenet21k/ViT-B_16.npz
- 或者你可以下载Swin-B预训练模型。注意,你还需要将下载的Swin-B检查点从
swin_base_patch4_window7_224_22k.pth
重命名为Swin-B_16.pth
。
mkdir pretrained_models
wget https://github.com/SwinTransformer/storage/releases/download/v1.0.0/swin_base_patch4_window7_224_22k.pth
mv swin_base_patch4_window7_224_22k.pth Swin_B_16.pth
- 另一种方法是从下面的链接下载预训练模型,并将其放在
/path/to/pretrained_models
中。
预训练骨干网络 | 预训练目标 | 预训练数据集 | 检查点 |
---|---|---|---|
ViT-B/16 | 有监督 | ImageNet-21K | 下载链接 |
ViT-L/16 | 有监督 | ImageNet-21K | 下载链接 |
ViT-H/16 | 有监督 | ImageNet-21K | 下载链接 |
Swin-B | 有监督 | ImageNet-22K | 下载链接 |
Swin-L | 有监督 | ImageNet-22K | 下载链接 |
ViT-B (VideoMAE) | 自监督 | Kinetics-400 | 下载链接 |
Video Swin-B | 有监督 | Kinetics-400 | 下载链接 |
💻 V-PETL Bench的结构(关键文件标有👉)
-
ImageClassification/configs
:处理实验的配置参数。-
👉
ImageClassification/config/vtab/cifar100.yaml
:实验的主要配置设置和每个数据集的说明。 -
.....
-
-
ImageClassification/dataloader
:加载和设置输入数据集。-
ImageClassification/dataloader/transforms
:图像变换。 -
ImageClassification/dataloader/loader
:为给定数据集构建数据加载器。
-
-
ImageClassification/models
:处理不同微调协议的骨干架构和头部。-
👉
ImageClassification/models/vision_transformer_adapter.py
:包含与vit_backbones
文件夹中相同的骨干网络的文件夹,专门用于Adapter。 -
👉
ImageClassification/models/vision_transformer_sct.py
:包含与vit_backbones
文件夹中相同的骨干网络的文件夹,专门用于SCT。 -
.....
-
-
👉
ImageClassification/train
:包含训练文件
文件夹的文件夹,-
👉
ImageClassification/train/train_model_adapter.py
:调用此文件以使用指定的传输类型训练和评估模型,专门用于Adapter。 -
👉
ImageClassification/train/train_model_sct.py
:调用此文件以使用指定的传输类型训练和评估模型,专门用于SCT。 -
.....
-
-
ImageClassification/scripts
:包含脚本文件
文件夹的文件夹,-
ImageClassification/scripts/run_vit_adapter.sh
:你可以一次性在所有数据集上运行Adapter方法。 -
ImageClassification/scripts/run_vit_sct.sh
:你可以一次性在所有数据集上运行SCT方法。 -
.....
-
-
ImageClassification/Visualize
:可视化工具。-
ImageClassification/Visualize/AttentionMap.py
:注意力图可视化。 -
ImageClassification/Visualize/TSNE.py
:T-SNE可视化。
-
-
ImageClassification/utils
:创建日志记录器、设置种子等。
❗️注意❗️:如果你想创建自己的PETL算法,请注意`ImageClassification/models`。
🐌 快速开始
这是如何在本地设置V-PETL Bench的示例。
要获取本地副本并运行,请按照以下简单步骤操作。
👉 安装V-PETL Bench
git clone https://github.com/synbol/Parameter-Efficient-Transfer-Learning-Benchmark.git
👉 环境设置
V-PETL Bench基于pytorch构建,使用torchvision、torchaudio和timm等。
- 要安装所需的包,你可以创建一个conda环境。
conda create --name v-petl-bench python=3.8
- 激活conda环境。
conda activate v-petl-bench
- 使用pip安装所需的包。
cd Parameter-Efficient-Transfer-Learning-Benchmark
pip install -r requirements.txt
👉 训练
- 你可以在一个数据集上测试PETL算法的性能。
python python train/train_model_sct.py --dataset cifar100 --task vtab --lr 0.012 --wd 0.6 --eval True --dpr 0.1 --tuning_mode $tuning_mode --model_type $model_type --model $model --model_checkpoint $model_checkpoint
- 或者你可以在所有数据集上测试PETL算法的性能
bash scripts/run_model_sct.sh
👉 评估
-
你可以评估你训练的模型的性能。
-
你也可以测试我们提供的预训练检查点。下载链接请参见"结果和检查点"。
🎯 结果和检查点
FGVC图像分类的基准结果
-
我们在五个数据集上评估了13种PETL算法,使用在ImageNet-21K上预训练的ViT-B/16模型。
-
要获取检查点,请在下载链接下载。 | 方法 | CUB-200-2011 | NABirds | 牛津花卉 | 斯坦福狗 | 斯坦福汽车 | 平均值 | 参数量 | PPT | |-----------------------|--------------|---------|----------------|---------------|---------------|------|---------------|-----| | 全量微调 | 87.3 | 82.7 | 98.8 | 89.4 | 84.5 | 88.54 | 85.8M | - | | 线性探测 | 85.3 | 75.9 | 97.9 | 86.2 | 51.3 | 79.32 | 0 M | 0.79| | 适配器 | 87.1 | 84.3 | 98.5 | 89.8 | 68.6 | 85.66 | 0.41M | 0.84| | AdaptFormer | 88.4 | 84.7 | 99.2 | 88.2 | 81.9 | 88.48 | 0.46M | 0.87| | 前缀微调 | 87.5 | 82.0 | 98.0 | 74.2 | 90.2 | 86.38 | 0.36M | 0.85| | U-Tuning | 89.2 | 85.4 | 99.2 | 84.1 | 92.1 | 90.00 | 0.36M | 0.89| | BitFit | 87.7 | 85.2 | 99.2 | 86.5 | 81.5 | 88.02 | 0.10M | 0.88| | VPT-浅层 | 86.7 | 78.8 | 98.4 | 90.7 | 68.7 | 84.66 | 0.25M | 0.84| | VPT-深层 | 88.5 | 84.2 | 99.0 | 90.2 | 83.6 | 89.10 | 0.85M | 0.86| | SSF | 89.5 | 85.7 | 99.6 | 89.6 | 89.2 | 90.72 | 0.39M | 0.89| | LoRA | 85.6 | 79.8 | 98.9 | 87.6 | 72.0 | 84.78 | 0.77M | 0.82| | GPS | 89.9 | 86.7 | 99.7 | 92.2 | 90.4 | 91.78 | 0.66M | 0.90| | HST | 89.2 | 85.8 | 99.6 | 89.5 | 88.2 | 90.46 | 0.78M | 0.88| | LAST | 88.5 | 84.4 | 99.7 | 86.0 | 88.9 | 89.50 | 0.66M | 0.87| | SNF | 90.2 | 87.4 | 99.7 | 89.5 | 86.9 | 90.74 | 0.25M | 0.90|
VTAB图像分类基准测试结果
- VTAB基准测试结果。我们在19个数据集上评估了18种PETL算法,使用在ImageNet-21K上预训练的ViT-B/16模型。
- 请在下载链接处下载检查点。
方法 | CIFAR-100 | Caltech101 | DTD | Flowers102 | Pets | SVHN | Sun397 | Patch Camelyon | EuroSAT | Resisc45 | Retinopathy | Clevr/count | Clevr/distance | DMLab | KITTI/distance | dSprites/loc | dSprites/ori | SmallNORB/azi | SmallNORB/ele | 平均 | 参数量 | PPT |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
全量微调 | 68.9 | 87.7 | 64.3 | 97.2 | 86.9 | 87.4 | 38.8 | 79.7 | 95.7 | 84.2 | 73.9 | 56.3 | 58.6 | 41.7 | 65.5 | 57.5 | 46.7 | 25.7 | 29.1 | 65.57 | 85.8M | - |
线性探测 | 63.4 | 85.0 | 63.2 | 97.0 | 86.3 | 36.6 | 51.0 | 78.5 | 87.5 | 68.6 | 74.0 | 34.3 | 30.6 | 33.2 | 55.4 | 12.5 | 20.0 | 9.6 | 19.2 | 52.94 | 0M | 0.53 |
适配器 | 69.2 | 90.1 | 68.0 | 98.8 | 89.9 | 82.8 | 54.3 | 84.0 | 94.9 | 81.9 | 75.5 | 80.9 | 65.3 | 48.6 | 78.3 | 74.8 | 48.5 | 29.9 | 41.6 | 71.44 | 0.16M | 0.71 |
VPT-浅层 | 77.7 | 86.9 | 62.6 | 97.5 | 87.3 | 74.5 | 51.2 | 78.2 | 92.0 | 75.6 | 72.9 | 50.5 | 58.6 | 40.5 | 67.1 | 68.7 | 36.1 | 20.2 | 34.1 | 64.85 | 0.08M | 0.65 |
VPT-深层 | 78.8 | 90.8 | 65.8 | 98.0 | 88.3 | 78.1 | 49.6 | 81.8 | 96.1 | 83.4 | 68.4 | 68.5 | 60.0 | 46.5 | 72.8 | 73.6 | 47.9 | 32.9 | 37.8 | 69.43 | 0.56M | 0.68 |
BitFit | 72.8 | 87.0 | 59.2 | 97.5 | 85.3 | 59.9 | 51.4 | 78.7 | 91.6 | 72.9 | 69.8 | 61.5 | 55.6 | 32.4 | 55.9 | 66.6 | 40.0 | 15.7 | 25.1 | 62.05 | 0.10M | 0.61 |
LoRA | 67.1 | 91.4 | 69.4 | 98.8 | 90.4 | 85.3 | 54.0 | 84.9 | 95.3 | 84.4 | 73.6 | 82.9 | 69.2 | 49.8 | 78.5 | 75.7 | 47.1 | 31.0 | 44.0 | 72.25 | 0.29M | 0.71 |
AdaptFormer | 70.8 | 91.2 | 70.5 | 99.1 | 90.9 | 86.6 | 54.8 | 83.0 | 95.8 | 84.4 | 76.3 | 81.9 | 64.3 | 49.3 | 80.3 | 76.3 | 45.7 | 31.7 | 41.1 | 72.32 | 0.16M | 0.72 |
SSF | 69.0 | 92.6 | 75.1 | 99.4 | 91.8 | 90.2 | 52.9 | 87.4 | 95.9 | 87.4 | 75.5 | 75.9 | 62.3 | 53.3 | 80.6 | 77.3 | 54.9 | 29.5 | 37.9 | 73.10 | 0.21M | 0.72 |
NOAH | 69.6 | 92.7 | 70.2 | 99.1 | 90.4 | 86.1 | 53.7 | 84.4 | 95.4 | 83.9 | 75.8 | 82.8 | 68.9 | 49.9 | 81.7 | 81.8 | 48.3 | 32.8 | 44.2 | 73.25 | 0.43M | 0.72 |
SCT | 75.3 | 91.6 | 72.2 | 99.2 | 91.1 | 91.2 | 55.0 | 85.0 | 96.1 | 86.3 | 76.2 | 81.5 | 65.1 | 51.7 | 80.2 | 75.4 | 46.2 | 33.2 | 45.7 | 73.59 | 0.11M | 0.73 |
FacT | 70.6 | 90.6 | 70.8 | 99.1 | 90.7 | 88.6 | 54.1 | 84.8 | 96.2 | 84.5 | 75.7 | 82.6 | 68.2 | 49.8 | 80.7 | 80.8 | 47.4 | 33.2 | 43.0 | 73.23 | 0.07M | 0.73 |
RepAdapter | 72.4 | 91.6 | 71.0 | 99.2 | 91.4 | 90.7 | 55.1 | 85.3 | 95.9 | 84.6 | 75.9 | 82.3 | 68.0 | 50.4 | 79.9 | 80.4 | 49.2 | 38.6 | 41.0 | 73.84 | 0.22M | 0.72 |
Hydra | 72.7 | 91.3 | 72.0 | 99.2 | 91.4 | 90.7 | 55.5 | 85.8 | 96.0 | 86.1 | 75.9 | 83.2 | 68.2 | 50.9 | 82.3 | 80.3 | 50.8 | 34.5 | 43.1 | 74.21 | 0.28M | 0.73 |
LST | 59.5 | 91.5 | 69.0 | 99.2 | 89.9 | 79.5 | 54.6 | 86.9 | 95.9 | 85.3 | 74.1 | 81.8 | 61.8 | 52.2 | 81.0 | 71.7 | 49.5 | 33.7 | 45.2 | 71.70 | 2.38M | 0.65 |
DTL | 69.6 | 94.8 | 71.3 | 99.3 | 91.3 | 83.3 | 56.2 | 87.1 | 96.2 | 86.1 | 75.0 | 82.8 | 64.2 | 48.8 | 81.9 | 93.9 | 53.9 | 34.2 | 47.1 | 74.58 | 0.04M | 0.75 |
HST | 76.7 | 94.1 | 74.8 | 99.6 | 91.1 | 91.2 | 52.3 | 87.1 | 96.3 | 88.6 | 76.5 | 85.4 | 63.7 | 52.9 | 81.7 | 87.2 | 56.8 | 35.8 | 52.1 | 75.99 | 0.78M | 0.74 |
GPS | 81.1 | 94.2 | 75.8 | 99.4 | 91.7 | 91.6 | 52.4 | 87.9 | 96.2 | 86.5 | 76.5 | 79.9 | 62.6 | 55.0 | 82.4 | 84.0 | 55.4 | 29.7 | 46.1 | 75.18 | 0.22M | 0.74 |
LAST | 66.7 | 93.4 | 76.1 | 99.6 | 89.8 | 86.1 | 54.3 | 86.2 | 96.3 | 86.8 | 75.4 | 81.9 | 65.9 | 49.4 | 82.6 | 87.9 | 46.7 | 32.3 | 51.5 | 74.15 | 0.66M | 0.72 |
SNF | 84.0 | 94.0 | 72.7 | 99.3 | 91.3 | 90.3 | 54.9 | 87.2 | 97.3 | 85.5 | 74.5 | 82.3 | 63.8 | 49.8 | 82.5 | 75.8 | 49.2 | 31.4 | 42.1 | 74.10 | 0.25M | 0.73 |
SSv2和HMDB51视频动作识别基准测试结果
-
在SSv2和HMDB51上的基准测试结果。我们使用来自VideoMAE和Video Swin Transformer的ViT-B评估了5种PETL算法。
-
要获取检查点,请在下载链接处下载。
方法 | 模型 | 预训练 | 参数量 | SSv2 (Top1) | SSv2 (PPT) | HMDB51 (Top1) | HMDB51 (PPT) |
---|---|---|---|---|---|---|---|
全量微调 | ViT-B | Kinetics 400 | 85.97 M | 53.97% | - | 46.41% | - |
冻结 | ViT-B | Kinetics 400 | 0 M | 29.23% | 0.29 | 49.84% | 0.50 |
AdaptFormer | ViT-B | Kinetics 400 | 1.19 M | 59.02% | 0.56 | 55.69% | 0.53 |
BAPAT | ViT-B | Kinetics 400 | 2.06 M | 57.78% | 0.53 | 57.18% | 0.53 |
全量微调 | Video Swin-B | Kinetics 400 | 87.64 M | 50.99% | - | 68.07% | - |
冻结 | Video Swin-B | Kinetics 400 | 0 M | 24.13% | 0.24 | 71.28% | 0.71 |
LoRA | Video Swin-B | Kinetics 400 | 0.75 M | 38.34% | 0.37 | 62.12% | 0.60 |
BitFit | Video Swin-B | Kinetics 400 | 1.09 M | 45.94% | 0.44 | 68.26% | 0.65 |
AdaptFormer | Video Swin-B | Kinetics 400 | 1.56 M | 40.80% | 0.38 | 68.66% | 0.64 |
Prefix-tuning | Video Swin-B | Kinetics 400 | 6.37 M | 39.46% | 0.32 | 56.13% | 0.45 |
BAPAT | Video Swin-B | Kinetics 400 | 6.18 M | 53.36% | 0.43 | 71.93% | 0.58 |
COCO数据集上的密集预测基准测试结果
-
COCO数据集上的基准测试结果。我们使用在ImageNet-22K上预训练的Swin-B模型评估了9种PETL算法。
-
要获取检查点,请在即将推出处下载。
Swin-B | 参数量 | 内存 | COCO ($\mathrm{AP_{Box}}$) | COCO (PPT) | COCO ($\mathrm{AP_{Mask}}$) | COCO (PPT) |
---|---|---|---|---|---|---|
全量微调 | 86.75 M | 17061 MB | 51.9% | - | 45.0% | - |
冻结 | 0.00 M | 7137 MB | 43.5% | 0.44 | 38.6% | 0.39 |
Bitfit | 0.20 M | 13657 MB | 47.9% | 0.47 | 41.9% | 0.42 |
LN TUNE | 0.06 M | 12831 MB | 48.0% | 0.48 | 41.4% | 0.41 |
Partial-1 | 12.60 M | 7301 MB | 49.2% | 0.35 | 42.8% | 0.30 |
Adapter | 3.11 M | 12557 MB | 50.9% | 0.45 | 43.8% | 0.39 |
LoRA | 3.03 M | 11975 MB | 51.2% | 0.46 | 44.3% | 0.40 |
AdaptFormer | 3.11 M | 13186 MB | 51.4% | 0.46 | 44.5% | 0.40 |
LoRand | 1.20 M | 13598 MB | 51.0% | 0.49 | 43.9% | 0.42 |
E$^3$VA | 1.20 M | 7639 MB | 50.5% | 0.48 | 43.8% | 0.42 |
Mona | 4.16 M | 13996 MB | 53.4% | 0.46 | 46.0% | 0.40 |
PASCAL VOC和ADE20K数据集上的密集预测基准测试结果
-
PASCAL VOC和ADE20K数据集上的基准测试结果。我们使用在ImageNet-22K上预训练的Swin-L模型评估了9种PETL算法。
-
要获取检查点,请在即将推出处下载。
Swin-L | 参数量 | 内存 (VOC) | Pascal VOC ($\mathrm{AP_{Box}}$) | Pascal VOC (PPT) | ADE20K ($\mathrm{mIoU}$) | ADE20K (PPT) |
---|---|---|---|---|---|---|
全量微调 | 198.58 M | 15679 MB | 83.5% | - | 52.10% | - |
冻结 | 0.00 M | 3967 MB | 83.6% | 0.84 | 46.84% | 0.47 |
Bitfit | 0.30 M | 10861 MB | 85.7% | 0.85 | 48.37% | 0.48 |
LN TUNE | 0.09 M | 10123 MB | 85.8% | 0.86 | 47.98% | 0.48 |
Partial-1 | 28.34 M | 3943 MB | 85.4% | 0.48 | 47.44% | 0.27 |
Adapter | 4.66 M | 10793 MB | 87.1% | 0.74 | 50.78% | 0.43 |
LoRA | 4.57 M | 10127 MB | 87.5% | 0.74 | 50.34% | 0.43 |
AdaptFormer | 4.66 M | 11036 MB | 87.3% | 0.74 | 50.83% | 0.43 |
LoRand | 1.31 M | 11572 MB | 86.8% | 0.82 | 50.76% | 0.48 |
E$^3$VA | 1.79 M | 4819 MB | 86.5% | 0.81 | 49.64% | 0.46 |
Mona | 5.08 M | 11958 MB | 87.3% | 0.73 | 51.36% | 0.43 |
💬 社区和联系方式
-
V-PETL Bench社区由以下人员维护:
-
辛毅 (xinyi@smail.nju.edu.cn),南京大学。
-
罗思琪 (siqiluo@smail.nju.edu.cn),上海交通大学。
-
📝 引用
- 如果您发现我们的调查和仓库对您的研究有用,请按以下方式引用:
@article{辛2024基准,
title={V-PETL基准:统一的视觉参数高效迁移学习基准},
author={辛毅, 罗思琪, 刘旭阳, 周浩迪, 程新宇, 李露露, 杜俊龙, 杜云涛, 王浩哲, 陈明才, 刘挺, 胡桂敏, 万中伟, 张荣超, 李傲雪, 易明阳, 刘晓红},
year={2024}
}