社区首页
技术讨论创新帖
全部新帖
资料区
社区活动
联系管理员
★ 社区积分制度
★ 新手必读
★ 申请版主★
请
登录
后使用快捷导航
没有帐号?
注册
首页
|
电子技术
|
嵌入式
模拟电子
单片机
电源管理
传感器
半导体
电子应用
|
工业控制
物联网
汽车电子
网络通信
医疗电子
手机便携
测试测量
安防电子
家用电子
机器人
新能源
电子头条
|
社区
|
论坛
测评
博客
大学堂
|
下载
|
下载中心
电路图
精品文集
电路图
|
参考设计
|
Datasheet
|
活动
|
直播
datasheet
datasheet
文章
搜索
登录
注册
中文
En
论坛
切换旧版
电子工程世界-论坛
»
论坛
›
电子技术交流
›
嵌入式系统
›
Linux开发
›
爱芯元智AX650N部署yolov5s 自定义模型
返回列表
发新帖
回复
阅
851
|
回
0
wuboy
当前离线
一粒金砂(中级)
最后登录
2025-1-20
在线时间
8 小时
威望
96分
芯积分
143分
(兑换)
E金币
0枚
(兑换)
(兑换)
好友
0
wuboy
47
帖子
5
TA的资源
一粒金砂(中级)
+ 好友
私信
楼主
发表于2023-11-16 19:43
只看该作者
爱芯元智AX650N部署yolov5s 自定义模型
[复制链接]
> 本博客将向你展示零基础一步步的部署好自己的yolov5s模型(博主展示的是安全帽模型),利用yolov5 官方的代码工具导出onnx模型,并通过onnxsim自带的工具精简网络结构,导出子图,为了Pulsar2 工具进行处理模型做准备。 ## 获得自定义训练得到的yolov5s onnx模型 ### 准备自定义数据集(博主用的是VOC数据集) - `数据集目录结构`如下: ``` └─VOC2028: 自定义数据集 ├─Annotations 存放的是数据集标签文件,xml格式 ├─ImageSets 数据集的划分文件 │└─Main ├─JPEGImages 存放的是数据集图片 ``` - `分割数据集` 在split_train_val.py文件路径下执行`python3 split_train_val.py`会得到一下目录结构: ``` └─VOC2028: 自定义数据集 ├─Annotations 存放的是数据集标签文件,xml格式 ├─ImageSets 数据集的划分文件 │└─Main test.txt └─test.txt └─train.txt └─val.txt ├─JPEGImages 存放的是数据集图片 ├─split_train_val.py 分割数据集的py文件 ``` `split_train_val.py文件代码如下`: ``` # -*- coding: utf-8 -*- """ Author:dragonforward 简介:分训练集、验证集和测试集,按照 8:1:1 的比例来分,训练集8,验证集1,测试集1 """ import os import random import argparse parser = argparse.ArgumentParser() # xml文件的地址,根据自己的数据进行修改 xml一般存放在Annotations下 parser.add_argument('--xml_path', default='Annotations/', type=str, help='input xml label path') # 数据集的划分,地址选择自己数据下的ImageSets/Main parser.add_argument('--txt_path', default='ImageSets/Main/', type=str, help='output txt label path') opt = parser.parse_args() train_percent = 0.8# 训练集所占比例 val_percent = 0.1 # 验证集所占比例 test_persent = 0.1 # 测试集所占比例 xmlfilepath = opt.xml_path txtsavepath = opt.txt_path total_xml = os.listdir(xmlfilepath) if not os.path.exists(txtsavepath): os.makedirs(txtsavepath) num = len(total_xml) list = list(range(num)) t_train = int(num * train_percent) t_val = int(num * val_percent) train = random.sample(list, t_train) num1 = len(train) for i in range(num1): list.remove(train[i]) val_test = [i for i in list if not i in train] val = random.sample(val_test, t_val) num2 = len(val) for i in range(num2): list.remove(val[i]) file_train = open(txtsavepath + '/train.txt', 'w') file_val = open(txtsavepath + '/val.txt', 'w') file_test = open(txtsavepath + '/test.txt', 'w') for i in train: name = total_xml[i][:-4] + '\n' file_train.write(name) for i in val: name = total_xml[i][:-4] + '\n' file_val.write(name) for i in list: name = total_xml[i][:-4] + '\n' file_test.write(name) file_train.close() file_val.close() file_test.close() ``` - `voc转label得到label文件` 目录结构如下: ``` └─VOC2028: 自定义数据集 ├─Annotations 存放的是数据集标签文件,xml格式 ├─ImageSets 数据集的划分文件 │└─Main ├─JPEGImages 存放的是数据集图片 └─labels yolov5将此文件夹当作训练的标注文件夹 └─voc_label.py ``` `voc_label.py文件代码如下`: ``` # -*- coding: utf-8 -*- import xml.etree.ElementTree as ET import os sets = ['train', 'val', 'test']# 如果你的Main文件夹没有test.txt,就删掉'test' classes = ["hat", "people"] # 改成自己的类别,VOC数据集有以下20类别 # classes = ["brickwork", "coil","rebar"] # 改成自己的类别,VOC数据集有以下20类别 # classes = ["aeroplane", 'bicycle', 'bird', 'boat', 'bottle', 'bus', 'car', 'cat', 'chair', 'cow', 'diningtable', 'dog', # 'horse', 'motorbike', 'person', 'pottedplant', 'sheep', 'sofa', 'train', 'tvmonitor']# class names # abs_path = os.getcwd() /root/yolov5/data/voc_label.py abs_path = '/root/yolov5/data/' def convert(size, box): dw = 1. / (size[0]) dh = 1. / (size[1]) x = (box[0] + box[1]) / 2.0 - 1 y = (box[2] + box[3]) / 2.0 - 1 w = box[1] - box[0] h = box[3] - box[2] x = x * dw w = w * dw y = y * dh h = h * dh return x, y, w, h def convert_annotation(image_id): in_file = open(abs_path + '/VOC2028/Annotations/%s.xml' % (image_id), encoding='UTF-8') out_file = open(abs_path + '/VOC2028/labels/%s.txt' % (image_id), 'w') tree = ET.parse(in_file) root = tree.getroot() size = root.find('size') w = int(size.find('width').text) h = int(size.find('height').text) for obj in root.iter('object'): difficult = obj.find('difficult').text # difficult = obj.find('Difficult').text cls = obj.find('name').text if cls not in classes or int(difficult) == 1: continue cls_id = classes.index(cls) xmlbox = obj.find('bndbox') b = (float(xmlbox.find('xmin').text), float(xmlbox.find('xmax').text), float(xmlbox.find('ymin').text), float(xmlbox.find('ymax').text)) b1, b2, b3, b4 = b # 标注越界修正 if b2 > w: b2 = w if b4 > h: b4 = h b = (b1, b2, b3, b4) bb = convert((w, h), b) out_file.write(str(cls_id) + " " + " ".join([str(a) for a in bb]) + '\n') for image_set in sets: if not os.path.exists(abs_path + '/VOC2028/labels/'): os.makedirs(abs_path + '/VOC2028/labels/') image_ids = open(abs_path + '/VOC2028/ImageSets/Main/%s.txt' % (image_set)).read().strip().split() list_file = open(abs_path + '/VOC2028/%s.txt' % (image_set), 'w') for image_id in image_ids: list_file.write(abs_path + '/VOC2028/JPEGImages/%s.jpg\n' % (image_id))# 要么自己补全路径,只写一半可能会报错 convert_annotation(image_id) list_file.close() ``` ![picture 1](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182450101-520375331.png) ### 训练模型 - 配置环境 ``` git clone https://github.com/ultralytics/yolov5 cd yolov5 pip install -r requirements.txt pip install onnx ``` - 下载预训练权重(博主尝试了v7.0的和v6.0的pt都可以) ``` https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5s.pt ``` ![picture 0](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182450592-865793378.png) - 训练(博主使用的是学校的集群进行训练) ``` python3 train.py --weights weights/yolov5s.pt --cfg models/yolov5s.yaml --data data/safthat.yaml --epochs 150 --batch-size 16 --multi-scale --device 0 ``` ![picture 2](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182451149-439909649.png) ``` python3 detect.py --source /root/yolov5/data/images/000000.jpg --weights /root/yolov5/runs/train/exp13/weights/best.pt --conf-thres 0.25 ``` ![picture 3](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182451784-1715265443.png) - 导出onnx模型,并通过onnxsim自带的工具精简网络结构,导出子图 ``` python3 export.py --weightsyolov5s_hat.pt --include onnx pip install onnx-simplifier python3 -m onnxsim yolov5s_hat.onnx yolov5s_hat_sub.onnx ``` ![picture 4](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182452270-1336271791.png) 模型查看通过网址输入netron.app查看三个输出: ![picture 8](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182452720-1788864856.png) 查看官方给的yolov5s.json文件: ``` { "model_type": "ONNX", "npu_mode": "NPU1", "quant": { "input_configs": [ { "tensor_name": "images", "calibration_dataset": "./dataset/calibration_dataset.tar.gz", "calibration_size": 4, "calibration_mean": [0, 0, 0], "calibration_std": [255.0, 255.0, 255.0] } ], "calibration_method": "MinMax", "precision_analysis": false }, "input_processors": [ { "tensor_name": "images", "tensor_format": "BGR", "src_format": "BGR", "src_dtype": "U8", "src_layout": "NHWC" } ], "output_processors": [ { "tensor_name": "326", "dst_perm": [0, 2, 3, 1] }, { "tensor_name": "370", "dst_perm": [0, 2, 3, 1] }, { "tensor_name": "414", "dst_perm": [0, 2, 3, 1] } ], "compiler": { "check": 0 } } ``` output_processors给的326,370,414 根据[秋水大佬博客](https://zhuanlan.zhihu.com/p/569083585)的导出子图文件修改得到适应pulsar2工具的onnx文件: ``` import onnx input_path = "yolov5s_hat-sim.onnx" output_path = "yolov5s_hat_sub.onnx" input_names = ["images"] output_names = ["326","370","414"] onnx.utils.extract_model(input_path, output_path, input_names, output_names) ``` 问题记录: (1)导出子图很关键 由于之前对深度学习知识了解很少,才知道子图,如果执行使用yolov5s_hat_sub.onnx,在Pulsar2工具中进行量化的话,会生成axmodel但是是无法执行了,通过`o0圏圏蟲0o`大佬给的模型对比网络结构和秋水大佬的ax620a部署yolov5博客才明白自己问题出现在哪里 如果你没处理导出子图得到的图会是这样: ![picture 5](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182453144-516336166.png) 正确量化后的yolov5s图: 官方的yolov5s模型: ![picture 6](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182453433-737702152.png) 博主的正确的axmodel: ![picture 7](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182453693-1387288305.png) 其中数字不同255和21的原因(秋水大佬博客有讲): 该数字为(模型训练的类别+5)*3,博主类别为2类,所以就是21 ## 模型转化(关键) ### 安装docker环境(已安装过的可以跳过) ``` 安装docker依赖的基础软件 sudo apt-get update sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-properties-common 添加官方来源 curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" 安装 docker sudo apt-get update sudo apt-get install docker-ce docker-ce-cli containerd.io ``` ### pulsar2工具模型转化以及仿真运行 - 下载pulsar2工具(博主使用的是1.9) [谷歌网盘链接:](https://drive.google.com/file/d/1-NW7ExBXj5-nTha40iwYshjNJb74Zfer/view?usp=drive_link) [quick_start_example 文件夹](https://github.com/AXERA-TECH/pulsar2-docs/releases/download/v1.9/quick_start_example.zip) 其中文件如下: ``` configdatasetmodeloutputpulsar2-run-helper ``` ./dataset/calibration_data.tar:添加了数据集的四张照片 config文件: ``` { "model_type": "ONNX", "npu_mode": "NPU1", "quant": { "input_configs": [ { "tensor_name": "images", "calibration_dataset": "./dataset/calibration_data.tar", "calibration_size": 4, "calibration_mean": [0, 0, 0], "calibration_std": [255.0, 255.0, 255.0] } ], "calibration_method": "MinMax", "precision_analysis": false }, "input_processors": [ { "tensor_name": "images", "tensor_format": "BGR", "src_format": "BGR", "src_dtype": "U8", "src_layout": "NHWC" } ], "output_processors": [ { "tensor_name": "326", "dst_perm": [0, 2, 3, 1] }, { "tensor_name": "370", "dst_perm": [0, 2, 3, 1] }, { "tensor_name": "414", "dst_perm": [0, 2, 3, 1] } ], "compiler": { "check": 0 } } ``` ``` (博主是直接就是root用户,如果不是root用户记得加sudo) root@LAPTOP-U638FQQS:~# docker load -i ax_pulsar2_1.9_enc.tar.gz root@LAPTOP-U638FQQS:~# docker images -a REPOSITORY TAG IMAGE ID CREATED SIZE hhb4tools/rv_debian_build 1.3 08f478d17c34 7 weeks ago 2.16GB pulsar2 1.9_enc 641ba18a8da3 2 months ago 3.46GB hhb4tools/hhb 2.4.5 58df969ae05a 3 months ago 8.16GB hhb4tools/rv_ub20_build 1.4 a65456ded4f0 6 months ago 5.11GB hhb4tools/march-user-static 1.0 d9efab34da5e 7 months ago 301MB riscv64/ubuntu 22.04 8b55084b9c02 11 months ago 61.6MB riscv64/ubuntu 21.04 d0b60ed75c22 21 months ago 60.3MB root@LAPTOP-U638FQQS:~#docker run -it --net host --rm -v $PWD:/data pulsar2:1.9_enc root@1657ec5355e2:/data# pulsar2 version version: 1.9 commit: c62d0b64 root@1657ec5355e2:/data# ``` 1. 编译执行 以 yolov5s_hat_sub.onnx 为例, 执行如下 pulsar2 build 命令编译生成 compiled.axmodel: ``` pulsar2 build --input model/yolov5s_hat_sub.onnx --output_dir output --config config/yolov5s_config.json ``` 博主输出信息: ``` root@1657ec5355e2:/data# pulsar2 build --input model/yolov5s_hat_sub.onnx --output_dir output --config config/yolov5s_config.json 2023-11-16 17:49:21.238 | WARNING| yamain.command.build:fill_default:320 - ignore images csc config because of src_format is AutoColorSpace or src_format and tensor_format are the same Building onnx ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 2023-11-16 17:49:22.486 | INFO | yamain.command.build:build:444 - save optimized onnx to [output/frontend/optimized.onnx] 2023-11-16 17:49:22.489 | INFO | yamain.common.util:extract_archive:21 - extract [dataset/calibration_data.tar] to [output/quant/dataset/images]... Quant Config Table ┏━━━━━━━━┳━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━┳━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ Input┃ Shape ┃ Dataset Directory ┃ Data Format ┃ Tensor Format ┃ Mean ┃ Std ┃ ┡━━━━━━━━╇━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━╇━━━━━━━━━━━━━━━━━━━━━━━┩ │ images │ [1, 3, 640, 640] │ images │ Image │ BGR │ [0.0, 0.0, 0.0] │ [255.0, 255.0, 255.0] │ └────────┴──────────────────┴───────────────────┴─────────────┴───────────────┴─────────────────┴───────────────────────┘ Transformer optimize level: 0 4 File(s) Loaded. [17:49:24] AX LSTM Operation Format Pass Running ... Finished. [17:49:24] AX Set MixPrecision Pass Running ... Finished. [17:49:24] AX Refine Operation Config Pass Running ... Finished. [17:49:24] AX Reset Mul Config Pass Running ... Finished. [17:49:24] AX Tanh Operation Format Pass Running ... Finished. [17:49:24] AX Confused Op Refine Pass Running ... Finished. [17:49:24] AX Quantization Fusion Pass Running ... Finished. [17:49:24] AX Quantization Simplify Pass Running ... Finished. [17:49:24] AX Parameter Quantization Pass Running ... Finished. Calibration Progress(Phase 1): 100%|███████████████████████████████████████████████████████████████████████████████| 4/4 [00:01<00:00,2.16it/s] Finished. [17:49:26] AX Passive Parameter Quantization Running ...Finished. [17:49:26] AX Parameter Baking Pass Running ... Finished. [17:49:26] AX Refine Int Parameter Pass Running ... Finished. [17:49:26] AX Refine Weight Parameter Pass Running ... Finished. --------- Network Snapshot --------- Num of Op: [142] Num of Quantized Op: [142] Num of Variable: [267] Num of Quantized Var: [267] ------- Quantization Snapshot ------ Num of Quant Config: [430] BAKED: [60] OVERLAPPED: [168] ACTIVATED: [138] SOI: [4] PASSIVE_BAKED: [60] Network Quantization Finished. quant.axmodel export success: output/quant/quant_axmodel.onnx ===>export input/output data to folder: output/quant/debug/test_data_set_0 Building native ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 2023-11-16 17:49:28.704 | WARNING| yamain.command.load_model:pre_process:454 - preprocess tensor [images] 2023-11-16 17:49:28.704 | INFO | yamain.command.load_model:pre_process:456 - tensor: images, (1, 640, 640, 3), U8 2023-11-16 17:49:28.705 | INFO | yamain.command.load_model:pre_process:456 - op: op:pre_dequant_1, AxDequantizeLinear, {'const_inputs': {'x_zeropoint': array(0, dtype=int32), 'x_scale': array(1., dtype=float32)}, 'output_dtype':
, 'quant_method': 0} 2023-11-16 17:49:28.705 | INFO | yamain.command.load_model:pre_process:456 - tensor: tensor:pre_norm_1, (1, 640, 640, 3), FP32 2023-11-16 17:49:28.705 | INFO | yamain.command.load_model:pre_process:456 - op: op:pre_norm_1, AxNormalize, {'dim': 3, 'mean': [0.0, 0.0, 0.0], 'std': [255.0, 255.0, 255.0]} 2023-11-16 17:49:28.705 | INFO | yamain.command.load_model:pre_process:456 - tensor: tensor:pre_transpose_1, (1, 640, 640, 3), FP32 2023-11-16 17:49:28.705 | INFO | yamain.command.load_model:pre_process:456 - op: op:pre_transpose_1, AxTranspose, {'perm': [0, 3, 1, 2]} 2023-11-16 17:49:28.705 | WARNING| yamain.command.load_model:post_process:475 - postprocess tensor [326] 2023-11-16 17:49:28.705 | INFO | yamain.command.load_model:handle_postprocess:473 - op: op:post_transpose_1, AxTranspose 2023-11-16 17:49:28.705 | WARNING| yamain.command.load_model:post_process:475 - postprocess tensor [370] 2023-11-16 17:49:28.706 | INFO | yamain.command.load_model:handle_postprocess:473 - op: op:post_transpose_2, AxTranspose 2023-11-16 17:49:28.706 | WARNING| yamain.command.load_model:post_process:475 - postprocess tensor [414] 2023-11-16 17:49:28.706 | INFO | yamain.command.load_model:handle_postprocess:473 - op: op:post_transpose_3, AxTranspose tiling op... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 241/241 0:00:00 new_ddr_tensor = []
:186: RuntimeWarning: divide by zero encountered in divide
:187: RuntimeWarning: invalid value encountered in divide build op... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1177/1177 0:00:04 add ddr swap... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1141/1141 0:00:00 calc input dependencies... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1437/1437 0:00:00 calc output dependencies... ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1437/1437 0:00:00 assign eu heuristic ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1437/1437 0:00:00 assign eu onepass ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1437/1437 0:00:00 assign eu greedy ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1437/1437 0:00:00 2023-11-16 17:49:34.720 | INFO | yasched.test_onepass:results2model:2004 - max_cycle = 4,846,471 2023-11-16 17:49:35.349 | INFO | yamain.command.build:compile_npu_subgraph:1076 - QuantAxModel macs: 7,881,318,400 2023-11-16 17:49:35.352 | INFO | yamain.command.build:compile_npu_subgraph:1084 - use random data as gt input: images, uint8, (1, 640, 640, 3) 2023-11-16 17:49:38.687 | INFO | yamain.command.build:compile_ptq_model:1003 - fuse 1 subgraph(s) root@1657ec5355e2:/data# ``` 2. 模型仿真运行 ``` cp output/compiled.axmodel pulsar2-run-helper/models/yolov5s_hat.axmodel 输入数据准备 python3 cli_detection.py --pre_processing --image_path sim_images/000032.jpg --axmodel_path models/yolov5s_hat.axmodel --intermediate_path sim_inputs/0 输出信息: root@1657ec5355e2:/data/pulsar2-run-helper# python3 cli_detection.py --pre_processing --image_path sim_images/000032.jpg --axmodel_path models/yolov5s_hat.axmodel --intermediate_path sim_inputs/0 [I] Write [images] to 'sim_inputs/0/images.bin' successfully. 仿真模型推理 pulsar2 run --model models/yolov5s_hat.axmodel --input_dir sim_inputs --output_dir sim_outputs --list list.txt 输出信息: root@1657ec5355e2:/data/pulsar2-run-helper# pulsar2 run --model models/yolov5s_hat.axmodel --input_dir sim_inputs --output_dir sim_outputs --list list.txt Building native ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 100% 0:00:00 >>> [0] start write [326] to [sim_outputs/0/326.bin] successfully write [370] to [sim_outputs/0/370.bin] successfully write [414] to [sim_outputs/0/414.bin] successfully >>> [0] finish 输出数据处理(记得指定图片路径) python3 cli_detection.py --post_processing --image_path sim_images/000032.jpg --axmodel_path models/yolov5s_hat.axmodel --intermediate_path sim_outputs/0 输出信息: root@1657ec5355e2:/data/pulsar2-run-helper# python3 cli_detection.py --post_processing --image_path sim_images/000032.jpg --axmodel_path models/yolov5s_hat.axmodel --intermediate_path sim_outputs/0 [I] Number of detected objects: 7 [I]0: 94.59%, [972, 224, 1089, 345] [I]0: 94.56%, [886, 222, 970, 327] [I]0: 94.12%, [1141, 145, 1262, 281] [I]0: 93.96%, [487, 249, 571, 370] [I]0: 93.94%, [331, 201, 430, 341] [I]0: 93.27%, [186, 192, 302, 351] [I]0: 62.17%, [607, 233, 692, 338] root@1657ec5355e2:/data/pulsar2-run-helper# ``` 具体工具文档如下: [pulsar2工具文档](https://pulsar2-docs.readthedocs.io/zh-cn/latest/user_guides_quick) ## 开发板运行 开发板镜像为1.27版本,采用本地编译 下载源码: ``` git clone https://github.com/AXERA-TECH/ax-samples.git ``` 修改ax_yolov5s_steps.cc文件中: ``` 修改classname标签 const char* CLASS_NAMES[] = { "person", "hat"}; generate_proposals_yolov5函数指定classnum数量为2 for (uint32_t i = 0; i < io_info->nOutputSize; ++i) { auto& output = io_data->pOutputs[i]; auto& info = io_info->pOutputs[i]; auto ptr = (float*)output.pVirAddr; int32_t stride = (1 << i) * 8; detection::generate_proposals_yolov5(stride, ptr, PROB_THRESHOLD, proposals, input_w, input_h, ANCHORS, prob_threshold_u_sigmoid,2); } ``` 修改的原因是它默认为80,不然会报错下面信息: ``` root@maixbox:/home/ax-samples/build/install/ax650# ./ax_yolov5s -m yolov5s_hat.axmodel -i 000032.jpg -------------------------------------- model file : yolov5s_hat.axmodel image file : 000032.jpg img_h, img_w : 640 640 -------------------------------------- WARN,Func(__is_valid_file),NOT find file = '/etc/ax_syslog.conf' ERROR,Func(__syslog_parma_cfg_get), NOT find = '/etc/ax_syslog.conf' Engine creating handle is done. Engine creating context is done. Engine get io info is done. Engine alloc io is done. Engine push input is done. -------------------------------------- Segmentation fault ``` ![picture 9](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182454221-175286927.png) ``` cd ax-samples mkdir build && cd build cmake -DBSP_MSP_DIR=/soc/ -DAXERA_TARGET_CHIP=ax650 .. make -j6 make install ``` 编译完成后,生成的可执行示例存放在 `ax-samples/build/install/ax650/` 路径下: ```bash ax-samples/build$ tree install install └── ax650 ├── ax_classification ├── ax_detr ├── ax_dinov2 ├── ax_glpdepth ├── ax_hrnet ├── ax_imgproc ├── ax_pfld ├── ax_pp_humanseg ├── ax_pp_liteseg_stdc2_cityscapes ├── ax_pp_ocr_rec ├── ax_pp_person_attribute ├── ax_pp_vehicle_attribute ├── ax_ppyoloe ├── ax_ppyoloe_obj365 ├── ax_realesrgan ├── ax_rtmdet ├── ax_scrfd ├── ax_segformer ├── ax_simcc_pose ├── ax_yolo_nas ├── ax_yolov5_face ├── ax_yolov5s ├── ax_yolov5s_seg ├── ax_yolov6 ├── ax_yolov7 ├── ax_yolov7_tiny_face ├── ax_yolov8 ├── ax_yolov8_pose └── ax_yolox ``` 讲axmodel模型放在可执行文件下和测试图片: ``` root@maixbox:/home/ax-samples/build/install/ax650# ./ax_yolov5s -m yolov5s_hat.axmodel -i 000032.jpg -------------------------------------- model file : yolov5s_hat.axmodel image file : 000032.jpg img_h, img_w : 640 640 -------------------------------------- WARN,Func(__is_valid_file),NOT find file = '/etc/ax_syslog.conf' ERROR,Func(__syslog_parma_cfg_get), NOT find = '/etc/ax_syslog.conf' Engine creating handle is done. Engine creating context is done. Engine get io info is done. Engine alloc io is done. Engine push input is done. -------------------------------------- post process cost time:0.42 ms -------------------------------------- Repeat 1 times, avg time 6.15 ms, max_time 6.15 ms, min_time 6.15 ms -------------------------------------- detection num: 7 0:95%, [ 981,221, 1080,342], person 0:95%, [ 332,201,431,341], person 0:95%, [ 886,222,970,327], person 0:94%, [1141,140, 1262,290], person 0:94%, [ 187,197,300,347], person 0:94%, [ 487,252,571,373], person 0:91%, [ 605,232,689,337], person -------------------------------------- ``` ![picture 10](https://img2023.cnblogs.com/blog/2915785/202311/2915785-20231116182455655-1136582421.png) ## 感谢 感谢`o0圏圏蟲0o`,`无事闲来`,`梦醒时分`,`N/A`,`秋水`等大佬的帮助
此帖出自
Linux开发论坛
点赞
关注
(0)
嵌入式Linux
回复
分享
扫一扫,分享给好友
复制链接分享
链接复制成功,分享给好友
举报
提升卡
变色卡
千斤顶
返回列表
发新帖
回复
您需要登录后才可以回帖
登录
|
注册
发表回复
回帖后跳转到最后一页
浏览过的版块
嵌入式系统
活动
更多>>
有奖直播 | ADI 超低功耗 MCU MAX326xx 系列介绍
走近 AI 重磅新品 STM32N6,解锁在 MCU 部署高性能、节能型边缘 AI!答题有好礼~还有开发板等你拿!
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
安世半导体智能工业应用探索站,闯关赢好礼!
24年年终盘点来啦!精选强推:原创、测评、拆解、视频、资料
PI 电源小课堂:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
Microchip喊你探索dsPIC33A 芯片,70份好礼等你赢!
【瓜分2500元红包】票选2024 DigiKey “感知万物,乐享生活”创意大赛人气作品TOP3!
开源项目
更多>>
LT8631IFE 1MHz、3.3V、1A 降压转换器的典型应用电路
使用 ROHM Semiconductor 的 BD46422 的参考设计
TPS40192-大电流降压模块
P1021COME-DS-PB、P1021COME-DS-PB P1021 QorIQ微处理器的QorIQ开发系统
LT1933 微型电路从最低 4.5V 电源产生 3.3V 和 5V
VND5E160J评估板
RD-474,将 FSQ0365RL 电源开关用于辅助电源应用的参考设计
使用 Analog Devices 的 LT1021CIN8-10 的参考设计
MC34072DR2G 交流耦合同相放大器典型应用
使用 Semtech 的 SC485 的参考设计
随便看看
“我只要你的壳”之TI-82计算器改造(2)
最初的改造计划(已经过去几年了)是利用计算器的原PCB有按键触点的那一面,把元件全部拆掉,只用键盘矩阵的线路。我另外设计一块STM32的板子做主控和显示部分,键盘则是要用飞线连接到原来的板子上面。[attach]884500[/attach]显示用的LCD买回来是这样的:[a ...
JavaScript -练习册(3)对象
《深度学习的数学——使用Python语言》10.全连接网络的反向传播
ISM330DHCX iNEMO惯性SiP模块相关资源
EEWORLD大学堂----意法半导体近距离传感器技术
关于FLASH的单字节编程....请教
用launchpad在5110上显示16×16汉字,初学者可以看下
急求 zigbee模块灵敏度测试
查找数据手册?
搜索
EEWorld Datasheet 技术支持
热门标签
源代码
单片机
放大器
TI
ST
电源
分立器件
传感器
测试测量
模拟
中频直流发生器
2032纽扣电池
载波干扰比
磁传感器
音频功放
校正电容
转换器
编译器
Pi-Bot
pic
相关文章
更多>>
德州仪器 2024年Q4财报解析:中国市场增长亮眼,目前没有收到反垄断调查通知
在 2024 年第四季度收益电话会议上,德州仪器(TI)向外界展示了一些好消息,尤其是凸显了中国市场在其全球布局中的关键地位。 第四季度,TI 收入为 40 亿美元,环比下降 3%,比去年同期下
欧盟提议成立高级研究机构:专注于AI等战略技术以加强竞争力
据彭博社报道,欧盟将提议仿照美国政府实体建立一个高级研究项目机构,对战略技术进行投资,以此作为提高欧盟竞争力的更广泛努力的一部分。 欧盟还将呼吁为 AI 建设新的超级计算基础设施。知情人士及文件显示
传台积电报废三万片晶圆,三万片受损
晶圆代工龙头厂台积电位于南科的晶圆厂,受地震影响的机台设备移位、晶圆破损经过抢修后,供应链传出,3、 5纳米的先进制程晶圆十八厂,预计将于23日达100%复机,准备恢复正常生产,晶圆十四厂复机还没有
中国芯片出口连续14个月增长
特朗普退出巴黎协定,芯片业碳中和完了没?
汇顶科技 2024 年业绩亮眼,展现强劲发展韧性
谷歌母公司:美国AI难保证对华领先 不少方面是落后
消息称三星电子砍半晶圆代工部门 2025 年设备投资预算,陡降至 5 万亿韩元
史上最佳表现:SK 海力士 2024 年营业利润 23.5 万亿韩元
宇树发布“踢足球”机器人G1-Comp,网友:国足有救了
新帖速递
STM32和无源蜂鸣器播放声音的问题
车规级AECQ200介绍,混合铝电解电容器的选择
嵌入式教程_DSP技术_DSP实验箱操作教程:2-28 搭建轻量级WEB服务器实验
OPA847IDBVR运放器国产替代
AG32VF407测试UART
【得捷电子Follow Me第二期】第一章 收到货物的分享
请问这个红外接收头是什么型号?能用哪个型号代替?谢谢
出售全新未拆封ZYNQ 7Z020 FPGA核心板
用在锂电池供电的水表设置上的LORA模块,当有100块水表集中安装在一个楼道内时,节能
请问一下,当某个端口被设置为 RX0后,这个端口的输入输出方向还有必要设置吗
今年怎么这么难,比疫情时还难,三十了面临失业好迷茫
请教稳压管测试问题
【小华HC32F448测评】关于小华半导体的UART中断发送和PRINTF构造和重定向
【BIGTREETECH PI开发板】 HDMI输出测试
【BIGTREETECH PI开发板】+08.音频测试(zmj)
开发板申请:拥有 AI 加持的 STM32N6570-DK 免费试用 !
申请时间:即日起-3月2日
查看 »
安世半导体智能工业应用探索站,闯关赢好礼!
点击页面内“开始探索”按钮,填写并提交表单;
请根据序号依次完成3个安世半导体智能工业应用的探索,并根据给出的资料完成共计9题(每个应用3题),答对5题以上的玩家即可获得抽奖资格;
每人仅有一次参与答题的机会,请慎重作答,活动结束后,我们将抽取30位玩家赠送礼品。
查看 »
Microchip 直播|多相降压电源控制技术的发展与探讨 报名中!
直播主题:多相降压电源控制技术的发展与探讨
直播时间:2025年2月25日(星期二)上午10:30-11:30
快来报名!
查看 »
回帖赢好礼 | 关于无线技术的那些事儿
【活动时间】即日起—2025年1月31日
【活动好礼】50元京东卡
查看 »
答题赢好礼,PI电源小课堂第3期来啦!
本期内容:集成式半桥驱动IC BridgeSwitch 2, 助力高效永磁同步电机逆变器的设计
活动时间:即日起-2月28日
看视频答题即可赢取京东卡!
查看 »
DigiKey应用探索站重磅上线!潮流应用,硬核技术探秘,N多干货,一站get!
当月好物、热门技术资源、潮流应用技术、特色活动、DigiKey在线实用工具,干货多多~
查看 »
本周精选下载推荐:电源管理基础Dummies
本周小编给大家带来一本超简单、超干货的电子书——《电源管理基础Dummies》!内容深入浅出,排版舒服简洁,分分钟能get到电源管理最核心的知识内容。
查看 »
关闭
站长推荐
1
/7
电子工程世界版权所有
京B2-20211791
京ICP备10001474号-1
电信业务审批[2006]字第258号函
京公网安备 11010802033920号
Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复
返回顶部
返回列表
论坛首页
版块列表
专业技术中心
TI技术论坛
ST传感器与低功耗无线技术论坛
ADI参考电路
DigiKey得捷技术专区
ADI · 世健工业技术
电子技术交流
边缘AI
嵌入式系统
单片机
国产芯片交流
电机控制
FPGA/CPLD
模拟电子
电源技术
无线连接
传感器
PCB设计
综合技术交流
下载中心专版
大学堂专版
测评中心专版
行业应用
汽车电子
机器人开发
工业自动化与控制
能源基础设施
医疗电子
消费电子
创意与实践
电子竞赛
DIY/开源硬件专区
淘e淘
创意市集
休息一下
聊聊、笑笑、闹闹
工作这点儿事
为我们提意见&公告
EEWorld颁奖专区
信息发布
最新帖子
最新帖子
最新回复
精华
消灭零回复
测评中心
活动中心
积分兑换
E金币兑换
芯积分
厂商专区
TI技术论坛
ST传感器与低功耗无线技术论坛