自建1300类常见物体标签体系,覆盖常见的日用品,动物,植物,家具,设备,食物等物体,标签从海量中文互联网社区语料进行提取,保留了出现频率较高的常见物体名称。模型结构采用最新的ViT-Base结构。
创空间快速可视化展示: ViT图像分类-中文-日常物品
本系列还有如下模型,欢迎试用:
采用Transformer经典的ViT-Base结构, 并采用了DeiT的知识蒸馏方式进行训练。
本模型适用范围较广,覆盖大部分日常生活常见的物品类目,包括日用品,动物,植物,家具,设备,食物等。也可作为下游任务的预训练backbone。
在ModelScope框架上,提供输入图片,即可通过简单的Pipeline调用来使用。
from modelscope.pipelines import pipeline
from modelscope.utils.constant import Tasks
img_path = 'http://www.modelscope.cn/api/v1/models/Stefanieliang/cv_vit-base_image-classification_Dailylife-labels_flowers/repo?Revision=master\u0026FilePath=resources/test.jpg'
image_classification = pipeline(Tasks.image_classification,
model='Stefanieliang/cv_vit-base_image-classification_Dailylife-labels_flowers',
model_revision='v1.0.0')
result = image_classification(img_path)
print(result)
测试时主要的预处理如下:
模型在自建测试集进行测试,结果如下:
Model | top-1 acc | top-5 acc | #params | Remark |
---|---|---|---|---|
ViT-base | 74.3 | 95.3 | 86M | modelscope |
使用托管在modelscope DatasetHub上的小型数据集mini_imagenet100进行finetune训练的示例代码:
from modelscope.msdatasets import MsDataset
from modelscope.metainfo import Trainers
from modelscope.trainers import build_trainer
import tempfile
model_id = 'Stefanieliang/cv_vit-base_image-classification_Dailylife-labels_flowers'
# 加载数据
ms_train_dataset = MsDataset.load(
'flowers14', namespace='tany0699',
subset_name='default', split='train') # 加载训练集
print(next(iter(ms_train_dataset)))
ms_val_dataset = MsDataset.load(
'flowers14', namespace='tany0699',
subset_name='default', split='validation') # 加载验证集
print(next(iter(ms_val_dataset)))
tmp_dir = tempfile.TemporaryDirectory().name # 使用临时目录作为工作目录
# 修改配置文件
def cfg_modify_fn(cfg):
cfg.train.dataloader.batch_size_per_gpu = 32 # batch大小
cfg.train.dataloader.workers_per_gpu = 2 # 每个gpu的worker数目
cfg.train.max_epochs = 1 # 最大训练epoch数
cfg.model.mm_model.head.num_classes = 14 # 分类数
cfg.model.mm_model.train_cfg.augments[0].num_classes = 14 # 分类数
cfg.model.mm_model.train_cfg.augments[1].num_classes = 14 # 分类数
cfg.train.optimizer.lr = 1e-4 # 学习率
cfg.train.lr_config.warmup_iters = 1 # 预热次数
cfg.train.evaluation.metric_options = {'topk': (1, 5)} # 训练时的评估指标
cfg.evaluation.metric_options = {'topk': (1, 5)} # 评估时的评估指标
return cfg
# 构建训练器
kwargs = dict(
model=model_id, # 模型id
work_dir='./vit_base_flower', # 工作目录
train_dataset=ms_train_dataset, # 训练集
eval_dataset=ms_val_dataset, # 验证集
cfg_modify_fn=cfg_modify_fn, # 用于修改训练配置文件的回调函数
model_revision='v1.0.0'
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# 进行训练
trainer.train()
# 进行评估
result = trainer.evaluate()
print('result:', result)
训练说明见示例代码中的注释,更详细的训练说明和用法见官方的训练文档。训练过程产生的log和模型权重文件保存在work_dir工作目录中,并以前缀为’best_'的文件保存了在验证集上最优精度的权重。evaluate()默认使用精度最高的模型权重进行评估。
使用训练好的模型对需要评估的数据集进行精度评估示例代码如下:
from modelscope.msdatasets import MsDataset
from modelscope.metainfo import Trainers
from modelscope.trainers import build_trainer
import tempfile
model_id = 'Stefanieliang/cv_vit-base_image-classification_Dailylife-labels_flowers'
# 加载用于评估的数据集
ms_val_dataset = MsDataset.load(
'flowers14', namespace='tany0699',
subset_name='default', split='validation') # 加载验证集
tmp_dir = tempfile.TemporaryDirectory().name # 使用临时目录作为工作目录
# 构建训练器
kwargs = dict(
model=model_id, # 模型id
work_dir=tmp_dir, # 工作目录
train_dataset=None,
eval_dataset=ms_val_dataset, # 评估的数据集
model_revision='v1.0.0'
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# 开始评估
result = trainer.evaluate()
print('result:', result)
评估过程默认使用模型中自带的预训练权重进行评估。
git clone https://www.modelscope.cn/Stefanieliang/cv_vit-base_image-classification_Dailylife-labels_flowers.git