• Ianvs: 一个高效的AI测试工具


    目录

    简介

    依赖环境

    安装Ianvs

    案例演示

    1. 准备测试环境

    2. 准备测试算法

    3. 准备基准测试工作

    4. 运行基准测试工作

    5. 查看测试结果

    附录


    简介

    分布式协同AI基准测试KubeEdge-Ianvs是KubeEdge SIG AI孵化的一个全新的社区子项目,主要来解决工业界如下核心痛点:

    1. 业务数据集及其配套算法难以获取;

    2. 全场景多范式测试成本高;

    3. 封闭测试环境难以跟上各类新业务孵化;

    4. 个性场景的测试用例准备繁琐;

    KubeEdge-Ianvs具备的如下特点:

    1. 丰富的AI生态,开箱即用:数据集与配套算法,覆盖开发5+流程,零改造开箱即用;

    2. 全场景灵活切换:用例管理统一不同架构与接口,同一套工具兼容5+场景范式;

    3. 可扩展开放工具链:环境管理自定义数据集与指标,告别封闭守旧的测试环境;

    4. 用例管理辅助生成测试用例,简单的配置即可降低繁琐重复编程;

    本文后面将详细介绍KubeEdge-Ianvs如何快速入门。

    依赖环境

    你需要准备符合如下要求的工作设备:

    1. 一台计算机,比如虚拟机、台式机或者笔记本;

    2. 可用内存至少有4GB;

    3. 可用硬盘空间至少10GB;

    4. 已安装python 3.6+;

    5. 可访问GitHub和pip等;

    在本次案例演示中,设备是带有python3.6的Linux系统。若你的设备是Windows系统,下文介绍的步骤仍然适用,但相关命令可能会有所不同。

    安装Ianvs

    step1: 下载ianvs仓库。

    1. mkdir /ianvs
    2. cd /ianvs #One might use another path preferred
    3. mkdir project
    4. cd project
    5. git clone https://github.com/kubeedge/ianvs.git

    step2: 安装第三方依赖。

    1. sudo apt-get update
    2. sudo apt-get install libgl1-mesa-glx -y
    3. python -m pip install --upgrade pip
    4. cd ianvs
    5. python -m pip install ./examples/resources/third_party/*
    6. python -m pip install -r requirements.txt

    step3: 安装 ianvs。

    python setup.py install

    案例演示

    以ianvs仓库中的singletask_learning_bench为例子。

    1. 准备测试环境

    step1: 准备测试环境的配置文件,请下载testenv.yaml。

    1. testenv:
    2. dataset:
    3. # 训练数据集的索引文件地址,当前只支持txt格式;
    4. train_url: "/ianvs/dataset/train_data/index.txt"
    5. # 测试数据集的索引文件地址,当前只支持txt格式;
    6. test_url: "/ianvs/dataset/test_data/index.txt"
    7. metrics:
    8. # 用来测试算法的指标,名字和下面介绍的指标函数的别名保持一致;
    9. - name: "f1_score"
    10. # 指标函数
    11. url: "./examples/pcb-aoi/singletask_learning_bench/testenv/f1_score.py"

    step2: 准备指标函数,请下载f1_score.py。

    1. from FPN_TensorFlow.libs.label_name_dict.label_dict import NAME_LABEL_MAP
    2. from FPN_TensorFlow.data.io.read_tfrecord import convert_labels
    3. from FPN_TensorFlow.help_utils.tools import get_single_label_dict, single_label_eval
    4. from sedna.common.class_factory import ClassType, ClassFactory
    5. # 标明导入该python文件时可访问到的模块;
    6. # 该例子是说明ianvs系统自动导入该python文件时,只访问f1_score模块;
    7. # 若一个python文件具有较多模块,可用此方法做模块导入限制;
    8. __all__ = ["f1_score"]
    9. # 采用工厂模式注入f1_score模块;
    10. # alias=“f1_score” 是给该模块取一个别名;
    11. @ClassFactory.register(ClassType.GENERAL, alias="f1_score")
    12. def f1_score(y_true, y_pred):
    13. # y_true是真实标签列表, y_pred是预测值;
    14. # 本例子中y_true和y_pred都是字典类型,其中预测标签是读一系列包含标签信息的xml文件
    15. ...
    16. return f1_score_avg

    step3: 准备数据

    数据集是工业缺陷检测场景的PCB-AoI数据集,包含了训练数据集和测试数据集。

    1. cd /ianvs #One might use another path preferred
    2. mkdir dataset
    3. cd dataset
    4. wget https://kubeedge.obs.cn-north-1.myhuaweicloud.com:443/ianvs/pcb-aoi/dataset.zip
    5. unzip dataset.zip

    2. 准备测试算法

    step1: 准备测试算法的配置文件,请下载fpn_algorithm.yaml。

    1. algorithm:
    2. # AI范式类型,当前例子采用的是singletasklearning
    3. # 单任务学习:模型训练结束后,就做模型推理,最后做指标计算;
    4. paradigm_type: "singletasklearning"
    5. # 初始模型地址
    6. initial_model_url: "/ianvs/initial_model/model.zip"
    7. # AI范式包含的算法模块
    8. modules:
    9. # basemodel模块,包含了范式中的常用接口,比如train,predict等。
    10. - type: "basemodel"
    11. # 模块的别名叫FPN,详细见下面的basemodel.py
    12. name: "FPN"
    13. # 模块的python文件
    14. url: "./examples/pcb-aoi/singletask_learning_bench/testalgorithms/fpn/basemodel.py"
    15. # 模块的超参配置,支持同一个超参同时测多个值;
    16. hyperparameters:
    17. - momentum:
    18. values:
    19. - 0.95
    20. - 0.5
    21. - learning_rate:
    22. values:
    23. - 0.1

    注意:点击见如何配置超参数

    step2:准备basemodel模块文件,请下载basemodel.py。

    1. import os
    2. import tempfile
    3. import time
    4. import zipfile
    5. import cv2
    6. import logging
    7. import numpy as np
    8. import tensorflow as tf
    9. import tensorflow.contrib.slim as slim
    10. from sedna.common.config import Context
    11. from sedna.common.class_factory import ClassType, ClassFactory
    12. from FPN_TensorFlow.help_utils.help_utils import draw_box_cv
    13. from FPN_TensorFlow.libs.label_name_dict.label_dict import NAME_LABEL_MAP
    14. from FPN_TensorFlow.data.io.read_tfrecord import next_batch_for_tasks, convert_labels
    15. from FPN_TensorFlow.data.io import image_preprocess
    16. from FPN_TensorFlow.help_utils.tools import mkdir, view_bar, get_single_label_dict, single_label_eval
    17. from FPN_TensorFlow.libs.configs import cfgs
    18. from FPN_TensorFlow.libs.box_utils.show_box_in_tensor import draw_box_with_color, draw_boxes_with_categories
    19. from FPN_TensorFlow.libs.fast_rcnn import build_fast_rcnn
    20. from FPN_TensorFlow.libs.networks.network_factory import get_flags_byname, get_network_byname
    21. from FPN_TensorFlow.libs.rpn import build_rpn
    22. # 标明导入该python文件时可访问到的模块;
    23. # 该例子是说明ianvs系统自动导入该python文件时,只访问BaseModel模块;
    24. # 若一个python文件具有较多模块,可用此方法做模块导入限制;
    25. __all__ = ["BaseModel"]
    26. # 采用工厂模式注入BaseModel模块;
    27. # alias=“FPN” 是给该模块取一个别名;
    28. @ClassFactory.register(ClassType.GENERAL, alias="FPN")
    29. class BaseModel:
    30. def __init__(self, **kwargs):
    31. ...
    32. def train(self, train_data, valid_data=None, **kwargs):
    33. ...
    34. # 训练模型的算法函数
    35. def predict(self, data, input_shape=None, **kwargs):
    36. ...
    37. # 模型预测的算法函数

    step3: 安装basemodel模块用到的第三方算法包FPN_TensorFlow

    1. cd /ianvs/project/ianvs/
    2. python -m pip install examples/resources/algorithms/FPN_TensorFlow-0.1-py3-none-any.whl

    注意:安装该算法包的前提是设备系统安装python3.6。

    step4: 准备初始模型

    1. cd /ianvs #One might use another path preferred
    2. mkdir initial_model
    3. cd initial_model
    4. wget https://kubeedge.obs.cn-north-1.myhuaweicloud.com:443/ianvs/pcb-aoi/model.zip

    3. 准备基准测试工作

    step1: 准备基准测试工作的配置文件,请下载benchmarkingjob.yaml

    1. benchmarkingjob:
    2. # 基准测试工作名
    3. name: "benchmarkingjob"
    4. # 基准测试工作空间
    5. workspace: "/ianvs/singletask_learning_bench/workspace"
    6. # 测试环境的配置文件
    7. testenv: "./examples/pcb-aoi/singletask_learning_bench/testenv/testenv.yaml"
    8. # 测试对象配置
    9. test_object:
    10. # 测试类型是测试算法(algorithms)
    11. type: "algorithms"
    12. algorithms:
    13. # 算法名
    14. - name: "fpn_singletask_learning"
    15. # 算法配置文件
    16. url: "./examples/pcb-aoi/singletask_learning_bench/testalgorithms/fpn/fpn_algorithm.yaml"
    17. # 测试用例排行榜
    18. rank:
    19. # 用指标f1_score降序排测试用例
    20. sort_by: [ { "f1_score": "descend" } ]
    21. # 可视化配置
    22. visualization:
    23. # 只可视化选择的数据(选择的数据配置见下面selected_dataitem配置)
    24. mode: "selected_only"
    25. # 可视化方式采用 打印表单
    26. method: "print_table"
    27. # 选择数据配置
    28. selected_dataitem:
    29. # 选择所有的算法范式
    30. paradigms: [ "all" ]
    31. # 选择所有的算法模块
    32. modules: [ "all" ]
    33. # 选择所有的超参数
    34. hyperparameters: [ "all" ]
    35. # 选择 f1_score 指标
    36. metrics: [ "f1_score" ]
    37. # 保存模式配置,保存选择的数据和所有的输出数据
    38. # 保存地址工作空间中,相对地址:./rank
    39. save_mode: "selected_and_all"

    4. 运行基准测试工作

    ianvs -f ./examples/pcb-aoi/singletask_learning_bench/benchmarkingjob.yaml

    5. 查看测试结果

    在控制台,你可以看到选择数据后的可视化结果:

    rank

    algorithm

    f1_score

    paradigm

    basemodel

    learning_rate

    momentum

    time

    url

    1

    fpn_singletask_learning

    0.8396

    singletasklearning

    FPN

    0.1

    0.5

    2022-07-07 20:33:53

    /ianvs/pcb-aoi/singletask_learning_bench/workspace/benchmarkingjob/fpn_singletask_learning/49eb5ffd-fdf0-11ec-8d5d-fa163eaa99d5

    2

    fpn_singletask_learning

    0.8353

    singletasklearning

    FPN

    0.1

    0.95

    2022-07-07 20:31:08

    /ianvs/pcb-aoi/singletask_learning_bench/workspace/benchmarkingjob/fpn_singletask_learning/49eb5ffc-fdf0-11ec-8d5d-fa163eaa99d5

    在基准测试工作空间,你可以看到所有的输出产物。

    1. cd /ianvs/singletask_learning_bench/workspace
    2. tree

    附录

    KubeEdge-Ianvs项目地址: https://github.com/kubeedge/ianvs

    KubeEdge-Ianvs项目文档地址:https://ianvs.readthedocs.io/en/latest/

    KubEdge SIG AI地址:https://github.com/kubeedge/community/tree/master/sig-ai

  • 相关阅读:
    软件工程第七周
    LINUX 基础
    API接口中大数据在淘宝中的应用【获取商品详情接口,商品价格,SKU数据,订单……】
    linux top——COMMAND-LINE Options
    Spring Session中存放于Redis中的PRINCIPAL_NAME_INDEX_NAME没有设置过期时间
    C++学习笔记(17)
    【云计算】三种云服务
    String.format()的详细用法
    软件测试拿到项目之后该怎么做?请仔细看完这篇文章
    [力扣 Hot100]Day38 翻转二叉树
  • 原文地址:https://blog.csdn.net/VectorYang/article/details/126025276