这篇文章主要是来和大家讲讲我们做的过程遇到的问题以及如何解决的。

开始做挑战活动的时候我们的想法是分为两步,一是完成模型选择与训练,二是完成模型转换。但当实际做起来的时候才发现,远不止如此...

首先选择了SSD模型,SSDSingle Shot MultiBox Detector)是一种常用的目标检测算法,它与Yolo同属于one-stage方法,其主要思路是均匀地在图片的不同位置进行密集抽样,抽样时可以采用不同尺度和长宽比,利用CNN提取特征后直接进行分类与回归,整个过程只需要一步,其运行速度很快。

首先我们在这里使用的是Pytorch框架下的SSD_300_VGG16版本,源代码链接如下:https://github.com/amdegroot/ssd.pytorch

解压之后文件夹有以下内容:

由于SSD目前只支持COCOVOC数据集,经过考虑,本次我们自制VOC2007数据集,即数据集中需要Annotations(文件格式为.xml,即对应图像的基本信息)、ImageSets(文件格式为.txt,即各种文件名列表)、JPEGImages(文件格式为.jpg,即原始图片)。我们使用经典的图形图像注释工具Labelimg对我们自制的数据集进行标注,生成VOC标准数据集,添加路径进行训练。

具体训练次数等参数均由自己设置,我们本次设置训练次数为500次,训练完毕后会在指定目录生成模型权重(.pth格式)文件。

对已生成的pth文件,使用测试集图片,验证其有效性。

完成模型训练后会生成一个pth文件,需要先将pth文件转换成onnx文件,再将其转换成bin文件才能将训练好的模型部署在旭日X3派上。在进行上述文件转换时由于本人水平不够,失败了很多次。首先,在使用地平线提供的AI工具链docker时,按照视觉巡线教程,无法正常启动,其原因在于没有加载下载好的docker镜像

我们需要使用下面的命令进行加载

sudo docker load -i docker_openexplorer_centos_7_xj3_v2.2.3a.tar.gz
复制

加载完成后可以使用以下命令查看

sudo docker image ls
复制

这样就是加载成功了

完成加载后就可以正常使用AI工具链进行文件转换了。

在进行AI工具链转换时主要会用到下面4个sh文件

01_check.sh 该文件是用来检查生成的onnx模型。至于为什么要检查,官方回答是验证模型中所使用的算子需要符合地平线平台的算子约束,意思就是onnx模型中不是所有的函数都被地平线平台支持,最好能使用地平线平台支持的。运行该文件(记得修改文件中的路径,改成自己onnx文件的路径)会产生如下图所示的结果,显示BPU好像是可以得到加速(有点忘了不太确定)。

02_preprocess.sh 该文件是用来生成校准数据,该数据可以在下一步模型编译进行校准使用。可以使用训练时的图片进行校准,没有特殊要求,数量需要100张左右。

运行完成后,在指定的路径下会产生如下图所示的文件。

03_build.sh 该文件的作用是将onnx文件转换为bin文件,如下图所示。

该文件还有一个yaml的配置文件,官方根据不同的算法都提供了说明,大家可以根据说明和自己的配置进行修改。

04_inference.sh 该文件可以用来检测生成的bin文件是否有效。但查看该文件中的内容并没有对bin文件进行操作,针对的是03_build.sh中产生的两个onnx文件,不是很能理解,也希望有人可以帮忙解答一下。

由于我们使用的ssd模型不是ssd_caffe模型没有办法利用AI工具链中现成的转换(也尝试过硬转,但都会报错失败/(ㄒoㄒ)/~~),于是通过查资料通过其他方法终于将onnx文件转换为bin文件。本以为将该bin文件部署到小车中之后,修改一下路径,重新编译一下就OK了,结果还是想的太简单...

完成bin文件生成后,需要将play_football.cpp源文件中的yolo5解析模型修改成自己使用的,而且还不能确定我们之前生成的bin文件是否能在板端运行,再加上时间问题就只好先停下了。

我们成功复现了源代码的识别足球,以及带球入门,视频链接如下(由于地面不平加上足球不太光滑动起来很费劲,所以带球入门的时候小车出现了卡顿以及打滑)

https://www.bilibili.com/video/BV1Pe411c7LN/?vd_source=edf1e799ccded0c8cca054ff9752917f