1.完成yolov5s模型的训练及推理验证。 2.完成onnx模型的转换的转换。 3.完成模型量化环境配置、模型验证、验证数据集准备及模型的量化转换。 4.完成转换后的模型在地平线RDK X3开发板上的部署和推理,静态图片推理和实时图像推理。 5.以上过程均需在实验报告中体现。 | |
| |
3.1下载yolov5 使用tag为v2.0的版本的yolov5提前进行模型的训练。下载链接:https://github.com/ultralytics/yolov5/blob/v2.0。可以直接下载zip压缩包,解压得到文件夹yolov5-2.0。 下载yolov5s.pt预训练模型,放入到weights文件夹下,下载链接:Release v2.0 · ultralytics/yolov5 · GitHub。 3.2 修改数据集配置文件 在data目录下创建一个test_data.yaml的数据集配置文件,其中train为训练集图片的路径,val为验证集图片的路径,nc为检测的类型数目,names为检测的类型的名称,如下图所示: 修改模型配置文件models/yolov5s.yaml,根据检测的类型将nc修改为2,对应mouse和screwdriver这两个类别; 3.3 训练模型(1)在正式开始训练之前,需要对train.py进行以下修改: 修改完成之后,打开anaconda 终端,运行训练命令如下,–device 0表示使用GPU: python train.py –img 640 –batch 1 –epochs 100 –data data/test_data.yaml –weights weights/yolov5s.pt –device 0 正常情况下会开始训练,训练100个epochs后结果如下: 训练结束后,在runs\exp0\weights文件夹下生成了最后一轮训练的模型last.pt和100轮中最好的模型best.pt,同时生成了训练结果的统计分析: 模型训练完成后,使用test数据集进行测试,将test文件夹放在inference文件夹下,使用训练出来的best.pt模型,置信度为0.7,执行如下命令: python detect.py –source ./inference/test –weights ./runs/exp0/weights/best.pt –conf 0.7 正常情况下会开始进行检测,自动读取test文件夹中的图片, 检测完成后,在test文件夹同级目录下生成output文件夹,用于存放结果,如下图: 具体测试结果: 图中的置信度有0.8以上,说明模型的训练效果不错,可以继续使用 3.4 onnx模型转换-依赖环境安装及文件修改模型训练测试完成后,需要将模型转换成onnx模型,用于下一步的模型转换,安装环境依赖: pip install onnx==1.7 修改导出版本:export.py文件第48行 修改输出节点维度信息:yolo.py文件29行 安装成功: 3.5 yolov5模型转onnx使用训练好的best.pt模型,img-size 设为672。命令如下, python export.py –weights ./runs/exp0/weights/best.pt –img-size 672 –batch-size 1 正常情况下,会在runs/exp0/weights文件夹下生成best.onnx模型。 不过实验过程中遇到错误: 报错如下: TorchScript export success, saved as ./runs/exp15/weights/best.torchscript.pt ONNX export failure: Descriptors cannot be created directly. If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0. If you cannot immediately regenerate your protos, some other possible workarounds are: 1. Downgrade the protobuf package to 3.20.x or lower. 2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower). 报错: 解决方法:卸载protobuf,并重新安装3.20版本的rotobuf。 3.6 模型量化环境配置首先安装Anaconda 配置环境: 在虚拟机的Linux系统中安装完成支持 Python 3.8.x 版本的 Anaconda3 环境 其中出现无法使用conda命令的报错(conda: command not found) 在尝试启动修改环境变量无果后,最后将整个虚拟机删除,并重新建一个磁盘空间50GB大小的虚拟机后成功可以安装对应的conda环境。 在指令中输入conda list,可以查看自己是否进入成功安装conda 成功安装Anaconda,实验继续 下面是环境配置的过程: 1.linux终端开发机中执行如下命令,获取模型转换资料包: wget -c ftp://xj3ftp@vrftp.horizon.ai/ai_toolchain/ai_toolchain.tar.gz –ftp-password=xj3ftp@123$% wget -c ftp://xj3ftp@vrftp.horizon.ai/model_convert_sample/yolov5s_v2.0.tar.gz –ftp-password=xj3ftp@123$% 2.创建模型转换环境: conda create -n horizon_bpu python=3.8 -y 3.进入conda模型转换环境: conda activate horizon_bpu 4.解压模型转换环境和示例模型安装包并进行相关依赖的安装: tar -xvf yolov5s_v2.0.tar.gz tar -xvf ai_toolchain.tar.gz pip install ai_toolchain/h* -i https://mirrors.aliyun.com/pypi/simple pip install pycocotools -i Simple Index 第三条指令执行时出现了如图的错误: 不能构建pycocotools,其实是没有安装GCC:前面还有错误信息error: command ‘gcc’ failed: No such file or directory表明系统可能没有安装GCC(GNU编译器套件)。可以使用系统的包管理器来安装它。 sudo apt-get install build-essential 在顺利完成安装后,可以键入 hb_mapper –help 命令验证是否可以正常得到帮助信息,若打印如下信息,说明环境已安装完成 3.7 模型量化转换开发环境准备完成,使用命令:conda activate horizon_bpu 进入开发机模型转换环境。 将转换后的best.onnx模型放到yolov5s_v2.0/04_detection/03_yolov5s/mapper文件夹下。 然后按以下步骤进行模型验证 进入浮点模型转换示例yolov5s模型目录: cd yolov5s_v2.0/04_detection/03_yolov5s/mapper 修改01_check_X3.sh脚本: 将模型修改为自己转换好的 best.onnx模型,如下图: 确认模型结构及算子是否支持,并提供每个算子执行硬件的分配情况(BPU/CPU),RDK X3 执行脚本:01_check_X3.sh ; bash 01_check_X3.sh 命令执行完毕后,出现以下日志,说明模型校验成功: 验证数据准备模型检查通过后,根据以下步骤进行模型转换。 修改校准数据,在01_common/calibtation_data文件夹下新建文件夹my_image,用于存放自己的校准数据,修改02_preprocess.sh 中的–src_dir和–dst_dir路径,src_dir所指路径用于存放训练数据中取50张标准数据图片,dst_dir所指路径用于存放转换后的.rgb文件; 进行校准数据预处理,修改02_preprocess.sh脚本文件: 执行脚本:02_preprocess.sh,进行校准数据预处理: bash 02_preprocess.sh 命令执行完毕后,出现以下日志并无任何报错,说明数据预处理成功: 同时,在mapper文件夹下生成my_calibration_data_rgb_f32文件夹,校准数据转换成.rgb格式; 模型转换1.将yolov5s_config_X3.yaml中model_parameters下的onnx_model参数修改为自己的模型best.onnx,如下图: 2.将yolov5s_config_X3.yaml中calibration_parameters下的cal_data_dir参数修改为自己的校准数据预处理之后的文件夹calibration_data_rgb_f32,如下图: #转换时所需的配置文件 yolov5s_config_X3.yaml,已存放在03_build_X3.sh脚本同级文件夹下,然后RDK X3 执行脚本:03_build_X3.sh; bash 03_build_X3.sh 命令执行完毕后,若出现以下日志并无任何报错,说明模型转换成功: 3.8 模型部署注意事项:模型上板运行前,将 my_yolov5s_672x672_nv12.bin 定点模型拷贝至开发板的/opt/hobot/model/x3/basic/ 目录下 放一张自己的图像数据比如test103.jpg到07_yolov5_sample文件夹下用于推理,并修改test_yolov5.py文件,修改使用的模型为my_yolov5s_672x672_nv12.bin,读取的图片为test102.jpg: 修改postprocess.py文件,修改检测的类型数量num_classes为2,修改reshape参数,其中reshape([1, 84, 84, 3, 7])最后一个参数7是num_classes + 5得出,如下图: 修改coco_classes.names文件,如下图: 调用以下命令运行: cd /app/pydev_demo/07_yolov5_sample/ sudo python3 ./test_yolov5.py 命令执行完毕后,若出现以下日志并无任何报错,说明模型部署成功: 得到result识别图像如下: |