文章目录

  • 前言
  • 一、ModelBox 产品介绍
    • 1.1、什么是 ModelBox,有什么功能?
    • 1.2、ModelBox 具备哪些特性?
    • 1.3、相比直接调用底层 API 开发 AI 业务,ModelBox 有什么优势?
    • 1.4、ModelBox 手册
  • 二、ModelBox AI 应用开发全景
    • 2.1、ModelBox AI 应用开发全景运行架构
    • 2.2、ModelBox 如何搭配使用?
    • 2.3、ModelBox 目前支持哪些框架训练的模型?
    • 2.4、ModelBox 跟华为云 ModelArts、HiLens 服务的关系?
  • 三、基于 ModelBox 实现“AI 养猪”
    • 3.1、什么是“AI 养猪”?
    • 3.2、“AI 养猪”应用开发和部署架构
  • 四、“AI 养猪”数据处理与模型训练
    • 4.1、数据采集与处理
    • 4.2、模型训练与转换
  • 五、“AI 养猪”应用开发
    • 5.1、下载模板
    • 5.2、新建项目
    • 5.3、查看流程图
    • 5.4、查看输入、输出配置
    • 5.5、用启动脚本执行应用
    • 5.6、性能评估
  • 总结

前言

ModelBox 是一套专门为 AI 开发者提供的易于使用,高效,高扩展的 AI 应用开发框架,它可以帮助 AI 开发者快速完成从模型文件到 AI 推理应用的开发和上线工作,降低 AI 算法落地门槛,同时带来 AI 应用的高稳定性和极致性能。通过 ModelBox 框架,我们可以快速实现 AI 推理业务的开发,同时可以增加推理的数据吞吐量,降低 AI 分析耗时。在本文中我们将通过讲解 ModelBox 的案例——AI 养猪,实时看护猪的健康来进一步说明这个天赋异禀的 AI 应用开发框架。


一、ModelBox 产品介绍

1.1、什么是 ModelBox,有什么功能?

ModelBox 是一个 AI 应用的推理框架,中文名称为“模盒”或“模核”。ModelBox 通过编排和插件化的形式支持 AI 应用的开发,支持的数据有视频,音频,语音,文本,通用数据的编排处理。

1.2、ModelBox 具备哪些特性?

作为 AI 应用开发框架,ModelBox 具备以下三大特点:

  • 屏蔽底层软硬件差异,一次开发,端边云多处部署。
  • 智能调度,保证极致 AI 推理运行性能。
  • 全场景灵活开发模式,可视化图编排和 API 开发。

1.3、相比直接调用底层 API 开发 AI 业务,ModelBox 有什么优势?

ModelBox 主要聚焦解决 AI 应用开发的问题,相比直接调用底层 API,开发者需要关注每个底层的 API 使用方法,关注并发,关注 GPU,NPU 设备编程接口,关注 TensorRT,TensorRT 等推理框架的编程 API,与云计算结合的接口,和分布式通信,日志等琐碎而复杂的周边代码。


ModelBox 解决的就是业务开发的周边问题,将周边问题交由 ModelBox 处理,ModelBox 通过对内存,CPU,GPU,周边组件的精细化管理,使 AI 推理业务开发更高效,性能也更高,质量也更好。

1.4、ModelBox 手册

关于 ModelBox 核心概念、功能单元和流程图开发的更多介绍,可以查看 ModelBox 手册,具体如下图所示:

二、ModelBox AI 应用开发全景

2.1、ModelBox AI 应用开发全景运行架构

ModelBox 是在 AI 应用开发的“推理阶段”使用的高性能开发框架,其运行架构具体如下图所示:

2.2、ModelBox 如何搭配使用?

ModelBox AI 应用开发可以基于以下三个方面

  • 基于 ModelBox 开源社区源码开发 AI 应用。
  • 基于华为云 ModelArts 平台开发 ModelBox AI 应用。
  • 基于 HiLens 平台提供的 ModelBox SDK 开发 AI 应用。

2.3、ModelBox 目前支持哪些框架训练的模型?

目前支持的模型有 TensorFlow、TensorRT、Ascend ACL 模型。

ModelBox 框架里面包含了支持 TensorFlow、Caffe、LibTorch、MindSpore 模型运行所需的功能单元 Flowunit,我们称为推理功能单元(Inference Flowunit),这些推理功能单元可以直接加载对应的模型文件,而不需要编写代码,只需提供一个简单的配置文件,即可将模型引入到 ModelBox 的流程中。

2.4、ModelBox 跟华为云 ModelArts、HiLens 服务的关系?

ModelBox 是由华为云开发并开源的 AI 应用开发框架。

  • 华为云 ModelArts 服务在线开发环境 Notebook 中,提供了 ModelBox AI 应用开发镜像,方便开发者可选用后便捷在线开发,开发完成后可在线部署到云上。
  • 华为云 HiLens 服务基于 ModelBox 源码,提供了适用在多种端侧设备的 ModelBox SDK,方便开发者开发运行在这类设备上的 AI 应用,且在设备注册后,可以在 HiLens 管理控制台上在线部署到设备上运行。

三、基于 ModelBox 实现“AI 养猪”

3.1、什么是“AI 养猪”?

说到这,可能就有好奇的同学提问了,“什么是“AI 养猪”呢?具体一点,与传统人工队相比,这玩意有什么优势呢?”


别急,我来给你讲,AI 养猪可以实现:

  • 通过人工智能全天候监控猪场的实时动态。
  • 摄像头联通物联网设备,实现生产指标的自动统计,弥补了传统养殖业对人力资源需求的不足。
  • 猪只体态可以直观地反映猪只的生理状态,为猪只疾病预防提供重要依据。
  • 基于 ModelBox 展开收拢单元开发,识别猪的站立躺卧两种姿态和猪只数量

3.2、“AI 养猪”应用开发和部署架构

根据在 2.1 中 ModelBox AI 应用开发全景运行架构,我们可以通过如下流程进行“养猪”的 AI 应用开发和部署,具体如下图所示:

四、“AI 养猪”数据处理与模型训练

4.1、数据采集与处理

“AI 养猪”,我们需要先训练一个模型,这里我们使用 ModelArts。ModelArts 是一站式 AI 开发平台,支持图像自动标注。

实验数据采用猪只检测数据集,包含 500 张图片以及对应的 xml 文件,目前已发布到 AI Gallery 上,具体如下图所示:

4.2、模型训练与转换

目标检测模型采用 YOLOX 网络结构,YOLOX 是 YOLO 系列的优化版本,引入了解耦头、数据增强、无锚点以及标签分类等目标检测领域的优秀进展,拥有较好的精度表现,同时对工程部署友好,具体如下图所示:


我们在 ModelArts 的 Notebook 环境中训练后,再转换成对应平台的模型格式:onnx 格式可以运行在 Windows 设备上,RK 系列设备上需要转换为 rknn 格式,模型训练 300 个 Epoch 取得的结果,具体如下图所示:


体态识别模型使用 MobileNetV2 作为卷积基,分别使用迁移学习和从头开始训练网络,实验表明训练网络所有层明显优于迁移学习。模型的训练与转换教程已经开放在 AI Gallery 中,其中包含训练数据、训练代码、模型转换脚本以及模型推理代码

开发者如果希望尝试自己训练模型,或者对模板中提供的模型效果不满意,可以进入体态识别模型的训练与转换页面,点击右上角的 Run in ModelArts 按钮,也可以修改其中的代码、更换新的数据集训练出自己的模型,具体如下图所示:

五、“AI 养猪”应用开发

使用 VS Code 连接到 ModelBox sdk 所在目录或者远程开发板,开始进行猪只体态识别应用的开发。

说明:本文以 RK3568 版本为例进行说明,其他版本与之类似。

5.1、下载模板

本案例所需模板资源(代码、模型、测试数据等)均可从 multi_pig_pose_yolox_mbv2 下载,下载模板到 ModelBox 核心库的 solution 目录下,具体如下图所示:

5.2、新建项目

在 ModelBox sdk 目录下使用 create.py 创建 multi_pig_pose 工程,末尾 -s 参数,表示将使用后面参数值代表的模板创建工程,而不是创建空的工程,具体如下图所示:

5.3、查看流程图

ModelBox 提供了可视化图编排工具:Editor,我们可以使用 python ./create.py -t editor 开启图编排服务,具体如下图所示:


可以看到条件功能单元 yolox_post 的两个输出分别对接到不同的功能单元:

  • 在未检测到猪只时,no_pig 分支直接对接到 video_out 进行视频编码。
  • 检测到猪只时,has_pig 对接到之后的展开/收拢功能单元做全部猪的体态识别。

而展开功能单元 expand_box 与收拢功能单元 collapse_pig_pose 之间其他功能单元的使用方式,与正常流程并无不同。

multi_pig_pose 需要根据检测结果选择不同的分支进行后续操作:

  • 如果没有检测到猪,直接输出原始图像。
  • 如果检测到猪,需要对图中检测到的每只猪都识别体态。

使用展开功能单元 expand_box,将图中的所有检测框展开为多个输出,传递到后面的功能单元分别做体态识别;最后又增加了收拢功能单元 collapse_pig_pose,对同一张图的多只猪的体态数据进行合并输出,使得后面的画图功能单元能收集到同一张图片的完整数据。

另外,可以看到预处理功能单元 resizenormalize 等分别使用了两次(两次的属性不同),每种功能单元在图中也相应的定义了两个实例,使用不同的节点名称进行区分。

5.4、查看输入、输出配置

查看任务配置文件 bin/mock_task.toml,可以看到其中的任务输入和任务输出配置为如下内容,具体如下图所示:


即使用本地视频文件 data/pig.mp4 作为输入,解码、预处理、猪只检测、后处理、猪只体态识别后,输出画面显示到名为 modelbox_show 的本地屏幕窗口中。

5.5、用启动脚本执行应用

启动应用前执行 build_project.sh 进行工程构建,该脚本将编译自定义的 C++ 功能单元(本应用不涉及)、将应用运行时会用到的配置文件转码为 Unix 格式(防止执行过程中的格式错误),实现代码如下:

███$ ./build_project.sh
dos2unix: converting file xxx.toml to Unix format...
...
build success: you can run main.bat in ./bin folderPress ‘p’ to pause…, any key to exit

然后执行 bin/main.bat 运行应用,实现代码如下:

███$ ./bin/main.bat
…

将会自动弹出实时的猪只体态识别的画面,具体如下图所示:

5.6、性能评估

我们在技能流程图中开启性能统计配置项,配置代码如下:

[profile]
profile=true
trace=true

之后双击 bin/main.bat 或在 powershell 中运行技能,实现代码如下:

./bin/main.bat

运行完成后生成的视频与性能统计文件都在 hilens_data_dir 文件夹下,具体如下图所示:


我们可以在 Chrome 浏览器 chrome://tracing/ 中加载性能统计文件查看,具体如下图所示:


逐项查看后发现耗时最久的是体态识别功能单元,平均耗时 10.69ms,因为 ModelBox 是静态图并行推理,fps 取决于耗时最久的功能单元,理论计算 fps = 1000 / 10.69 \approx 94fps=1000/10.69≈94,ModelBox 真的很快!


总结

在本案例中我们使用 ModelBox 的展开/合并功能单元进行猪只体态识别应用的开发,有一类常见的视频 AI 应用是检测 + 分类,或者检测 + 识别,需要对检测到的所有对象分别处理,如人脸识别、车牌识别等,此时可以使用 ModelBox 中的展开/合并功能单元,它能保证大部分模块的处理逻辑与正常数据流相同,又能对展开的子数据流进行高效的并发处理,提高运行速度。最后打包部署,就完成了一个 AI 应用的开发,从模型的训练到转换再到开发到部署的全部流程。ModelBox 加速跨平台高性能 AI 应用开发和落地,打通 AI 应用落地最后一公里,ModelBox 让模型以统一的格式和接口更高效地运行,给开发者提供以下能力:开发者无需关注底层开发、聚焦核心业务逻辑、提升 AI 应用开发效率。


我是白鹿,一个不懈奋斗的程序猿。望本文能对你有所裨益,欢迎大家的一键三连!若有其他问题、建议或者补充可以留言在文章下方,感谢大家的支持!

基于 ModelBox 实现 AI 应用快速开发:AI 养猪,实时看护猪的健康相关推荐

  1. AI: 如何快速开发智能机器人 Bot Intelligence

    AI: Azure Bot Service 快速开发. 前几篇介绍,文字,文本,图像,人脸的分析和识别的.这里根据前几个内容汇集在一起做综合实践. 注意:本文视角 Consulting.  介绍如何综 ...

  2. 基于React和SpringBoot的快速开发模板QuickAdmin

    经过一段时间的总结和完善,我的管理系统快速开发模板已经基本成型,现在GitHub上开源啦: QuickAdmin QuickAdmin是基于Spring Boot和React.js实现的管理系统开发框 ...

  3. Jeecg-Boot 1.1 发布,基于 SpringBoot+Ant Design 的快速开发平台

    Jeecg-Boot 1.1 版本发布,初成长稳定版本 导读                                ⊙平台首页UI升级,精美的首页支持多模式                   ...

  4. 基于Appfuse的Web应用快速开发

    Web应用程序定义及优势 应用程序可以分为两种模式:C/S.B/S.C/S是客户端/服务器端程序(Client/Server),也就是说这类程序一般独立运行.而B/S就是浏览器端/服务器端应用程序(B ...

  5. easymodbus_easymodbus4j基于netty的modbus协议快速开发工具

    easymodbus4j easymodbus4j A high-performance and ease-of-use implementation of the Modbus protocol w ...

  6. python国际象棋ai程序_Python开发AI应用-国际象棋应用

    AI 部分总述 AI在做出决策前经过三个不同的步骤.首先,他找到所有规则允许的棋步(通常在开局时会有20-30种,随后会降低到几种).其次,它生成一个棋步树用来随后决定最佳决策.虽然树的大小随深度指数 ...

  7. echarts力导向图节点连线动画_基于 HTML5 网络拓扑图的快速开发之入门篇(一)...

    前言 计算机网络的拓扑结构是引用拓扑学中研究与大小,形状无关的点.线关系的方法.把网络中的计算机和通信设备抽象为一个点,把传输介质抽象为一条线,由点和线组成的几何图形就是计算机网络的拓扑结构.网络的拓 ...

  8. html5的网络拓扑图,基于 HTML5 网络拓扑图的快速开发之入门篇(一)

    前言 计算机网络的拓扑结构是引用拓扑学中研究与大小,形状无关的点.线关系的方法.把网络中的计算机和通信设备抽象为一个点,把传输介质抽象为一条线,由点和线组成的几何图形就是计算机网络的拓扑结构.网络的拓 ...

  9. 基于 HTML5 网络拓扑图的快速开发之入门篇(二)

    2019独角兽企业重金招聘Python工程师标准>>> 前言 上一篇我们绘制了一个 graphView 场景,在场景之上通过 graphView.dm() 获取数据容器,并通过 gr ...

最新文章

  1. python开发的优秀界面-:Python做推荐系统,界面用什么实现
  2. Node_MongoDB
  3. DelphiXE7中创建WebService(服务端+客户端)
  4. 动态规划(dynamic programming)基础【背包问题】
  5. Android 热修复之DexPatch 介绍
  6. SQLSERVER 游标
  7. 单元测试 代码里面都绝对路径怎么处理_原创 | 编写单元测试和实践TDD (六)测试哪些内容:Right-BICEP...
  8. 图论-欧拉图-欧拉回路-Euler-Fluery-Hierholzer-逐步插入回路法-DFS详解-并查集
  9. pd.stats.ols.MovingOLS以及替代
  10. 车牌分割python_车牌字符分割python打开
  11. PMI采购MogaFX经理人指数是什么(二)
  12. oracle lpad函数有中文,oracle lpad函数和rpad函数
  13. 【SpringBoot】添加Converter解析器中使用lambda表达式代替匿名内部类是启动报错: does the class parameterize those types?
  14. gta5结局杀老崔我哭了_GTA5:每个主角都在故事里得到了自己想要的东西,但崔佛却是白给...
  15. deepin,真好用-01-简介及安装
  16. libtool-2.4.6-9-x86_64.pkg.tar.xz无法下载
  17. 第三章第三节、他是一个箍桶匠
  18. 学习笔记(01):大数据金融信贷项目实战(Spark2.3.x Streaming)-Spark SQL架构原理
  19. android autojs 群控 脚本,autojs开发群控需要用到的服务器通信协议websocket例子
  20. ArcGIS数据处理JPG图片地理配准和矢量化空间校正

热门文章

  1. XSHELL提示更新版本才能用
  2. mac使用sourcetree跳过注册
  3. harbor 只读模式修改
  4. STDOUT_FILENO文件描述符的重定向及还原 (dup2函数用法) Linux系统编程
  5. 一个在**工作十年员工的感悟
  6. 开数据显示服务器异常怎么办,服务器客户端数据异常怎么回事
  7. Java OOP 8 实用类(枚举、包装类、日期类、Random类)
  8. SSM+Mysql高校知识共享系统设计与实现
  9. 引领未来工作生活方式 惠普发布新一代产品及解决方案
  10. html网页如何添加颜色,怎么在HTML中设置网页背景颜色