赞
踩
我的pytorch之前已配置了,参照链接:
查看环境conda env list
激活环境 conda activate yolov5_py3.10
安装onnx:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple onnx
安装yolov5需要的包:pip install -i https://pypi.tuna.tsinghua.edu.cn/simple matplotlib>=3.2.2 numpy>=1.18.5 opencv-python>=4.1.1 Pillow>=7.1.2 PyYAML>=5.3.1 requests>=2.23.0 scipy>=1.4.1 tqdm>=4.64.0 tensorboard>=2.4.1 pandas>=1.1.4 seaborn>=0.11.0 ipython psutil thop>=0.1.1
下载百度云中提供的文件提取码0a09,
获取yolov5源码版本V6.2
yolov5-master.zip
。zidane.jpg
放到yolov5-master
文件夹中。yolov5s.pt
放到yolov5-master/models
文件夹中。yolov5-master
文件夹,输入python .\detect.py --weights .\models\yolov5s.pt --source zidane.jpg
,代码会输出检测结果保存路径,比如我的就是Results saved to runs\detect\exp9
,检测结果如下所示python .\export.py --weights .\models\yolov5s.pt --include onnx --opset 11
输出信息如下:
转换后的模型文件在models/下
下载安装包进行安装
1、管理员模式打开cmd ,docker pull 获取部署所需要的CentOS Docker镜像
docker pull openexplorer/ai_toolchain_centos_7:v1.13.6
安装成功之后,即可在docker中看到我们成功安装的镜像:
2、将百度下载文件horizon_xj3_open_explorer_v2.2.3_20220617.tar解压
3、启动docker:
docker run -it --rm
-v "J:\深度学习\OpenExplorer\horizon_xj3_open_explorer_v2.2.3_20220617":/open_explorer
-v "J:\深度学习\OpenExplorer\dataset":/data/horizon_x3/data
-v "J:\深度学习\Codes":/data/horizon_x3/codes
openexplorer/ai_toolchain_centos_7:v1.13.6
至此已经通过dockers镜像进入了完整的开发工具链环境, hb_mapper --help
命令验证可看到下面信息:
1、创建bpucondes文件夹
将前面转好的yolov5s.onnx
放进这个文件夹里。
2、模型检查
模型检测的目的是检测有没有不支持的算子,输入指令hb_mapper checker --model-type onnx --march bernoulli2 --model yolov5s.onnx
,开始检查模型,显示如下内容表示模型检查通过
3、准备校准数据
核对下代码中src_root、dst_root路径和img = imequalresize(img, (640, 640))输入图像大小
- import os
- import cv2
- import numpy as np
-
- src_root = '/open_explorer/ddk/samples/ai_toolchain/horizon_model_convert_sample/01_common/calibration_data/coco'
- cal_img_num = 100 # 想要的图像个数
- dst_root = '/data/horizon_x3/codes/yolov5/bpucodes/calibration_data'
-
-
- ## 1. 从原始图像文件夹中获取100个图像作为校准数据
- num_count = 0
- img_names = []
- for src_name in sorted(os.listdir(src_root)):
- if num_count > cal_img_num:
- break
- img_names.append(src_name)
- num_count += 1
-
- # 检查目标文件夹是否存在,如果不存在就创建
- if not os.path.exists(dst_root):
- os.system('mkdir {0}'.format(dst_root))
-
- ## 2 为每个图像转换
- # 参考了OE中/open_explorer/ddk/samples/ai_toolchain/horizon_model_convert_sample/01_common/python/data/下的相关代码
- # 转换代码写的很棒,很智能,考虑它并不是官方python包,所以我打算换一种写法
-
- ## 2.1 定义图像缩放函数,返回为np.float32
- # 图像缩放为目标尺寸(W, H)
- # 值得注意的是,缩放时候,长宽等比例缩放,空白的区域填充颜色为pad_value, 默认127
- def imequalresize(img, target_size, pad_value=127.):
- target_w, target_h = target_size
- image_h, image_w = img.shape[:2]
- img_channel = 3 if len(img.shape) > 2 else 1
-
- # 确定缩放尺度,确定最终目标尺寸
- scale = min(target_w * 1.0 / image_w, target_h * 1.0 / image_h)
- new_h, new_w = int(scale * image_h), int(scale * image_w)
-
- resize_image = cv2.resize(img, (new_w, new_h))
-
- # 准备待返回图像
- pad_image = np.full(shape=[target_h, target_w, img_channel], fill_value=pad_value)
-
- # 将图像resize_image放置在pad_image的中间
- dw, dh = (target_w - new_w) // 2, (target_h - new_h) // 2
- pad_image[dh:new_h + dh, dw:new_w + dw, :] = resize_image
-
- return pad_image
-
- ## 2.2 开始转换
- for each_imgname in img_names:
- img_path = os.path.join(src_root, each_imgname)
-
- img = cv2.imread(img_path) # BRG, HWC
- img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB) # RGB, HWC
- img = imequalresize(img, (640, 640))
- img = np.transpose(img, (2, 0, 1)) # RGB, CHW
-
- # 将图像保存到目标文件夹下
- dst_path = os.path.join(dst_root, each_imgname + '.rgbchw')
- print("write:{0}, shape: {1}".format(dst_path, img.shape))
- img.astype(np.uint8).tofile(dst_path)
-
- # data = np.fromfile(dst_path)
- # print(data.shape)
- # exit()
-
- print('finish')
-
执行python3 ./prepare_calibration_data.py 在calibration_data目录生成校准数据
4、转换BPU模型
转换模型需要yaml参数文件:
- model_parameters:
- onnx_model: 'yolov5s.onnx'
- output_model_file_prefix: 'yolov5s'
- march: 'bernoulli2'
- input_parameters:
- input_type_train: 'rgb'
- input_layout_train: 'NCHW'
- input_type_rt: 'nv12'
- norm_type: 'data_scale'
- scale_value: 0.003921568627451
- input_layout_rt: 'NHWC'
- calibration_parameters:
- cal_data_dir: './calibration_data'
- calibration_type: 'max'
- max_percentile: 0.9999
- compiler_parameters:
- compile_mode: 'latency'
- optimize_level: 'O3'
- debug: False
- core_num: 2
转换我们的模型输入命令:hb_mapper makertbin --config convert_yolov5s.yaml --model-type onnx
转换成功后,得到model_output/yolov5s.bin
,这个文件拿出来,拷贝到旭日X3派上使用,它也是我们上板运行所需要的模型文件。
拷贝到旭日X3派开发板中,其中yolov5s.bin
就是我们转换后的模型,coco_classes.names
仅用在画框的时候,如果用自己的数据集的话,参考coco_classes.names
创建个新的名字文件即可
1、 安装opencv库:sudo apt-get install libopencv-dev cython
2、编译后处理代码:python3 setup.py build_ext --inplace
得到lib/pyyolotools.cpython-38-aarch64-linux-gnu.so
文件
3、运行推理命令:sudo python3 inference_model_bpu.py
,推理结果保存为res.png
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。