【云驻共创】云原生AI算法开发套件介绍
《华为云ModelArts关键AI能力宣讲会 NO.3》云原生AI算法开发套件介绍的直播,本以为是一场平平无奇的技术开发介绍,但是整体看下来,还是给我带来了很多的惊喜。尤其是华为云的jupyter版本中独一无二的交互式操作让人耳目一新。
那么现在跟随文章,大家一起来看看吧!
1. 云原生AI算法开发套件简述
在传统的 AI 开发过程中,我们发现,模型的训练、评估、测试、优化、转换、实现和部署有着很大程度上的相似性,因此,是不是可以通过开发一个 AI 算法开发套件来进一步降低开发的成本,提高开发的效率,以实现降低门槛,提高开发效率的目的?
这就是 华为 AI 算法开发套件的开发初衷与由来。
那么 AI 算法开发套件主要包括哪些部分呢?有什么样的功能可以具体的完成 AI 的开发任务?
从上图可以看到,AI 算法开发套件主要体现在三个方面:
- 端到端的能力支持和 all in one 的能力使用,可以支持很多算法套件的使用。
- jupyterlab交互式 UI 集成 Python SDK、代码白盒化、数据的自动化
- IDE 云下开发、一键使用云上训练资源
AI 算法开发套件的上线适配主要分为了自研和社区两个部分。极大增加了算法的丰富度。两种方式相互促进,相互补充。自研套件主打业务开发的实用性与易用性,具备端到端的全流程开发支持;开源适配主打算法内容的丰富度与先进性,促进与开源社区的互动与联系。
从右图我们可以看到,AI 算法套件的亮点在于开发时的参数化调试,API开发方式和交互式三种各有特点的开发方式。能更加有效的对算法模型进行调试,减少将注意力放到文件路径的繁琐步骤。
2. 云原生AI算法开发样例
上图是 AI 开发套件的一个样例,通过样例我们可以直观看到 AI 开发套件在开发过程中体现的优势。
链接地址是:https://bbs.huaweicloud.com/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 界面对其进行参数调试。真的可以提高生产力!
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
)
同样的,在右边可以通过拖动batch_size()
的拖动条来自定义batch_size
的大小。
2.3. 可视化数据集
plotter = db.show_batch(rows=2, figsize=(14, 8))
next(plotter)
得到如下显示,从下图可以看出数据集的可视化也是十分方便的。
2.4. 绘制数据集分布图
db.plot_dataset_stats(figsize=(14, 8))
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)
在这里也体现了交互性,可以通过下方的选择框选择需要的模型。
# 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)
#@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])
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))
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))
8. 总结
总体上,AI 算法开发套件给人一种厌倦了市面上许多大同小异的jupyter-lab
后的惊喜,惊喜在于其良好的交互性和模型的集成性,能够有效降低开发的门槛。推荐使用!
本文参与华为云社区【内容共创】活动第21期】
- 点赞
- 收藏
- 关注作者
评论(0)