官方教程:旭日x3官方文档
Yolov5部署全流程:部署视频
配套教程:视频配套教程
在旭日x3部署yolov5(包括其他深度学习模型)需要用到旭日X3的算法工具链,模型需要从.pt格式转换为onnx格式,在转换为bpu格式。需要用到的数据集分辨率为642*642
转换onnx模型步骤
注意:由于地平线算法工具链的onnx支持版本是1.6和1.7,所以需要安装1.6或者1.7的onnx
1 将yolo.py代码中中的x[i] = x[i].view(bs, self.na, self.no, ny, nx).permute(0, 1, 3, 4, 2).contiguous()替换为
x[i] = x[i].permute(0, 2, 3, 1).contiguous()
我的代码在62行,这行代码的作用是将张量 x 的维度进行调整,具体来说就是将维度的排列顺序从 (0, 1, 2, 3) 改变为 (0, 2, 3, 1)。
其中 permute() 方法接受一个元组作为参数,该元组表示需要重新排列的维度。例如在这个例子中,(0, 2, 3, 1) 表示将原本的第二维(1)移动到第四维,原本的第三维(2)移动到第二维,原本的第四维(3)移动到第三维,同时将原本的第一维(0)保持不变。这个调整的过程不会改变数据的内容,只是改变了它们在张量中的排列方式。
在调用 permute() 方法之后,使用了 contiguous() 方法,该方法可以使 tensor 中的数据变得连续,即它们被存储在内存中的地址是连续的。这种操作可以提高后续计算的效率,尤其是在计算过程中需要访问大量的内存时。
2 BPU的工具链不支持onnx的所有版本的算子,当前BPU支持onnx的opset版本为10和11。
方式一:python .\export.py --weights .\models\yolov5s.pt --include onnx --opset 11
方式二:
修改export.py第48行为:
torch.onnx.export(model, img, f, verbose=False, opset_version=12, input_names=['images'],
output_names=['classes', 'boxes'] if y is None else ['output'])
- 输入以下代码进行模型转换:
python export_x3.py --weights yolov5s.pt --img-size 672 --batch-size 1
在linux上搭建bpu模型转换环境,按官方教程搭建即可
搭建好后
- 获取工程文件
工程文件名为:horizon_model_convert_sample
输入以下代码获得工程文件:
wget -c ftp://xj3ftp@vrftp.horizon.ai/model_convert_sample/horizon_model_convert_sample.tar.gz --ftp-password=xj3ftp@123$%
-
将自己的数据集放入以下目录文件夹下
-
将自己训练的模型放入以下目录文件夹下
调用rtsp流
几种常用的启动方式
解码默认流并开启HDMI显示
sudo ./decode_rtsp_stream.py
解码默认流并关闭HDMI显示
sudo ./decode_rtsp_stream.py -d 0
解码单路rtsp流
sudo ./decode_rtsp_stream.py -u "rtsp://x.x.x.x/xxx"
解码多路rtsp流
sudo ./decode_rtsp_stream.py -u "rtsp://x.x.x.x/xxx;rtsp://x.x.x.x/xxx"
解码默认流并使能AI推理
sudo ./decode_rtsp_stream.py -a