【云驻共创】云原生AI算法开发套件介绍

举报
陈沧夜 发表于 2022/10/30 16:53:45 2022/10/30
【摘要】 《华为云ModelArts关键AI能力宣讲会 NO.3》云原生AI算法开发套件介绍的直播,本以为是一场平平无奇的技术开发介绍,但是整体看下来,还是给我带来了很多的惊喜。尤其是华为云的jupyter版本中独一无二的交互式操作让人耳目一新。那么现在跟随文章,大家一起来看看吧! 1. 云原生AI算法开发套件简述在传统的 AI 开发过程中,我们发现,模型的训练、评估、测试、优化、转换、实现和部署有着...

《华为云ModelArts关键AI能力宣讲会 NO.3》云原生AI算法开发套件介绍的直播,本以为是一场平平无奇的技术开发介绍,但是整体看下来,还是给我带来了很多的惊喜。尤其是华为云的jupyter版本中独一无二的交互式操作让人耳目一新。

那么现在跟随文章,大家一起来看看吧!

1. 云原生AI算法开发套件简述

Screenshot - 2022-10-24 15.42.51.png

在传统的 AI 开发过程中,我们发现,模型的训练、评估、测试、优化、转换、实现和部署有着很大程度上的相似性,因此,是不是可以通过开发一个 AI 算法开发套件来进一步降低开发的成本,提高开发的效率,以实现降低门槛,提高开发效率的目的?

这就是 华为 AI 算法开发套件的开发初衷与由来。

那么 AI 算法开发套件主要包括哪些部分呢?有什么样的功能可以具体的完成 AI 的开发任务?

Screenshot - 2022-10-24 15.43.27.png

从上图可以看到,AI 算法开发套件主要体现在三个方面:

  1. 端到端的能力支持和 all in one 的能力使用,可以支持很多算法套件的使用。
  2. jupyterlab交互式 UI 集成 Python SDK、代码白盒化、数据的自动化
  3. IDE 云下开发、一键使用云上训练资源

Screenshot - 2022-10-24 16.35.36.png

AI 算法开发套件的上线适配主要分为了自研和社区两个部分。极大增加了算法的丰富度。两种方式相互促进,相互补充。自研套件主打业务开发的实用性与易用性,具备端到端的全流程开发支持;开源适配主打算法内容的丰富度与先进性,促进与开源社区的互动与联系。

Screenshot - 2022-10-24 16.36.24.png

从右图我们可以看到,AI 算法套件的亮点在于开发时的参数化调试,API开发方式和交互式三种各有特点的开发方式。能更加有效的对算法模型进行调试,减少将注意力放到文件路径的繁琐步骤。

2. 云原生AI算法开发样例

Screenshot - 2022-10-24 16.36.57.png

上图是 AI 开发套件的一个样例,通过样例我们可以直观看到 AI 开发套件在开发过程中体现的优势。

链接地址是:https://bbs.huaweicloud.cn/live/cloud_live/202209281900.html

2.1. 安装依赖环境

进入开发环境后我们先要准备一下基础的环境依赖

# 安装基础依赖环境
!pip install ipympl==0.9.1
!pip install Pillow==9.1.1
!pip install pandas==1.3.5

接下来是选择预训练模型

经典的目标检测方法主要包括单阶段(YOLO、RetinaNet等)和多阶段算法(Faster RCNN、Cascade RCNN等),本案例以fcos算法模型为例,fcos算法属于anchor free的一阶段目标检测算法,具有训练速度快、超参数少等特点。本小节以"mmdetection:fcos/fcos_r50_caffe_fpn_gn-head_1x_coco"模型为例,演示如何下载预训练模型。

FCOS: Fully Convolutional One-Stage Object Detection,是一种完全卷积的一级对象检测器 (FCOS)算法,该算法是一种基于 FCN 网络一种根据像素来进行目标检测,以每像素预测方式 (类似于语义分割) 解决对象检测问题,其主要的特点是,无锚点(anchor-free)、无提议(proposal free),并提出了中心度(Center—ness)的思想。几乎所有最先进的对象检测器,例如RetinaNet,SSD,YOLOv3和更快的r-cnn,都依赖于预定义的锚盒。相比之下,FCOS是无锚盒的,也是无提案的。通过消除预定义的锚框集,FCOS完全避免了与锚框相关的复杂计算,在召回率衡量算法模型的标准上表现优异。

本小节以 mmdetection:fcos/ 下的 fcos_r50_caffe_fpn_gn-head_1x_coco 模型为例,演示如何下载预训练模型。

2.2. 选择预训练模型

#@title Install pretrained model   
from modelarts.algo_kits import EnvManager
env = EnvManager()
env.init_env()          # initialize environment



algo_name = "mmdetection" #@param {type:"string", dropdown}
model_name = "mmdetection:fcos/fcos_r50_caffe_fpn_gn-head_1x_coco" #@param {type:"string", dropdown}
dataset_name = "coco2017_sample" #@param {type:"string"}
env.install(mode="algorithm", asset_name=algo_name, version="2.17.0")
# 安装样例数据集,数据集会下载到./{project_dir}/data/raw/
env.install(mode="dataset", asset_name=dataset_name)
# 安装预训练模型,模型会下载到./{project_dir}/model_zoo/
env.install(mode="model", asset_name=model_name)

在右侧的 UI 交互界面,也可以通过拖动,点击来完成参数的设置,极其方便!

不得不说这种的调试方式深得我心,可以通过简明的 UI 界面对其进行参数调试。真的可以提高生产力!

Screenshot - 2022-10-24 18.36.49.png

2.3. 构建数据集DataBlock对象

DataBlock支持自动统计数据集信息,比如目标、尺寸等信息,帮助用户更好的理解数据集,同时还可以动态查看每一个batch经过pipeline之后的输入图像,确保数据增强的正确性。

detblock.plot_dataset_stats() 可以绘制数据集的统计信息,图像的显示大小可以由figsize参数控制;
detblock.print_dataset_stats() 能够打印出具体的统计信息数值;
datablock.show_batch() 可以动态展示内存中的经过增强后的图片信息,可以通过rows(显示行数)和figsize(显示大小)来控制输出。

代码如下:

#@title Build DataBlock 
from modelarts.algo_kits import DetDataBlock

num_classes = 80 #@param {type:"integer"}
data_root = "./data/raw/coco2017_sample" #@param {type:"string"}
train_img_prefix = "val2017" #@param {type:"string"}
train_ann_file = "annotations/instances_val2017.json" #@param {type:"string"}
val_img_prefix = "val2017" #@param {type:"string"}
val_ann_file = "annotations/instances_val2017.json" #@param {type:"string"}
batch_size = 4 #@param {type:"slider", min:1, max:10, step:1}


db = DetDataBlock(env,
                  batch_size=batch_size,
                  data_root=data_root, 
                  num_classes=num_classes,
                  train_img_prefix=train_img_prefix, 
                  train_ann_file=train_ann_file,
                  val_img_prefix=val_img_prefix, 
                  val_ann_file=val_ann_file,
                  model_name=model_name
                 )

Screenshot - 2022-10-24 23.12.32.png

同样的,在右边可以通过拖动batch_size()的拖动条来自定义batch_size的大小。

2.3. 可视化数据集

plotter = db.show_batch(rows=2, figsize=(14, 8))
next(plotter)

得到如下显示,从下图可以看出数据集的可视化也是十分方便的。

Screenshot - 2022-10-24 23.16.39.png

2.4. 绘制数据集分布图

db.plot_dataset_stats(figsize=(14, 8))

Screenshot - 2022-10-24 23.17.23.png

3. 构建模型Model对象

Model主要接收如下入参:

env: EnvManager对象
model_name:模型名称
num_classes:类别数
checkpoint:预训练模型文件路径,默认为None(随机初始化网络权重)
load_default_backbone: 是否加载预训练backbone,默认为False。当指定checkpoint参数后,该参数可设置为False

import os
from ipyfilechooser import FileChooser
from ipywidgets import Layout

# such as "model_zoo/mmdetection/2.17.0/fcos/fcos_r50_caffe_fpn_gn-head_1x_coco-821213aa.pth"
fc = FileChooser(path=os.getcwd(), layout=Layout(width="1000px"))
display(fc)

Screenshot - 2022-10-24 23.20.41.png

在这里也体现了交互性,可以通过下方的选择框选择需要的模型。

# Build Model
from modelarts.algo_kits import Model

ckpt_path = os.path.join(fc.selected_path, fc.selected_filename)
fcos_model = Model(env, model_name=model_name, num_classes=num_classes, checkpoint=ckpt_path)

4. 构建学习器Learner对象

#@title Build Learner 
from modelarts.algo_kits import Learner

output_path = 'output'
log_interval = 21 #@param {type:"slider", min:1, max:100, step:10}
epoch_based_eval_interval = 1 #@param {type:"slider", min:1, max:10, step:1}
log_params = {
                'log_type': ['graph', 'table'], 
                'table_highlight_method':'best', 
                'log_interval':log_interval
             }
learner = Learner(fcos_model, db, output_path, log_params=log_params, epoch_based_eval_interval=epoch_based_eval_interval)

Screenshot - 2022-10-24 23.25.53.png

#@title Fit parameters

weight_decay = 0.0005 #@param {type:"number"}
max_epochs = 0 #@param {type:"slider", min:0, max:20, step:1}
lr = 0.001 #@param {type:"slider", min:0.001, max:0.1, step:0.001}

learner.fit(lr=lr, max_epochs=max_epochs, weight_decay=weight_decay, gpu_ids=[0])

Screenshot - 2022-10-24 23.26.17.png

5. 模型评估阶段

# 评估模型在验证集上的表现
learner.validate()

6. 图片推理

learner.predict: 用于模型推理,具体参数如下

img_path: 指定需要推理的图片路径
model: 指定用于推理的模型,默认为None, 不填写该参数则默认使用Learner中的Model进行推理
checkpoint: 推理时使用的模型权重路径, 默认为None。当传入有效路径时,该处优先级最高。没有传入参数时,会按完成训练后的模型权重高于Model中指定的checpoint的优先级加载模型权重。如果均未指定checpoint且没有进行训练,则默认使用随机初始化的权重进行推理
device: 推理时的设备类型,默认为'cpu',即使用cpu进行推理
score_thr: 模型logits判别阈值,默认为0.3
save_dir: 推理后的文件保存路径,默认为None
# such as "./data/raw/coco2017_sample/val2017/000000000139.jpg"
img_fc = FileChooser(path=os.getcwd(), layout=Layout(width="1000px"))
display(img_fc)
# 模型推理
result = learner.predict(os.path.join(img_fc.selected_path, img_fc.selected_filename))

Screenshot - 2022-10-24 23.28.02.png

7. 交互式推理

API针对notebook使用场景,增加了动态交互式的推理方式,您可以通过鼠标勾选需要推理的图片、视频,并且可以选择不同的iou和score参数进行动态比较。具体如下图所示

from modelarts.algo_kits import VisDetPlatform

infer_param = {"nms_pre": 200, "max_per_img": 20, "img_scale": (800, 600)}
VisDetPlatform(learner, infer_param=infer_param, stage="val", det_box_color=(0, 0, 255))

Screenshot - 2022-10-24 15.28.30.png

8. 总结

总体上,AI 算法开发套件给人一种厌倦了市面上许多大同小异的jupyter-lab后的惊喜,惊喜在于其良好的交互性和模型的集成性,能够有效降低开发的门槛。推荐使用!

本文参与华为云社区【内容共创】活动第21期】

任务17:《华为云ModelArts关键AI能力宣讲会 NO.3》云原生AI算法开发套件介绍

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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