
2. docker环境搭建(linux)
需要下载天工开物的开发包和镜像包
打开filezilla
连接主机:vrftp.horizon.ai
下载对应开发包,要注意版本匹配。
使用路由器网络可能会导致连接不上,建议使用手机热点。
我这里下载的是1.10.7版本,对应镜像包版本为1.13.5

下载镜像包
镜像包可以选择从filezilla中下载,但是速度比较慢
下载完毕之后查看docker镜像列表 sudo docker image ls
复制对应ID

命令需要修改自己对应的路径和 image ID
进入容器中
在容器中查询显卡驱动和cuda版本,查询不到的需要安装NVIDIA-docker以及检查显卡驱动
cuda version 为11.6也是没有问题的

如果电脑关机重启了,需要重新启动容器再进入容器
退出容器通过ctrlP+ctrlQ
如果要重新建立容器,可以删除原有容器再重新建立
3. 模型检查
模型转换通过HB Mapper工具
本文所转化的模型为 mediapipe 中人体姿态检测的 tflite 模型
这个跨平台框架适用于桌面/服务器、Android、iOS和嵌入式设备,如Raspberry Pi和Jetson Nano。
但是在X3派上使用mediapipe只能在cpu上跑,因此我们还需将其中的人体姿态检测模型运行在bpu上。
模型名称为 pose_landmark_lite.tflite,当然你也可以使用自己训练的模型然后进行模型检查,查询不支持的op再进行修改。
输入和输出均为 tensor
下面是在mediapipe中的部分图结构,模型输出后的tensor还需进一步处理变成我们所需要的人体33个关键点的坐标信息。

3.1 tflite模型转onnx模型
使用tf2onnx工具
用vscode打开,在终端下运行
这里必须手动设置opset版本,ai工具链支持的opset版本为10、11
3.2 模型检查
hb_mapperchecker的命令行参数:
--proto Caffe模型的prototxt文件。
--model Caffe或ONNX浮点模型文件。
--help 显示帮助信息并退出。
模型检查
注意文件路径,注意\后不能加空格
报错1:opset版本过高报错

报错2:cuda版本错误
在docker容器内运行命令nvidia-smi没有输出
在docker容器内 torch.cuda.is_available() 输出为False
在ubuntu中已安装显卡驱动,cuda版本为11,容器内pytorch所需要的cuda版本为10
原因:没有安装NVIDIA-docker,在docker容器内不能使用gpu
解决:安装NVIDIA-docker,并删除原horizon容器,重新建立可以使用gpu的容器

3.3 不支持的算子
报错:ERROR Pad: only support h and w dimension padding


原因:BPU的Pad只支持H和W维度的转换
对op进行修改
这是模型中报错的pad op
pad将input的shape 1*256*256*3转为1*258*258*3

因此我们需要将的input_1的[1,256,256,3]变成[1,3,256,256]再进行pad

查询需要修改的pad
结合hb_mapperchecker的输出,以及pad前后shape的变化,可以找到需要修改的op

我的模型中7个pad仅需修改第一个
删除报错的op
shape转换用perm参数实现
模型保存并检查
将优化过的onnx模型重新进行模型检查,无报错。

