6.深入解析AI开发流程
6.1 概述
1.常规AI开发流程
AI开发流程可分为训练迭代和部署上线两个方面:
- 训练迭代,即从选定特定数据集、模型结构、损失函数和评价指标入手,通过模型参数的不断优化,致力于实现尽可能接近或超越领域内最先进技术(SOTA)的结果。
- 部署上线,即把训练好的模型在特定环境中推理运行的过程,更多关注于部署场景、部署方式、吞吐率和延迟。
AI模型通常通过PyTorch、TensorFlow、飞桨等深度学习框架训练完成,但直接使用训练模型推理有两个问题:直接通过这些模型来进行推理需要依赖这些训练框架,用起来比较复杂;不同的硬件的对算子的底层优化方式可能不同,相同模型运行在不同硬件上效率并不高,特别是对延时要求严格的线上场景;由此,经过工业界和学术界数年的探索,AI开发流程有了一条主流的流水线。
这一条流水线解决了模型部署中的两大问题:使用对接深度学习框架和推理引擎的中间表示,开发者不必担心如何在新环境中运行各个复杂的框架;通过中间表示的网络结构优化、推理引擎对运算的底层优化,模型的运算效率大幅提升。
2.基于K230的AI开发流程
基于K230的AI开发流程与主流AI开发流程类似,也是先训练,再 部署。训练时开发者可以使用常见深度学习框架,eg:Pytorch、TensorFlow、飞桨等来定义网络结构,并通过训练确定网络中的参数。之后,模型的结构和参数会被转换成一种只描述网络结构的中间表示,eg:onnx、tflite,一些针对网络结构的优化会在中间表示上进行。最终,将中间表示转换成特定的文件格式(kmodel),并利用面向K230的推理引擎(K230Runtime),在K230硬件平台上实现模型的高效运行。
相信大家都对训练过程非常熟悉,因此本文着重介绍部署过程。选择开源repo人脸检测、人脸识别(稍后会详细解释两者含义),这两个开源repo都提供了基于Pytorch训练好的模型;因此,本文以Pytorch模型为例,对AI模型在K230的部署过程展开叙述。
对于Pytorch模型来说,从训练好到部署到K230上,会经过三种文件格式:pth/ckpt->onnx->kmodel,每转成新的文件格式之后,我们都需要验证转换模型的正确性,以保证成功部署。
- 已经训练好的Pytorch模型,我们会用pth推理脚本验证它的正确性;
- 验证pth/ckpt没有问题后,转onnx;
- 转onnx后,验证onnx模型的正确性,需要使用ONNXRuntime来验证,验证流程与Pytorch推理流程类似,包括加载onnx、读取图像/视频流、图像/视频帧预处理、onnx run、后处理、显示结果;
- 验证onnx没有问题,将其转换为kmodel;
- 此时使用K230Runtime来验证kmodel的正确性,验证流程与ONNXRuntime推理流程类似,包括加载kmodel、读取图像/视频流、图像/视频帧预处理、kmodel run、后处理、显示结果;
- kmodel推理流程正确了,我们AI模型就可以成功部署了。
PyTorch模型从训练到在K230上部署经过三个阶段:pth/ckpt验证(通常已验证)、onnx验证(使用ONNXRuntime),最后是kmodel验证(使用K230Runtime)。每个阶段都需要确保模型的正确性,以保证成功部署。验证流程包括加载模型、处理输入数据、运行推理、处理输出结果,最终确保K230上的AI模型部署成功。
6.2 环境搭建
6.2.1 快速上手
以Windows环境为例,进行快速上手说明。
6.2.1.1 CanMV-K230接口说明
说明:CanMV-K230主板电源和串口(与电脑通讯)共用一个TypeC口,如图中⑤所示:
6.2.1.2 CanMV-K230连接示例
请准备如下硬件,然后按照下图连接:
- CanMV-K230
- TypeC USB线 至少1根
- 网线一根(可选)
- HDMI线一根
- SD卡(若是PC没有SD卡插槽,则需要SD卡读卡器)
- 支持HDMI的显示器
按照上图连接之后,需要在SD卡中烧录镜像,下一小节将会介绍如何烧录镜像。
6.2.1.3 镜像烧录
Linux:
在TF卡插到宿主机之前,输入:
ls -l /dev/sd\*
查看当前的存储设备。
将TF卡插入宿主机后,再次输入:
ls -l /dev/sd\*
查看此时的存储设备,新增加的就是TF卡设备节点。
假设/dev/sdc就是TF卡设备节点,执行如下命令烧录TF卡:
sudo dd if=sysimage-sdcard.img of=/dev/sdc bs=1M oflag=sync
Windows:
Windows下可通过rufus工具对TF卡进行烧录,rufus工具下载地址。
1)将TF卡插入PC,然后启动rufus工具,点击工具界面的”选择”按钮,选择待烧写的固件。
2)点击“开始”按钮开始烧写,烧写过程有进度条展示,烧写结束后会提示“准备就绪”。
说明1:
sysimage-sdcard.img.gz
文件时最好先解压缩,烧录解压缩后的文件。
6.2.1.4 串口驱动安装及上电验证
K230 主板通过USB提供两路调试串口,windows下使用调试串口,需要安装USB转串口驱动程序,驱动下载链接。
安装驱动之后,如何验证驱动是否安装成功?先将CanMV-K230开发板按照6.2.1.2图示连接,然后将连接电源的type c连接线连接到PC USB口,可以发现两个USB串口设备,如下图所示:
同时HDMI连接的显示器会显示人脸检测结果。