from modelscope.msdatasets import MsDataset
from modelscope.metainfo import Trainers
from modelscope.trainers import build_trainer
import tempfile
model_id = 'damo/cv_convnext-base_image-classification_garbage'
# 加载数据
ms_train_dataset = MsDataset.load(
'<DataSet>', namespace='<NAMESPACE>',
subset_name='default', split='train').to_hf_dataset() # 加载训练集
ms_val_dataset = MsDataset.load(
'<DataSet>', namespace='<NAMESPACE>',
subset_name='default', split='validation').to_hf_dataset() # 加载验证集
tmp_dir = tempfile.TemporaryDirectory().name # 使用临时目录作为工作目录
# 修改配置文件
def cfg_modify_fn(cfg):
cfg.train.dataloader.batch_size_per_gpu = 64 # batch大小
cfg.train.dataloader.workers_per_gpu = 1 # 每个gpu的worker数目
cfg.train.max_epochs = 1 # 最大训练epoch数
cfg.model.mm_model.head.num_classes = 40 # 分类数
cfg.train.optimizer.lr = 5e-5 # 学习率
cfg.train.lr_config.warmup_iters = 10 # 预热次数
return cfg
# 构建训练器
kwargs = dict(
model=model_id, # 模型id
work_dir='/tmp', # 工作目录
train_dataset=ms_train_dataset, # 训练集
eval_dataset=ms_val_dataset, # 验证集
cfg_modify_fn=cfg_modify_fn # 用于修改训练配置文件的回调函数
)
trainer = build_trainer(name=Trainers.image_classification, default_args=kwargs)
# 进行训练
trainer.train()
在使用ModelScope的图像分类模型进行FineTune训练后,你可以通过以下步骤使用自定义训练好的模型对图像进行分类:
保存训练后的模型:
torch.save()
函数将模型权重和结构保存到文件中。例如:torch.save(trainer.model.state_dict(), 'path_to_save/model.pth')
加载保存的模型:
确保你已经导入了包含模型类的模块。例如:
from transformers import ConvNextForImageClassification
model = ConvNextForImageClassification.from_pretrained('damo/cv_convnext-base_image-classification_garbage', num_classes=40)
model.load_state_dict(torch.load('path_to_save/model.pth'))
model.eval()
准备输入数据:
如果你正在使用Hugging Face库,可以使用transformers
模块中的AutoFeatureExtractor
类来处理图像。例如:
from transformers import AutoFeatureExtractor
feature_extractor = AutoFeatureExtractor.from_pretrained('damo/cv_convnext-base_image-classification_garbage')
image = Image.open('path_to_image.jpg') # 加载图片
inputs = feature_extractor(image, return_tensors="pt") # 转换为模型所需的格式
进行推理:
forward
方法以获取预测结果。with torch.no_grad():
outputs = model(inputs)
scores = outputs.logits.softmax(dim=-1) # 分类得分
predicted_class_id = scores.argmax(dim=-1).item() # 预测类别ID
print(f"Predicted class: {predicted_class_id}")
使用自己训练好的图像分类模型进行推理,需要经历以下步骤:
ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎加入技术交流群:微信公众号:魔搭ModelScope社区,钉钉群号:44837352