案例集
概述
所有示例通过 Python 接口实现板卡推理,前处理(数据标准化/归一化、通道变换、输入数据量化)和反量化都已经加入网络中,板卡推理结果返回PC端做后处理,结果保存在模型工程目录下。提供源码地址、权重文件、nbg文件、测试图片。
项目结构
1├── docs/ # 项目文档
2├── resource/ # 算法模型
3├── src/ # 源码
4│ ├── utils/ # 公共组件
5│ └── ***.py # demo测试验证相关代码,包含前后处理以及模型的调用
6├── README.md # 项目说明文档(本文件)
环境要求及配置
硬件要求
NPU 板卡 : X78E_DSKC_202311V0 板卡
连接与通信准备(自备):网线
确保板卡server已经运行,详情参考server_api.md
创建 python=3.10 环境
1wget "https://mirrors.tuna.tsinghua.edu.cn/github-release/conda-forge/miniforge/LatestRelease//Miniforge3-$(uname)-$(uname -m).sh"
2mkdir -p ~/app
3INSTALL_PATH="${HOME}/app/miniforge3"
4bash Miniforge3-Linux-x86_64.sh -b -p ${INSTALL_PATH}
5echo "source "${INSTALL_PATH}/etc/profile.d/conda.sh"" >> ${HOME}/.bashrc
6echo "source "${INSTALL_PATH}/etc/profile.d/mamba.sh"" >> ${HOME}/.bashrc
7source ${HOME}/.bashrc
8mamba create -n netrans python=3.10 -y
9mamba activate netrans
下载工程
1git clone https://gitlink.org.cn/nudt_dsp/demo_system_algorithm.git
安装依赖
1pip install -r requirements.txt
评估指标
fiducial_e:计算归一化的绝对误差,通过计算fe的均值和最大值来评估,值越接近0越好
推理速度:下位机单张图片推理时间(毫秒)
执行与性能
以语义分割为例,直接运行py文件,其他案例一致
执行
1cd demo_system_algorithm/src 2python deeplabv3.py
输出 推理时间、输出fe的相似度以及结果图片保存到demo_system_algorithm/resource对应的案例目录下
案例详情
语义分割
模型类型:deeplabv3 的实现(MobileNetV3 作为骨干网络),用于语义分割任务。
目标应用:按像素为图像中的每个像素分配类别标签,常用于场景理解、自动驾驶、工业检测、卫生影像分析等场景。
代码来源:https://github.com/bubbliiiing/deeplabv3-plus-pytorch.git,基于 PyTorch 实现,便于本地开发和部署。
详情在工程demo_system_algorithm下的docs/deeplab_v3.md
实例分割
模型类型:yolov5s-seg是基于YOLOv5架构的轻量级实例分割模型,能够在单次前向传播中同时完成目标检测和分割掩码预测。该模型结合了YOLO的高效检测能力和分割头的精细掩码生成能力。
详情在工程demo_system_algorithm下的docs/yolov5s-seg.md
单目标跟踪
模型类型:OSTrack(One-stream Transformer Tracker)是一种基于Transformer架构的单目标视觉跟踪模型,通过将特征提取和目标匹配统一在一个Transformer框架中,实现了高效且准确的视觉目标跟踪。
详情在工程demo_system_algorithm下的docs/ostrack.md
分类
模型类型:resnet18 分类模型,基于 Ultralytics YOLOv5 项目中的实现风格(通常用于图像分类任务,输出对 1000 个类别的概率分布),便于在边缘设备或服务器端快速部署。
详情在工程demo_system_algorithm下的docs/resnet18.md
关键点检测
模型类型:superpoint 是一种端到端的自监督/半监督学习的关键点检测与描述子提取方法,检测关键点(interest points)的位置与置信度,为每个关键点生成一个强鲁棒的局部描述子(如 128 维向量),用于对图像中的点进行匹配
详情在工程demo_system_algorithm下的docs/superpoint.md
人体姿态估计
模型类型:openpose 人体姿态估计模型,OpenPose 是由卡耐基梅隆大学等机构联合提出的人体姿态估计开源框架,多阶段、多分支网络结构常采用“Part Affinity Fields (PAFs)”+关键点热力图的思想来实现多人姿态的检测与关联。
代码来源:https://github.com/Daniil-Osokin/lightweight-human-pose-estimation.pytorch
详情在工程demo_system_algorithm下的docs/openpose.md
差异性检测
模型类型:a2net 一种轻量化的差异性检测网络,通过邻居聚合模块增强时间特征表示,渐进式变化识别模块提取时间差异,监督注意力模块优化特征融合。使用MobileNetV2作为主干,有效处理变化检测任务。
目标应用:城市发展与规划、自然灾害评估、农业林业监测、环境变化监测等场景。
代码来源:https://github.com/guanyuezhen/A2Net.git,基于 PyTorch 实现,便于本地开发和部署。
详情在工程demo_system_algorithm下的docs/a2net.md
图像分割检测
模型类型:yolov5s 是 Ultralytics 团队实现的目标检测模型 YOLOv5 系列中的一个轻量化版本,属于实时对象检测框架,其检测图片大小为640的尺寸,不适合高分辨率的图片检测,为实现对高分辨率的图片检测,本实例通过子图大小和重叠距离等条件对大图进行分割,串行检测所有子图,最后合并所有子图结果得到大图的检测结果。
详情在工程demo_system_algorithm下的docs/yolov5s_segmentation_recognition.md
百度paddle转onnx
本示例中展示百度PaddlePaddle模型如何转化为onnx格式,从而适配netrans工具,选取lenet 手写数字识别模型作为示例模型,通过paddle2onnx工具可以直接将PaddlePaddle模型转化为onnx格式,也可以通过paddle.onnx.export函数将paddle训练好的模型直接保存为onnx格式。
模型类型:lenet 手写数字识别任务模型,手写数字识别任务中取得了很好的性能。
详情在工程demo_system_algorithm下的docs/paddle2onnx_lenet_mnist.md
作者 @ogl ougaoliang@hngwg.com