大家好,我是地平线的海盗旗,今天教程讲述的是商汤算法在地平线开发板的部署。经过长期的使用,相信大家对地平线的开发套件Open_Explorer有了较深理解,现在简单介绍商汤的算法库:OpenMMLab 是一个适用于学术研究和工业应用的开源项目,涵盖了计算机视觉的许多研究课题,如:图像分类、目标检测、目标分割、超分辨率图像生成等。其包含上百个算法源码与与训练模型,广大开发者可以快速使用现有算法实现项目落地。
下面开始正式讲解商汤算法在地平线开发板的部署,本次例程使用商汤的预训练模型mobilenet_v2。
- 一、模型转化
1.安装mmcv+mmcls:
具体细节请参考OpenMMLab开发手册:OpenMMLab
下载mmcls源码与与训练模型:open-mmlab/mmclassification: OpenMMLab Image Classification Toolbox and Benchmark (github.com)
2.商汤训练模型转化为onnx模型:
使用mmcls中自带的pytorch2onnx工具,把训练好的mobilenetv2模型转化为onnx模型,开发者也可以根据自己的场景需求进行训练。
python tools/deployment/pytorch2onnx.py \
configs/mobilenet_v2/mobilenet_v2_b32x8_imagenet.py \
--checkpoint mobilenet_v2.pth \
--output-file mobilenetV2.onnx \
--show
--verify
运行之后,用户可以获取相应的onnx模型!
- 二、模型校验
成功得到ONNX模型之后,我们需要把ONNX模型转化为板端部署文件,地平线提供了天工开物工具链,可以有效地对ONNX模型进行验证并转化。使用工具链对ONNX模型进行校验,校验不通过的模型目前无法上板部署,需要调整算子或提交地平线开发人员进行算子支持升级!!
工具链可在地平线生态社区获取:地平线 AI 社区 (horizon.ai)
图 2
model_type="onnx"
onnx_model="../../../01_common/modelzoo/mapper/classification/mobilenet/mobilenet_v2.onnx"
output="./mobilenet_checker.log"
march="bernoulli2"
hb_mapper checker --model-type ${model_type} \
--model ${onnx_model} \
--output ${output} --march ${march}
图3 Check结果图
使用Checker 模型校验可以判断地平线BPU模块是否支持算子推理,这是模型上板的第一步。上图为校验结果,显示出算子的运行设备。
第二步是数据准备,从训练或测试集中选取50-100张图像作为校准图像。
第三步是使用makertbin工具把ONNX模型转化为半段推理的二进制bin文件。
config_file="./mobilenet_config.yaml"
model_type="caffe"
# build model
hb_mapper makertbin --config ${config_file} \
--model-type ${model_type}
model_type为ONNX、Caffe等可选模型,config_file中包含了模型转化的各种参数,包括模型输入大小,节点名称,输入类型(此处非常重要,因为板端通常接入MIPI相机等,NV12的图像数据结构与训练使用的NCHW差别较大,大部分MIPI相机输入都需要增加转化节点),模型输出layout以及推理优先级(速度优先还是带宽优先)等,下图为转化推理文件的输出结果,模型的精度保持达到97.76%。
图4 量化模型输出图
- 三、推理测试
使用天公开物工具链,调用上板测试模块:
1.构建应用:
# parallel_process_num的设置,参考您的cpu配置,如果不设置这个环境变量,默认为单进程
cd samples/04_detection/01_yolov2/runtime_arm
sh 01_build.sh
2.数据预处理
# parallel_process_num的设置,参考您的cpu配置,如果不设置这个环境变量,默认为单进程
export PARALLEL_PROCESS_NUM=${parallel_process_num}
sh 02_preprocess.sh
处理好的图像将会用于后续的评测eval。
3.将构建好的应用传到开发板
sh 03_scp_to_board.sh ${board_ip}
执行这个命令,会将构建好的应用,通过scp,传输到开发板的 /userdata/samples/mobilenet 目录下。
若要执行单张图片的infer, 则可通过下面的代码操作远程登录开发板进行执行:
ssh root@${board_ip}
cd /userdata/samples/yolov2
sh dev_board_01_infer.sh
4.执行评测
sh 04_eval.sh ${board_ip}
该脚本会将图片传输至板上进行运行和评测, 此过程将持续很久.
5.执行性能测试
sh 05_perf.sh ${board_ip}
同时该操作也可从开发板上单独完成, 则可通过下面的代码操作远程登录开发板进行执行:
ssh root@${board_ip}
cd /userdata/samples/yolov2
sh dev_board_03_perf.sh
图5 速度验证与精度验证图
在测试集上获取70%左右的准确率,训练精度约为72.3%,保留了较高的精度,可以满足板端推理需求。
- 四、总结
商汤OpenMMLab可以快速有效地构建深度学习模型,地平线的天公开物开发板可以快速进行嵌入式开发部署,而且速度与精度都能得到有效的保证。商汤和地平线的强强联合,进一步扩大了地平线芯片的算法生态,同时助力OpenMMLab用户更好地进行多样化的AI部署。