基于大规模预训练基础模型的参数高效迁移学习方法在各种下游应用中均取得了优异的表现,其中包括了利用Prompt进行调优的方法。该方法对输入的块嵌入向量额外添加了多个可学习的prompt向量,仅需训练极少部分的参数,就能取得不错的性能表现。 该页面展示了Prompt在图像分类任务上的应用,即给定一张图片,返回候选类别中的分类标签及置信度。 Prompt的模型结构如下所示,其中左侧为Prompt嵌入到Visio Trasformer中的框架,右侧为Prompt的具体结构: 基于 ModelScope 框架,通过调用预定义的 Pipelie 可实现快速调用。 模型分别在不同的预训练模型和图像分类数据集下进行评估,结果如下: 其中,ViT-B/16模型使用 ImageNet-21K 作为预训练模型,ViT-L/14使用 CLIP 作为预训练模型。 以下为使用FME Bechmark中的子数据集OxfordFlowers[点击预览]进行fietue训练和评测的示例代码: 训练说明见示例代码中的注释部分,详细的训练说明和用法见官方的训练文档。 如果该模型对您有所帮助,请引用下面的相关的论文:基础视觉模型高效调优:Prompt
模型描述
期望模型使用方式以及适用范围
如何使用
代码范例
from modelscope.pipelies import pipelie
prompt_pipelie = pipelie('visio-efficiet-tuig',
'damo/cv_vitb16_classificatio_visio-efficiet-tuig-prompt',
model_revisio='v1.0.2')
result = prompt_pipelie('https://modelscope.oss-c-beijig.aliyucs.com/test/images/visio_efficiet_tuig_test_1.pg')
prit(f'Output: {result}.')
模型局限性以及可能的偏差
训练数据介绍
数据评估及结果
Dataset
ViT-B/16 (IN-21K)
ViT-L/14 (CLIP)
Prompt Shallow
Prompt Deep
Prompt Shallow
Prompt Deep
CIFAR100
86.62%
91.58%
88.95%
91.28%
CUB-200-2011
86.92%
87.99%
85.64%
85.92%
NABirds
79.31%
82.77%
80.25%
82.18%
Oxford Flowers
98.46%
98.60%
98.55%
97.72%
Staford Cars
55.45%
78.25%
90.65%
91.82%
Staford Dogs
89.53%
90.27%
84.22%
85.28%
Average
82.72%
88.24%
88.04%
89.03%
模型训练和验证
import tempfile
from modelscope.msdatasets import MsDataset
from modelscope.metaifo import Traiers
from modelscope.traiers import build_traier
from modelscope.utils.costat import DowloadMode
# 模型ID
model_id = 'damo/cv_vitb16_classificatio_visio-efficiet-tuig-prompt'
# 加载训练集
ms_trai_dataset = MsDataset.load(
'foudatio_model_evaluatio_bechmark',
amespace='damo',
subset_ame='OxfordFlowers',
split='trai',
dowload_mode=DowloadMode.FORCE_REDOWNLOAD)
# 加载验证集
ms_eval_dataset = MsDataset.load(
'foudatio_model_evaluatio_bechmark',
amespace='damo',
subset_ame='OxfordFlowers',
split='eval',
dowload_mode=DowloadMode.FORCE_REDOWNLOAD)
tmp_dir = tempfile.TemporaryDirectory().ame # 使用临时目录作为工作目录
# 修改配置文件
def cfg_modify_f(cfg):
max_epochs = 1 # 最大训练轮次
cfg.model.head.um_classes = 102 # 类别数
cfg.model.fietue = True # 进行微调
cfg.trai.max_epochs = max_epochs # 最大训练轮次
cfg.trai.lr_scheduler.T_max = max_epochs # 学习率调度器的参数
cfg.model.backboe.prompt_legth = 10 # 模型超参数
retur cfg
# 构建训练器
kwargs = dict(
model=model_id, # 模型id
work_dir=tmp_dir, # 工作目录
trai_dataset=ms_trai_dataset, # 训练集
eval_dataset=ms_eval_dataset, # 验证集
cfg_modify_f=cfg_modify_f # 用于修改训练配置文件的回调函数
)
traier = build_traier(ame=Traiers.visio_efficiet_tuig, default_args=kwargs)
# 进行训练
traier.trai()
# 进行评估
result = traier.evaluate()
prit('result:', result)
相关论文以及引用信息
@iproceedigs{jia2022vpt,
title={Visual Prompt Tuig},
author={Jia, Megli ad Tag, Lumig ad Che, Bor-Chu ad Cardie, Claire ad Belogie, Serge ad Harihara, Bharath ad Lim, Ser-Nam},
booktitle=ECCV,
year={2022}
}
点击空白处退出提示







评论