如何加速AI模型迭代:Modelarts的难例筛选功能

举报
ModelArts-论坛答疑X 发表于 2020/08/07 16:55:05 2020/08/07
【摘要】 由于目前的人工智能应用大多数基于概率统计,部署后随着推理数据特征分布的变化,人工智能应用推理的精度就会发生变化。在机器学习中,这种现象也称为“概念漂移”。因此,人工智能应用的维护非常重要,它可以根据数据的变化不断更迭模型和应用,以保证应用推理效果。

1、背景


    模型迭代优化主要包含以下几个方面:

    1)从数据上提升模型效果

        根据模型部署后的实际预测结果进行正向数据推荐、数据增强、去除,搜索扩充,最终对原始训练数据集进行补充,从而形成一个新的数据集。

    2)从算法、模型调优、模型融合上提升模型综合能力

        用户获取数据集后,可以根据实际场景综合从算法替换、算法参数调优、神经网络结构优化等多个角度提升模型 性能。例如用户可以对难例数据进行特殊深度处理,比如说损失函数的设计,增加难例的权重系数,并对模型超参、神经网络结构进行调优。可以根据实际场景从修正模型、扩展模型、重新开发模型这几个角度优化算法模型。也可以根据模型效果,选择多个模型进行融合。

    本文着重分享一下基于数据的应用迭代方式

2、基于数据的AI应用迭代方式


        最简单的模型维护方式是添加新数据,或者在添加的基础上做进一步数据增强,以进一步提升模型迭代的精度。基于数据的模型迭代方式如图1所示。为了避免模型在新数据上发生拟合,通常都需要将新、老数据合并一起做增量训练。


图1 基于数据的模型迭代方式流程图

    1)简单重训练

       在实际业务场景中,模型维护是一个长期的过程,根据以上的模型维护方式和业务数据量不断进行重训练。比如说按照每周、每个月进行重训练,或者累计数据至一定量时等进行定期的重训练。直接根据采集到的数据进行重训练。

       在重训练过程中,可以基于新的数据对模型训练参数进行新一轮调优,同时,针对一些对时间比较敏感的场景,可以对数据做一些加权。例如时序预测场景,近期的数据对模型影响比较大,在训练时可以加大这些数据所占的权重,这样对模型迭代更有益。 

    2)基于难例的重训练

       为了提升模型维护效率,可以采用基于难例数据的重训练。

       难例挖掘算法跟模型的任务强相关。这里重点围绕计算视觉中的基础任务(如图像分类、目标检测等)展开难例算法的介绍。难例挖掘已经不是一个新鲜名词了。目前在线难例挖掘(Online Hard Example Mining)以基于区域推荐的两阶段目标检测为代表,其主要以Faster RCNN为基础。在线难例挖掘的研究思路主要基于bootstrapping算法。bootstrapping算法的思想是利用有限的样本经由多次重复抽样,重新建立起足以代表母体样本分布的新样本。在线难例挖掘将bootstrapping的思路移植到深度学习的模型训练过程中。采用这种思路的原因在于被检测的数据集中总是包含大量简单的样本和少量困难样本,自动选择这些困难样本进行训练可以加快收敛,提升模型精度。在目标检测的卷积神经网络训练过程中,一般采用损失值很大的样本或者感兴趣的目标区域(Regions of Interest, ROI)作为难例,然后进行迭代训练。

       在线难例挖掘有两个缺点:1)仅能在模型训练过程中生成难例,无法实现离线的难例挖掘。由于该算法一般集成在目标检测Faster RCNN算法中,若用户是自定义代码,则用户必须自适应修改代码,才能使用在线难例挖掘。这种算法思想不够成熟,无法形成一个系统性的方案。2)该方案的核心思想是通过自举(bootstrapping)的方式生成难例集,且生成方式仅是通过训练样本在训练时的损失值来判断的,评判维度单一,无法保证模型精度的提升效果。

       与在线难例挖掘相比,离线难例挖掘方法多变。常用方法有:基于时序一致性的难例挖掘算法,基于置信度的难例挖掘算法,基于数据分布的难例挖掘算法,基于异常检测的难例挖掘算法,基于图像相似度的难例挖掘算法,基于可解释性的难例挖掘算法等等。

       上述两种基于数据的模型迭代优化方案的区别的在于重训练数据的选择,前者采用全量数据与原始数据集融合进行二次训练,后者会筛选出核心集合与原始数据集融合进行二次训练。后者的优势很明显,可以显著减少标注人力和二次训练成本,因为如果保证筛选后的核心集相对于全量数据的精度影响不大,后者的方案对于模型迭代优化的速度提升是相当明显的。

3、Modelarts的难例筛选功能


其实,在Modelarts平台的智能标注,在线推理和批量推理中,都已经集成了难例筛选的功能。例如,这篇博客介绍的难例筛选使用:https://bbs.huaweicloud.com/blogs/175378

这次主要介绍的是数据处理模块中的难例筛选功能,相对于其它已经集成了难例的模块中,数据处理模块的难例功能提供了自行调节参数的功能。为了使得筛选出来的核心集效果最佳,针对不同的数据可以自行调整不同算法的权重以及其他功能参数。


4、使用案例


       这里,通过一个常见的案例来了解一下数据处理中难例筛选算子的使用。在车辆自动驾驶业务场景中,对于车辆前进方向的目标检测是十分常用的技术。这里的案例使用的数据是华为云2019年无人车比赛的部分数据。这里展示的是一个模型迭代的完成流程,如第2节中图1所示。

       1)数据准备

        首先,我们将拍摄后含有停车位的图片上传至OBS,并导入Modelarts的新建数据集(命名为 autohem_demo)中, 将数据集中的停车位标注完成后,发布一个数据集版本。如下图:

    

2)模型部署

使用Modelarts的一键模型部署上线功能,该功能在数据集上使用预置算法 Faster_RCNN_ResNet_v1_50 训练数据得到一个可以识别停车位的模型,之后通过Modelarts的在线服务部署该模型,对外提供一个可预测的Rest API。如下图:

      3)数据采集

难例筛选算法需要分析的数据是模型部署后,不断使用模型进行预测的推理数据。Modelarts平台提供了全量数据采集的功能,可帮助保存模型部署后,通过调用预测API的数据和推理结果。这个功能需要手动开启,如下图:

开启采集功能后,对于每一次API的调用,相应的数据都会保存到对应的obs目录下,如下图:

        以上两个文件夹分别保存了采集到的图片和推理结果。

       在开启采集功能后,随机挑选了一些图片上传图片并预测,不难发现,对于和步骤1中数据类似的场景,模型的识别能力较强,但仍存在一些图片出现了误检。例如,模型错误地将边线预测为一个停车位,但这明显不符合预期。如下图:

在实际模型维护的过程中,扩充场景是必不可少的,如下图:

在这次预测中,模型没有检测到目标,但该图片中是存在一条斑马线的,我们可以考虑将这些数据加入到下一次的模型训练中,这样模型的能力就得到的扩充,可以识别到停车位和斑马线了。

4)使用数据处理中的难例筛选功能

在数据管理中创建一个难例筛选的数据选择作业,如下图:

看到算法要求,需要将输入数据以指定文件夹的格式组织,即选择的obs目录下要包含images和inference_results文件下。如下:

修改步骤3)数据采集目录下的文件夹名称,并将输入选择到collect目录,如下图:

下面需要进行运行参数的填写,一般情况下,只需要将这两个参数按要求填写即可:

train_data_path即为步骤1中发布数据集版本后的manifest文件,这个文件在Modelarts平台上可理解为一个固定的数据集,找到manifest文件之后,添加 'obs:/' 前缀并填入运行参数,如:obs://hjw/dataset/hem_demo/out-7-25/autohem_demo-CSVQRpklQktb8bUTJdg/annotation/V001/V001.manifest:

model_serving_url 即为步骤2中一键模型部署上线中的模型元数据存储路径,找到路径后,添加'obs:/'前缀并填入运行参数,如:obs://hjw/dataset/hem_demo/out-7-25/autohem_demo-CSVQRpklQktb8bUTJdg/annotation/auto-deploy/models/20200729135908320/

路径获取方式为:首先,打开一键模型部署上线的历史任务,如下图:

点击训练,如下图:

训练作业的输出位置即为模型元数据存储路径,如下图:

路径过长的情况下可能无法直接复制,需要点击右键-》检查进行复制。

接下来我们来自行调整其他参数。

      comprehensive_algo_config:难例算法使用配置调整,默认值为 clustering_mining:0.2020+aug_consistent_mining:0.4265+feature_distribution_mining:0.0451+sequential_mining:0.425+image_similarity_mining:0.0949+predict_score_mining:0.3900+anomaly_detection_mining:0.2020,这里面包含了各个筛选算法的权重值,比如这里使用的是一个视频抽帧的数据集,我就试试将sequential_mining的权重值提高。这个参数可选择部分和全部的筛选算法用于数据处理作业。因此,对于不同的数据集,可以先用一两个算法尝试几遍试一下筛选的效果是否满足需求,再综合考虑最终的算法权重。

5)增量重训练

        难例筛选的目的如前面所提到的,基于筛选后的数据进行重训练,可以有效减少标注人力和训练耗时。

待数据处理的难例筛选任务完成后,进入数据集版本管理,可以看到筛选结果已经发布到V002版本,点击切换至V002版本,即可查看筛选结果,如下:

        进入标注界面,将筛选结果的数据中标注信息矫正,并发布新的数据集版本V004。

进入一键模型上线历史页面,点击训练,在之前的训练作业基础上创建新版本的训练作业,如下:    在训练作业的运行参数中,增加checkpoint_url参数,参数值为步骤4中的model_serving_url 的值,即上一轮模型的元数据路径,如下图:    训练作业的输入数据选择刚发布的数据集版本V004,如下:
    6)模型二次部署
    待增量训练的完成后,点击训练作业详情中的创建模型,发布新版本的模型,如下图:    待模型发布完成后将其部署成在线服务,如下图:    进入新模型的在线服务,上传图片测试一下新模型,如下图:    可以看到,进行增量训练后,相较于之前老模型的误检预测,新模型已经可以准确检测到斑马线了。

ModelArts数据处理相关博客:
1. 数据处理简介:https://bbs.huaweicloud.com/blogs/193413
2. 数据增强:https://bbs.huaweicloud.com/blogs/189148使用数据增强,解决数据不足和数据集不均衡的情况
3. 数据生成域迁移:https://bbs.huaweicloud.com/blogs/193405数据风格变换:ModelArts的数据域迁移功能
4. 数据校验:https://bbs.huaweicloud.com/blogs/193412 数据校验--给你的数据做个体检吧
5. 数据去重:https://bbs.huaweicloud.com/blogs/193420数据去重---ModelArts在数据处理上的应用技巧-免费,欢迎大家体验
6. 数据清洗:https://bbs.huaweicloud.com/blogs/193421数据清洗---ModelArts在数据处理上的应用技巧-免费,欢迎大家体验
7. 难例筛选:https://bbs.huaweicloud.com/blogs/193422如何加速AI模型迭代:Modelarts的难例筛选功能


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。