模型推理
模型推理
模型支持列表
模型类型 | 任务类型 | 模型列表 | 支持尺寸 | NPU适配 | 模型详情 | SDK连接 |
---|---|---|---|---|---|---|
resnet | 图片分类 | ResNet18 ResNet34 ResNet50 |
224x224 | 是 | 模型详情 | Python部署 C++部署 |
yolov3 | 目标检测 | YOLOv3-Mobilenet-V1 YOLOv3-DarkNet53 YOLOv3-ResNet34 |
320x320 416x416 608x608 |
是 | 模型详情 | Python部署 C++部署 |
hrnet | 人体关键点检测 | HRNet-w32 | 256x192 | 是 | 模型详情 | Python部署 C++部署 |
AI项目流程概述
AI项目流程大致为确定应用场景和目标、
数据收集和预处理、
选择或设计AI模型、
模型训练、
模型评估、
模型导出、
模型部署多个步骤。
其中确定应用场景和目标、数据收集和预处理、选择或设计AI模型、模型训练、模型评估、模型导出前几个环节又可统称为模型生产,参考百度飞桨PaddlePaddle系列的相关开源项目,本文档重点展开和EdgeBoard DK-1A更加密切的模型部署环节。
例:clas_resnet
本例中,使用ResNet模型对图片进行分类。亦可参考支持模型列表中的对应SDK下载包中的README.md文件。
模型说明
该模型用于目标检测任务,基于PaddleClass2.5进行模型训练,paddle版本使用2.4.1,输入数据尺寸为224x224,数据格式为Imagenet格式。
效果预览
输入图片: ./test_images/ILSVRC2012_val_00000014.JPEG
输出结果: ./vis.jpg 图片(图片左上角被标注“label = 757”,表示该图片属于“757”类,即“RV,一种车辆类型”)。
模型生产
基于AIStudio中的范例项目基于ResNet进行物品分类进行模型的训练、评估和导出。(版本参考:ver23.11.28 2023-11-28 19:04:02)
模型转化
为保证模型部署在EdgeBoard DK-1A上能够更高效率运行,充分调用板卡的CPU、GPU、NPU算力,需要将模型进行特定高性能转化。
自行训练获得标准模型后,可联系百度技术支持ext_edgeboard01@baidu.com进行模型高性能转化。
此例中下载范例项目已转化好的模型。在EdgeBoard DK-1A上打开终端,执行以下命令下载模型及相关物料。
cd /home/edgeboard/
sudo wget https://bj.bcebos.com/ppdeploy/ppdeploy1.1/SDK/PPDeploy1.1_resnet_PaddleClas2.5_Paddle2.4.1_Ver1.0.0_python.zip
模型部署
Step1:安装opencv依赖库及EdgeBoard DK-1A推理工具PPNC(如已安装,可跳过此步)
打开终端,执行以下命令安装PPNC。
sudo apt update
sudo apt install libopencv-dev -y
sudo apt install python3-opencv -y
sudo apt install ppnc-runtime -y
Step2:安装PaddlePaddle(如已安装,可跳过此步)
打开终端,执行以下命令安装PaddlePaddle。
mkdir Downloads
cd Downloads
wget https://bj.bcebos.com/pp-packages/whl/paddlepaddle-2.4.2-cp38-cp38-linux_aarch64.whl
sudo pip install paddlepaddle-2.4.2-cp38-cp38-linux_aarch64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
Step3:解压文件。 在终端输入以下命令,解压文件。
unzip PPDeploy1.1_resnet_PaddleClas2.5_Paddle2.4.1_Ver1.0.0_python.zip
Step4:安装依赖库。
在终端输入以下命令,进入resnet-python目录,并安装依赖库:
cd /home/edgeboard/resnet-python/
sudo pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
说明
参数 -i https://pypi.tuna.tsinghua.edu.cn/simple 表示此次使用清华源进行安装。由于网络原因,直接使用默认源安装可能会出现报错。
Step5:配置config.json文件(无更改可略过)
终端输入以下命令,进入config.json所在目录,并使用vim查看内容。
cd /home/edgeboard/resnet-python/
vim config.json
默认已配置完成,可直接使用,如有自定义,可另行更改配置内容。
{
"mode": "professional", //固定字段无需修改
"model_dir": "./model", //模型文件路径
"model_file": "model" //固定为model,无需修改
}
键盘输入“:q”,回车退出。
Step6:运行推理代码。
cd /home/edgeboard/resnet-python/
sudo python3 tools/infer_demo.py \
--config ./model/config.json \
--test_image ./test_images/ILSVRC2012_val_00000014.jpeg \
--visualize \
--with_profile
参数说明
- config: 上文建立的config.json的路径
- test_image: 测试图片路径
- visualize: 是否可视化,若设置则会在该路径下生成vis.jpg渲染结果
- with_profile: 是否统计前处理、模型推理、后处理各阶段耗时,若设置会输出各阶段耗时,默认不输出
\ 表示换行,若命令过长,用于换行,可不输入。详见Maximum Line Length。
Step7:查看推理结果。 在edgeboard/resnet-python/目录下可以看到新增一个名为vis.jpg的推理结果文件。
Paddle与PPNC推理结果对比
由于PPNC为针对特定板卡优化方案,其推理结果与Paddle推理结果可能存在差异,可参考如下对比校验流程。一般推理效果偏差不大可忽略此流程。
Step1:下载Paddle静态模型文件
将AIStudio项目中导出的Paddle静态模型文件(xx.pdmodel 和 xx.pdiparams)下载至板卡resnet/model目录下。
Step2:执行对比
在板卡终端中执行以下命令,进行推理结果对比。
cd /home/edgeboard/resnet-python
sudo python3 tools/test.py \
--config ./model/config.json \
--model_dir ./model \
--test_dir ./test_images \
--output_dir ./output_dir
参数说明
- config: 同上
- model_dir: paddle静态图模型文件(model.pdmodel)和(model.pdiparams)所在目录
- test_dir: 测试图片文件夹路径
- output_dir: 存放结果文件,分别存放paddle和ppnc结果数据。
实际项目部署
实际用于项目中时,仅需要部分脚本,因此需要提取部署包并置于实际的项目代码中运行。
Step1:提取部署包。 在终端中输入以下命令,进入resnet-python目录。
./extract.sh
执行成功后,即会在当前目录下生成resnet_deploy.zip文件。
Step2:使用部署包。
- 准备ppnc模型及配置文件
将模型转换阶段生成的model.json和model.nb模型文件拷贝到项目能访问的目录,并参照前序的方式编写模型配置文件config.json。 - 准备环境
将生成的resnet_deploy.zip部署包解压后得到lib文件夹、resnet文件夹和requirements.txt文件。其中requirements.txt是已验证过部署包可正常使用的相关库版本,实际项目开发中安装相关库时可参考该文件。 - 使用
部署包使用方式请参考前序案例中使用的infer_demo.py脚本。
例:yolov3
本例中,使用yolov3模型对目标物进行检索。具体可参考支持模型列表中的对应SDK下载包中的README.md文件。
例:hrnet
本例中,使用hrnet模型对人体关键点进行检测。具体可参考支持模型列表中的对应SDK下载包中的README.md文件。