零基础手把手训练实践-图像分类模型-基于达摩院modelscope

这篇具有很好参考价值的文章主要介绍了零基础手把手训练实践-图像分类模型-基于达摩院modelscope。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

零基础手把手训练实践:图像分类模型

-基于达摩院modelscope

导读:图像分类模型是最简单的,也是最基础的计算机视觉任务,应用非常广泛。本文将手把手介绍零基础训练图像分类模型的实践过程。文章主要介绍如何在标注好的数据集基础上,进行微调,使模型能够在新的数据上重新适配一个新的分类任务。

阅读完本文,你将了解如何使用ViT模型在14种花卉数据集上进行分类的微调训练,进而了解大部分分类任务的微调过程。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

首先,打开ModelScope的官网(https://www.modelscope.cn/home),进入模型库。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

模型库页面可以看到有很多不同的模型,我们选择:计算机视觉 - 视觉分类 – 通用分类。模型库中有很多通用模型,这些模型都比较经典,有些是目前比较火的一些开源模型,大家都可以在上面进行尝试。本文主要以ViT图像分类-中文-日常物品这个模型为实例,演示如何进行分类任务的微调。​​​​​​​

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

首先打开这个任务。因为之后要用notebook进行训练,所以需要登录一下。新用户注册会送100个小时的GPU算力。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

任务中首先介绍了整个模型的基本情况:有关于日常物体分类模型的概要介绍,模型的简单描述,以及推理的示例代码。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

示例代码的使用十分简单,除了引用依赖包之外,只需两行代码就可以调用模型进行分类任务的测试。页面右上方也有在线模型的体验,可视化了推理的过程。可以选择自己上传图片或者用示例图片进行测试,点击执行测试就可以看到结果。刚开始执行的时候会稍微有些慢,因为要下载模型,之后就会快一些。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

其次还有一些模型数据的简介、模型训练流程、数据评估及结果。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

接下来是模型训练的示例代码,也是本文的重点。示例代码中用的是一个稍小的数据集mini_imagenet100,100个分类进行fine-tune训练的示例,对演示来说还是比较大的。所以我们会在这个代码的基础上进行修改,来适配更小的数据集,稍后会对模型中的参数进行更为详细的讲解。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

这里是模型评估的示例代码,展示模型如何对数据集中的校验集进行评估,稍后也会进行详细的讲解。这就是整个任务页面的大致内容。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

上面的在线体验已经得到了一个测试结果,这里显示了top5的结果,排名第一的是柴犬,所以这张图片的分类结果就是柴犬。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

为了方便实验,我们首先把notebook打开。Notebook有两种选择,一种是PAI-DSW,一种是阿里云弹性计算。我们选择第二种,用免费的GPU资源进行计算。选择后点击快速启动。这个启动会稍微久一些,可以让它在后台启动。

接下来我们来讲解模型的一些基本情况。模型是transformer模型在视觉中的一个应用,我们简称为ViT。ViT模型,是自然语言领域中的transformer模型在计算机视觉上的一个开山之作。ModelScope上的模型采用的是基于transformer的ViT-Base结构,并在此基础上加入了蒸馏token进行知识蒸馏,也就是采用了DeiT的知识蒸馏的训练方式。

我们的训练数据是从海量的开源数据中进行搜索和整理的,保留了出现频率较高的一些常见的物体,大概包含1300多种日常物品,比如有一些常见的动物、植物、家具和食品等。目前模型可以识别1300多种日常物品,大家可以通过模型链接查看开源代码,还可以通过论文的链接去详细查看论文。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

大家还可以在我们官网的文档中心 – 模型详解– 计算机视觉模型中找到我们配置的模型,这里有非常详细的介绍,包括论文的详解等。这是我们今天要用来做实验的ViT模型的简介,在此不做详细介绍。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

​​另外关于我们要用的数据集,可以通过点击上方菜单栏中的数据集-图像-图像分类,就会看到很多可以用来做实验的数据集。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 这里我们用的数据集是花朵分类数据集。这个数据集包含了14种类型的花朵图像,如风吟草、蒲公英、菊花等常见的花朵类型。整个数据只有200MB,比较小,适合我们线上训练微调过程的演示。用14种花朵的小数据集去重新fine-tune刚才介绍的ViT模型,使模型能够识别这14种花朵。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

数据集的格式主要分为训练集和验证集,这里有描述的相关格式:是按照train和valid文件夹进行分类,共有2个文件夹,同类别标签的图片在同一个文件夹下,图片格式都为JPG格式,还有一个标签文件是classname.txt。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

在数据预览里面可以看到数据的标注情况。比如在校验集中,左边是数据图片,右边是对应的标签。训练集也是一样的。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 数据集文件是整个数据集的文件,其中包含了csv格式的校验集标签文件、训练集的标签文件、还有包含了flowers14.json。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 Flowers14.json文件里面描述了整个数据之间的关系,比如在训练集中,meta就是标签文件,file就是用来训练的图片的压缩文件,校验集同理。classname.txt文件中将标签对应的类别名称按顺序列了出来。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 在数据文件里面是数据的压缩文件。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 数据集的加载也非常简单,一行代码即可。我们引入依赖包之后,load数据集。加载数据集需要填入训练集名称和命名空间,就是对应数据名称下面的小字部分 。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 flowers14对应数据集名称,tany0699对应命名空间。加载训练集时split选择train,加载校验集时split选择validation。这就是数据集的一些基本情况。

回到模型训练页面,打开之前启动的notebook。​​​​​​​

 跳转后需要登录ModelScope和阿里云绑定的账号。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 打开一个Python3的文件,可以选择对文件进行重命名,我们主要是为了对新的数据集重新进行训练。回到刚才的模型界面,把fine-tune的示例代码拷贝过来。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 代码拷贝过来之后,我们对这些参数进行修改。首先引入ModelScope内部的依赖包,如果大家本地有GPU的话,也可以在本地做训练。在本地训练要预先安装好ModelScope的library,官方文档有介绍如何安装。

安装好之后,我们就可以通过线上免费的notebook来进行实验了。首先model_id对应的是模型在Model Hub上的地址,对于我们这个任务来说是没有变化的。之后是加载数据集,分别是加载训练集和校验集,数据加载方式之前已经介绍过了。将我们新的数据集的数据加载方式的示例代码拷贝过来替换掉就可以。

接下来是修改模型的配置文件。配置文件中会包含多种配置内容,主要需要修改的只有几项。首先是batch-size的大小,主要根据训练数据的大小和GPU显存的大小来设置;第二行是加载数据集的worker数量;最大训练的epoch数,就是对整个数据集迭代的次数,这里设置为1,主要是因为时间关系,只训练一次迭代。下面三行是分类数目,要把它改为数据集对应的分类数目,所以这里都改为14。学习率这里,因为我们只迭代一次,为了更好更快的收敛,可以把它改的稍微大一点。大家可以根据自己实际的训练次数来修改这个超参。预训练次数也设置为1;评估指标,对于分类任务来说,我们现在用的是精度来评估,精度中有top1和top5,这两个指标都要重新进行评估。

接下来构建训练器。训练器是用build_trainer的接口;name是分类的类型,这里是image_classification,是图像分类的意思。我们需要改的主要是参数kwargs。参数主要有model_id,就是之前提到的模型地址;word_dir,工作目录,就是训练后产生的模型权重保存的目录。示例中用的是一个临时目录,这里可以改为真实目录,比如改为vit_base_flower;train_dataset设置的是加载后的训练集;eval_dataset设置的是加载后的验证集;cfg_modify_fn是配置文件的回调函数;model_revision模型的版本,可以对应到模型文件(master按钮)里面,可以随意选一个版本,比如1.0.2,这样模型的训练器就构建好了。

之后使用trainer.train()就可以进行训练。训练完成后即可使用trainer.evaluate()进行评估,评估后将结果打印出来。然后按下shift + enter键运行代码,让模型开始训练。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 刚开始会比较慢,因为需要先下载数据集和模型预训练的权重。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 再来看一下模型文件。模型文件也比较简单,主要有两部分,一部分是预训练的权重,名字是固定的(pytorch_model.pt);另一部分就是整个模型的配置文件(configuration.json),主要是定义整个模型如何配置,如何训练和如何评估的。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 配置文件中,因为是基于pytorch进行训练,所以架构保持不变。任务是图像分类,pipline的名称也保持不变,定义模型类型保持不变。mm_model是兼容mm classification的模型的配置文件,backbone定义的是VisionTransformer,结构是deit-base,输入图像大小是224,patch_size大小是16等等这些参数都保持不变。Head是VisionTransformerClsHead,num_classes类别数默认的是1296,是日常物品的分类数目,这里我们需要改为14,因为新的数据集分类是14种。Loss用的是LabelSmoothLoss。还有一些初始化的参数都可以进行修改。训练用的与增强方式使用了Mixup和CutMix,这些参数也可以进行设置。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

回到训练过程, epoch数,当前学习率,还有预计剩余时间,用的显存和loss的情况都可以打印出来。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 回到配置文件。

预处理器中的类型不变;训练过程,如加载图片,随机缩放和裁剪尺寸224,随机翻转和数据增强等都可以在文件中进行设置,最后是归一化;校验集同理,裁剪图片,resize到256,然后做一个crop到224,最后进行归一化。

训练过程中用到的batch_size的数目,worker的数目,最大迭代次数,以及评估的时候每间隔几次迭代就进行评估(这里是1次),使用accuracy进行评估,间隔1次迭代保存一次模型权重,最多保存权重数量20,优化器里的设置,包括优化类型,学习率等参数都可以在文件里进行修改。学习率的策略可以用CosineAnnealing,以及一些相关参数也可以进行定义。最后是评估的配置也可以进行设置,比如评估时batch_size的大小,worker数目,用的accuracy的方式进行评估,以及选择是top1还是top5的评估方式。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 训练已经完成,可以看到结果已经打印出来:top1的精度是87.75,top5的精度是98.97 。训练一次,大概需要3分钟左右。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 刚才训练的权重已经保存在了工作目录中。目录下有两个log文件,是训练过程的log,和刚才打印的结果完全一样。有一个模型的配置文件,和刚才讲过的配置文件是一模一样的。比如我们刚才改过的类别数,现在已经改为了14,因为刚才用的是回调函数,直接修改参数也被保存到了文件中。还有每个epoch保存的权重,现在只训练了一次,所以只有一个epoch_1。还有最后保存的权重的软连接,以及一个在训练过程中,校验集保存最好的模型权重。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

模型训练好之后,需要对它进行评估。可以评估训练好的模型在校验集上的性能。我们可以把模型评估的示例代码直接拷贝过来,同样的,数据集可以修改成刚才实验加载过的校验集,这是对新的校验集的评估。之前的model_id是Model Hub中的模型,现在改为训练保存的工作目录。但要注意,模型目录下的模型权重文件名称是固定的pytorch_model.pt,所以需要将权重文件重命名为pytorch_model.pt。工作目录可以用临时工作目录,校验集就是需要评估的数据集。训练器构建完成后,调用trainer.evaluate()进行评估,评估后将结果打印出来。按下shift + enter键运行代码,开始评估。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

评估过程比较快,从打印出来的结果可以看到top1的结果是87.75,top5是98.97,和训练结果完全相同。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

 模型训练好后,可以进行推理,推理代码可以直接从模型任务页面拷贝过来。

要用训练好的模型,首先要加载依赖包,然后用pipline构建推理的pipline。这里输入的任务类型保持不变,模型改为刚才训练好的模型路径:vit_base_flower。图片地址可以是一个可访问的url,也可以是一个本地的图片路径。现在可以随便下载一张图片,比如向日葵的图片,命名为test.webp。本地下载好之后,可以直接将图片拖进界面中进行上传,然后将图片名称拷贝过来。将图片地址改为本地路径./test.webp,就可以对这张图片进行分类测试了。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

推理结果中显示top5的结果,排第一的是向日葵,那么对这张图片分类预测的结果就是向日葵。但是对应的概率都很低,说明训练不是特别充分。因为只训练了一次迭代,所以还有很大的改进空间。大家可以去调整超参,尝试训练,比如最大epoch数可以调大一些,学习率可以调小一点,多训练一些可能会有更好的效果。

图像分类最新模型,人工智能,机器视觉,机器学习,分类,计算机视觉,人工智能

整个分类模型的预训练过程就到此结束了。

ModelScope中还有很多其他的分类模型,其他模型的训练流程和今天训练的任务流程是差不多的。比如ViT图像分类-通用模型和刚才训练的模型是完全一样的,但预训练的数据集是不一样的。日常物品模型用的是我们自建的数据集,通用模型是用的公开的ImageNet 1k的数据集。除此以外,还有比较实用的实时分类NextViT模型,比较适用于工业,因为速度快,分类效果也不错。其他模型,比如垃圾分类,大家也可以看一下。还有最近比较火的BEiT,是v2版本,大家也可以fine-tune一下。每个任务都会有模型简介、模型描述、以及一些链接,还有推理代码、微调训练代码以及评估代码,可以直接复制直接运行。

图像分类的微调训练教程就到此为止,大家如果感兴趣,可以到ModelScope官网(https://www.modelscope.cn/home​​​​​​​)去进一步了解和尝试。

注意:如果是公开的模型/公开的创空间应用,则代码中不需要以下授权代码:文章来源地址https://www.toymoban.com/news/detail-544181.html

from modelscope.hub.api import HubApi

YOUR_ACCESS_TOKEN = '请从ModelScope个人中心->访问令牌获取'
api = HubApi()
api.login(YOUR_ACCESS_TOKEN)

到了这里,关于零基础手把手训练实践-图像分类模型-基于达摩院modelscope的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 手把手调参 YOLOv8 模型之 训练|验证|推理配置-详解

    YOLO系列模型在目标检测领域有着十分重要的地位,随着版本不停的迭代,模型的性能在不断地提升,源码提供的功能也越来越多,那么如何使用源码就显得十分的重要,接下来通过文章带大家手把手去了解Yolov8(最新版本)的每一个参数的含义,并且通过具体的图片例子让大

    2024年02月05日
    浏览(44)
  • 手把手教你训练一个VAE生成模型一生成手写数字

    VAE(Variational Autoencoder)变分自编码器是一种使用变分推理的自编码器,其主要用于生成模型。 VAE 的编码器是模型的一部分,用于将输入数据压缩成潜在表示,即编码。 VAE 编码器包括两个子网络:一个是推断网络,另一个是生成网络。推断网络输入原始输入数据,并输出两

    2024年02月06日
    浏览(54)
  • 【AIGC】手把手使用扩散模型从文本生成图像

    在这篇文章中,我们将手把手展示如何使用Hugging Face的diffusers包通过文本生成图像。 DALLE2是收费的,用户只有一些免费的额度,如果免费额度使用完毕就需要付费了,所以必须寻找替代方案,并发现了Hugging Face,他们发布了一个扩散模型的包diffusers ,可以让我们直接使用。

    2024年02月09日
    浏览(56)
  • 【随手记录】Llama Tutorial 大语言模型实践 手把手系列带实践源码

    这个tutorial的契机是yy突然看到了一个workshop 所以类似于一周大作业的形式,输入command输出使用了自动驾驶哪些模块,代码在这里 所以就干一干,顺便写一个tutorial给大家参考和教程 引申更多的应用 参考资料: https://github.com/facebookresearch/codellama, https://github.com/facebookresear

    2024年02月03日
    浏览(53)
  • AIGC|手把手教你进行ChatGLM模型部署实践

    模型部署基本步骤分为模型选择、模型部署、运行,如果需要在特定的场景下定制化模型,则还需要进行数据集的选择、数据集格式转换、微调。 根据上述的步骤本教程选取如下的开源模型、数据集,来对医疗场景下进行定制化模型部署。当然模型部署对GPU要求非常高,所以

    2024年02月03日
    浏览(46)
  • 手把手教你租用服务器以及使用Pycharm远程连接服务器训练模型

    由于模型优化过后训练时间太长,所以想使用显卡或者租服务器进行训练,but显卡太贵(只有A卡),那就租服务器好了,开始了解怎么租,去哪租一系列问题,果然只要开始思考,就是一个接一个的困难,直接被击碎。终于找到了AutoDL,美美的开始租服务器,结果又绊在了选

    2024年02月10日
    浏览(58)
  • “StackLLaMA”: 用 RLHF 训练 LLaMA 的手把手教程

    如 ChatGPT,GPT-4,Claude语言模型 之强大,因为它们采用了 基于人类反馈的强化学习 (Reinforcement Learning from Human Feedback, RLHF) 来使之更符合我们的使用场景。 本博客旨在展示用 RLHF 训练一个 LLaMA 模型,以回答 Stack Exchange 上的问题。具体而言,包含以下几个方面: 有监督的微调

    2024年02月02日
    浏览(36)
  • 手把手教你使用Segformer训练自己的数据

    使用Transformer进行语义分割的简单高效设计。 将 Transformer 与轻量级多层感知 (MLP) 解码器相结合,表现SOTA!性能优于SETR、Auto-Deeplab和OCRNet等网络 相比于ViT,Swin Transfomer计算复杂度大幅度降低,具有输入图像大小线性计算复杂度。Swin Transformer随着深度加深,逐渐合并图像块来

    2024年01月20日
    浏览(69)
  • YOLOV7训练自己的数据集以及训练结果分析(手把手教你)

    YOLOV7训练自己的数据集整个过程主要包括:环境安装----制作数据集----参数修改----模型测试----模型推理 labelme标注的数据格式是VOC,而YOLOv7能够直接使用的是YOLO格式的数据,因此下面将介绍如何将自己的数据集转换成可以直接让YOLOv7进行使用。 1. 创建数据集 在data目录下新建

    2023年04月20日
    浏览(48)
  • 【实践篇】手把手教你落地DDD

    常见的DDD实现架构有很多种,如经典四层架构、六边形(适配器端口)架构、整洁架构(Clean Architecture)、CQRS架构等。架构无优劣高下之分,只要熟练掌握就都是合适的架构。本文不会逐个去讲解这些架构,感兴趣的读者可以自行去了解。 本文将带领大家从日常的三层架构

    2024年02月06日
    浏览(74)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包