0、搭建开发环境
当前的测试根据一下的步骤并修改源码是可以实现yolov8的板端运行,如果不想再搭建环境和测试代码bug上浪费更多的时间可以直接获取本人的测试虚拟机,所有的测试代码、虚拟环境和板端测试工程以全部打包到了虚拟机,需要的可以通过网盘获取:链接:https://pan.baidu.com/s/1rg5EopPmctB-0kQAG7fm0Q 提取码:98k9
yolov8的环境搭建和测试
获取yolov8的工程:GitHub - THU-MIG/yolov10: YOLOv10: Real-Time End-to-End Object Detection
搭建环境:
cd /home/kkx3/wyj/yolov10/
git clone https://github.com/THU-MIG/yolov10.git
conda create -n yolov10 python=3.9
conda activate yolov10
cd yolov10
pip install -r requirements.txt
pip install -e . -i https://pypi.tuna.tsinghua.edu.cn/simple
测试
#测试
yolo predict model=model/yolov10s.pt
1、模型转换(onnx)
#转onnx模型
yolo export model=model/yolov10s.pt format=onnx opset=11 simplify
由于原模型的后处理部分存在在X3板端运行报错的问题需要修改源码,修改如下
#修改文件路径
/home/kkx3/wyj/yolov10/yolov10-main/ultralytics/nn/modules/head.py
修改如下(使用一下代码替换原forward函数)
def forward(self, x):one2one = self.forward_feat([xi.detach() for xi in x], self.one2one_cv2, self.one2one_cv3)if not self.export:one2many = super().forward(x)if not self.training:one2one = self.inference(one2one) if not self.export:return {"one2many": one2many, "one2one": one2one}else:return one2one.permute(0, 2, 1)#assert(self.max_det != -1)#boxes, scores, labels = ops.v10postprocess(one2one.permute(0, 2, 1), self.max_det, self.nc)#return boxes, scores, labels#return torch.cat([boxes, scores.unsqueeze(-1), labels.unsqueeze(-1).to(boxes.dtype)], dim=-1)else:return {"one2many": one2many, "one2one": one2one}
2、x3板端模型转换和搭建环境
将上述转换出来的onnx模型复制到X3的模型转换路径下
#模型复制的秒路径
/home/kkx3/wyj/x3/TransModel/horizon_model_convert_sample/01_common/model_zoo/mapper/detection/yolov10_onnx_optimized/yolov10s.onnx
搭建模型转换的环境和修改配置文件完成模型转换
cd /home/kkx3/wyj/x3/TransModel/horizon_model_convert_sample/04_detection/08_yolov10s/mapper
conda activate x3model
模型转换运行脚本01_check.sh
修改文件、配置模型路径
运行脚本
bash 01_check.sh
模型转换运行脚本02_preprocess.sh
修改文件、配置模型路径(当前无需修改)
运行脚本
bash 02_preprocess.sh
模型转换运行脚本03_build.sh
修改文件、配置模型路径
运行脚本
bash 03_build.sh
模型输出路径
/home/kkx3/wyj/x3/TransModel/horizon_model_convert_sample/04_detection/08_yolov10s/mapper/model_output/yolov10s_640x640_nv12.bin
将模型复制到板端就可以测试了
3、python版本测试
测试工程复制到板端
开始测试
cd /app/pydev_demo/09_yolov10_sample
./test_yolov10.py
测试结果
4、c++版本测试
测试工程复制到板端
开始测试
cd /app/cdev_demo/bpu_yolov10/src
make clean && make
cd /app/cdev_demo/bpu_yolov10/src/bin./sample -f ./yolov10s_640x640_nv12.bin -m 0
测试效果
yolov10在地平线旭日X3派上的测试视频