怎样用自己训练好的图像分类模型来推理?

我尝试用https://modelscope.cn/models/damo/cv_convnext-base_image-classification_garbage/summary里面的图像分类模型来FineTune训练自己的垃圾分类模型,但是里面trainer里面没有predict()函数,如何使用自定义训练好的模型对图像进行分类?

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()

展开
收起
游客5xgefbpkdqkgs 2023-12-12 11:00:00 142 分享 版权
2 条回答
写回答
取消 提交回答
  • 在使用ModelScope的图像分类模型进行FineTune训练后,你可以通过以下步骤使用自定义训练好的模型对图像进行分类:

    1. 保存训练后的模型:

      • 在你的代码中找到模型实例,并将其保存到文件。
      • 使用torch.save()函数将模型权重和结构保存到文件中。例如:
        torch.save(trainer.model.state_dict(), 'path_to_save/model.pth')
        
    2. 加载保存的模型:

      • 为了从保存的模型文件中加载模型,你需要创建一个新的模型实例并用已保存的权重初始化它。
      • 确保你已经导入了包含模型类的模块。例如:

        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()
        
    3. 准备输入数据:

      • 将待分类的图像转换为模型所需的格式。通常,这涉及到缩放、归一化以及将其转换为Tensor。
      • 如果你正在使用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") # 转换为模型所需的格式
        
    4. 进行推理:

      • 使用预处理后的输入数据调用模型的forward方法以获取预测结果。
      • 根据模型输出,选择最高的分类分数或类别ID作为最终分类结果。例如:
        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}")
        
    2023-12-12 14:39:45
    赞同 展开评论
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    使用自己训练好的图像分类模型进行推理,需要经历以下步骤:

    1. 首先,加载已经训练好的模型。这通常涉及到使用torch.load()函数。
    2. 然后,对单张图片或者整个文件夹中的图片进行预测。如果是对多张图片进行预测,你可能需要将它们整理到一个numpy数组中,因为模型可能不支持直接输入多个图片。
    3. 最后,模型会输出一个分类结果。这个结果会显示模型对输入图片的预测类别。
    2023-12-12 13:03:09
    赞同 展开评论

ModelScope旨在打造下一代开源的模型即服务共享平台,为泛AI开发者提供灵活、易用、低成本的一站式模型服务产品,让模型应用更简单!欢迎加入技术交流群:微信公众号:魔搭ModelScope社区,钉钉群号:44837352

热门讨论

热门文章

还有其他疑问?
咨询AI助理