当前位置: 首页 > news >正文

管道巡检软体机器人 YOLOv8 模型部署全流程(PT→ONNX→昇腾OM)

项目背景:本项目针对搭载摄像头的管道内部巡检软体机器人开发,实现管道内部缺陷、障碍物、异物的实时AI检测,完成从PC端训练到边缘端部署的完整链路。

开源仓库:AtomGit 公开仓库

适配设备:香橙派AIPro(搭载昇腾310B4芯片)

核心链路:训练权重.pt→ 通用中间模型.onnx→ 边缘推理模型.om一站式转换+验证

目录

  • 一、项目简介
  • 二、应用场景
  • 三、环境依赖准备
  • 四、本地PT模型验证推理
  • 五、PT一键转ONNX+验证推理
  • 六、香橙派ATC转为OM模型
  • 七、机器人端推理开发说明
  • 八、常见问题排查
  • 九、开源声明与协议

一、项目简介

管道广泛应用于市政工程、石油化工、给排水等领域,长期运行易出现破损、堵塞、异物堆积、裂纹等问题,人工巡检难度大、风险高。

本项目依托自带摄像装置的管道内部巡检软体机器人,搭载香橙派AIPro边缘计算设备,利用YOLOv8目标检测算法,实现管道内部的实时图像采集、缺陷自动识别、异物目标检测

整套方案分为三步:

  1. PC端采集管道图像数据集,训练YOLOv8模型,生成best.pt权重文件
  2. 将.pt模型转为通用ONNX格式,完成模型校验与精度对齐
  3. 在香橙派AIPro上,通过昇腾ATC工具编译为硬件适配的.om模型,实现机器人端离线推理

本文提供全套可直接运行的代码、完整操作步骤,无需复杂修改,即可落地到管道巡检软体机器人设备上。

二、应用场景

  • 适用设备:带视觉摄像头的管道内部巡检软体机器人
  • 检测目标:管道裂纹、破损、堵塞物、异物、腐蚀点、淤泥堆积等
  • 运行环境:狭小密闭管道、地下管网、工业管道等复杂场景
  • 优势:边缘端离线推理、低功耗、实时检测、适配机器人移动作业

三、环境依赖准备

3.1 本地PC训练&转换环境

用于模型训练、PT权重验证、ONNX格式转换,配备常规电脑即可

pipinstallultralytics onnx onnxruntime opencv-python numpy onnx-simplifier

3.2 机器人端设备环境(香橙派AIPro)

  • 核心芯片:Ascend310B4
  • 搭载设备:管道巡检软体机器人主控
  • 预装软件:Ascend CANN开发套件、ATC模型转换工具、AscendCL运行环境
  • 外设:机器人搭载的高清管道摄像头

四、本地PT模型验证推理

在模型格式转换前,先对PC端训练好的.pt权重进行推理校验,确认模型能正常识别管道内部目标,保证权重无损坏、精度达标。

# pt_infer.py# 管道巡检机器人 YOLOv8 权重验证代码fromultralyticsimportYOLOimportnumpyasnp# 路径配置(替换为你的模型和测试图片路径)model_path="D:/suanfa1/yolov8/runs/detect/train3/weights/best.pt"# 测试图建议选用管道内部实拍图,贴合机器人采集画面image_path="D:/suanfa1/yolov8/dataset/test/images/4560_jpg.rf.8c932b6c93142dddbdbb2669fa475a62.jpg"defload_and_infer():# 加载YOLOv8模型try:model=YOLO(model_path)print(f"✅ 成功加载管道巡检模型:{model_path}")exceptExceptionase:print(f"❌ 模型加载失败:{e}")return# 对管道内部图片进行推理print(f"\n📊 正在推理管道巡检图片:{image_path}")results=model(image_path,conf=0.25,save=False)# 打印检测结果print(f"\n🔥 推理完成,共识别到{len(results)}组目标\n")fori,outinenumerate(results):print("="*60)print(f" 输出{i}: ")print("="*60)print("\n【完整输出信息】")print(out)# 解析管道缺陷/异物检测结果print("\n【解析后关键检测信息】")ifout.boxesisnotNone:boxes=out.boxesprint(f"管道内检测目标总数:{len(boxes)}")forbox_idx,boxinenumerate(boxes):# 提取目标坐标、置信度、类别xyxy=box.xyxy[0].cpu().numpy()conf=box.conf[0].cpu().numpy()cls_id=int(box.cls[0].cpu().numpy())cls_name=model.names[cls_id]print(f"\n 目标{box_idx+1}:")print(f" 边界框:{np.round(xyxy,2)}")print(f" 置信度:{conf:.4f}")# 类别对应管道裂纹、堵塞物、异物等自定义标签print(f" 检测类别:{cls_name}(ID:{cls_id})")print("\n"+"-"*60)if__name__=="__main__":load_and_infer()

运行结果:能正常识别管道内部缺陷、障碍物,输出坐标和类别,即可进入下一步格式转换。


五、PT一键转ONNX+验证推理

本脚本集成三大功能:PT模型转ONNX + 模型合法性校验 + ONNX Runtime推理,推理结果与原生PT格式完全对齐,贴合机器人部署需求,避免精度丢失。

# pt2onnx.py# 管道巡检机器人 模型格式转换专用代码fromultralyticsimportYOLOimportonnximportonnxruntimeasortimportnumpyasnpimportcv2importos# 路径配置(替换为你的本地路径)model_path="D:/suanfa1/yolov8/runs/detect/train3/weights/best.pt"onnx_output_path=os.path.splitext(model_path)[0]+".onnx"# 测试图采用管道内部实拍图image_path="D:/suanfa1/yolov8/dataset/test/images/4560_jpg.rf.8c932b6c93142dddbdbb2669fa475a62.jpg"# 模型参数(与训练、机器人推理保持一致)imgsz=640conf_threshold=0.25iou_threshold=0.45# 修改为你的管道检测类别总数(如裂纹、堵塞、异物等)num_classes=4defconvert_pt_to_onnx():print("="*80)print("管道巡检模型:PT 正在转为 ONNX 格式")print("="*80)try:model=YOLO(model_path)print("✅ PT模型加载成功")exceptExceptionase:print(f"❌ 加载失败:{e}")returnFalse# 昇腾平台兼容配置model.export(format="onnx",imgsz=imgsz,opset=12,simplify=True,save=True,batch=1,conf=conf_threshold,iou=iou_threshold)# 校验ONNX模型是否生成ifos.path.exists(onnx_output_path):size_mb=os.path.getsize(onnx_output_path)/(1024*102)print(f"🎉 ONNX生成成功:{onnx_output_path}大小:{size_mb:.2f}MB")returnTruereturnFalsedefvalidate_onnx_model():print("\n"+"="*80+"\n校验ONNX模型合法性(适配昇腾芯片)\n"+"="*80)try:onnx_model=onnx.load(onnx_output_path)onnx.checker.check_model(onnx_model)print("✅ ONNX结构合法,可用于昇腾转换")returnTrueexceptExceptionase:print(f"❌ 校验失败:{e}")returnFalse# 图像预处理(与机器人摄像头采集逻辑一致)defpreprocess_image(image_path,target_size=640):img=cv2.imread(image_path)orig_h,orig_w=img.shape[:2]scale=min(target_size/orig_w,target_size/orig_h)new_w,new_h=int(orig_w*scale),int(orig_h*scale)img_resized=cv2.resize(img,(new_w,new_h))# 黑边填充,保持图像比例不变canvas=np.zeros((target_size,target_size,3),np.uint8)ox,oy=(target_size-new_w)//2,(target_size-new_h)//2canvas[oy:oy+new_h,ox:ox+new_w]=img_resized# 格式转换img_rgb=cv2.cvtColor(canvas,cv2.COLOR_BGR2RGB)tensor=img_rgb.transpose(2,0,1).astype(np.float32)/255.0tensor=np.expand_dims(tensor,axis=0)returnimg,tensor,orig_w,orig_h,scale,ox,oy# 后处理解析(还原管道目标坐标)defpostprocess_output(outputs,orig_w,orig_h,scale,ox,oy,conf_thres,iou_thres):output=outputs[0][0].transpose(1,0)cxcywh=output[:,:4]cls_scores=output[:,4:]confs=np.max(cls_scores,axis=1,keepdims=True)cls_ids=np.argmax(cls_scores,axis=1,keepdims=True)# 过滤低置信度目标mask=confs>conf_thres mask=mask.squeeze()cxcywh,confs,cls_ids=cxcywh[mask],confs[mask],cls_ids[mask]iflen(cxcywh)==0:returnnp.array([]),np.array([]),np.array([])# 坐标转换cx=np.clip(cxcywh[:,0],0.01,0.99)*imgsz cy=np.clip(cxcywh[:,1],0.01,0.99)*imgsz w=np.clip(cxcywh[:,2],0.01,0.99)*imgsz h=np.clip(cxcywh[:,3],0.01,0.99)*imgsz x1,y1=cx-w/2,cy-h/2x2,y2=cx+w/2,cy-h/2boxes=np.stack([x1,y1,x2,y2],axis=1)# 映射回原图尺寸boxes[:,[0,2]]=(boxes[:,[0,2]]-ox)/scale boxes[:,[1,3]]=(boxes[:,[1,3]]-oy)/scale boxes=np.clip(boxes,0,[orig_w,orig_h,orig_w,orig_h])# 非极大值抑制,去重框idx=cv2.dnn.NMSBoxes(boxes.tolist(),confs[:,0].tolist(),conf_thres,iou_thres)iflen(idx)==0:returnnp.array([]),np.array([]),np.array([])idx=idx.flatten()returnboxes[idx],confs[idx],cls_ids[idx]# ONNX推理definfer_onnx_model():print("\n"+"="*80+"\nONNX 模型推理(模拟机器人端运行)\n"+"="*80)_,tensor,orig_w,orig_h,scale,ox,oy=preprocess_image(image_path)sess=ort.InferenceSession(onnx_output_path,providers=["CPUExecutionProvider"])in_name=sess.get_inputs()[0].name# 测速importtime t0=time.time()outs=sess.run(None,{in_name:tensor})t_cost=(time.time()-t0)*1000# 解析结果boxes,confs,cls_ids=postprocess_output(outs,orig_w,orig_h,scale,ox,oy,conf_threshold,iou_threshold)model=YOLO(model_path)print(f"推理耗时:{t_cost:.2f}ms 管道内检测目标数量:{len(boxes)}")fori,(b,c,cls)inenumerate(zip(boxes,confs,cls_ids)):cid=cls.item()cname=model.names[cid]print(f"\n目标{i+1}坐标:{np.round(b,2)}置信度:{c[0]:.4f}类别:{cname}")if__name__=="__main__":ifconvert_pt_to_onnx()andvalidate_onnx_model():infer_onnx_model()

关键参数说明(适配管道机器人)

  • imgsz=640:与训练、机器人摄像头采集尺寸严格对齐,保证识别精度
  • opset=12:昇腾310B4兼容性最优,避免转换报错
  • simplify=True:精简模型算子,降低设备功耗,适合机器人长时间作业

六、香橙派ATC转为OM模型

ONNX模型无法直接在香橙派AIPro上运行,需通过昇腾ATC工具编译为.om离线模型,部署到管道巡检软体机器人。

6.1 上传ONNX模型

将生成的best.onnx文件,上传至香橙派指定路径(可自定义):

/home/HwHiAiUser/suanfa/guiguigui/haigui_change/

6.2 执行ATC转换命令

登录香橙派终端,进入CANN环境,执行以下命令:

atc\--model=/home/HwHiAiUser/suanfa/guiguigui/haigui_change/best.onnx\--framework=5\--output=/home/HwHiAiUser/suanfa/guiguigui/haigui_change/best\--soc_version=Ascend310B4

6.3 转换结果

命令执行完毕后,对应目录会生成best.om文件,即为管道巡检机器人专用推理模型。


七、机器人端推理开发说明

将.om模型部署到软体机器人后,按照以下流程开发推理程序,实现管道内部实时检测:

  1. 初始化:启动香橙派,加载AscendCL环境,载入.om模型
  2. 图像采集:调用机器人搭载的摄像头,实时采集管道内部画面
  3. 图像预处理:复用本文代码中的预处理逻辑,保证格式对齐
  4. 模型推理:调用OM模型,完成缺陷、异物识别
  5. 结果解析:解析目标坐标、类别,标记管道问题点
  6. 后续动作:存储检测数据、回传结果、控制机器人避障
  7. 资源释放:推理结束,释放模型与设备资源

整套推理流程轻量化,适合管道内移动作业、低功耗长时间运行。


八、常见问题排查

问题现象原因与解决方案
PT转ONNX失败更新ultralytics库,开启simplify参数,opset固定为12
ONNX校验不通过固定batch=1,去除动态轴,用onnx-simplifier手动优化
ATC转换OM报错核对soc_version为Ascend310B4,降低opset版本,检查模型路径
机器人端识别不准预处理逻辑与PC端不一致,补全填充、缩放步骤;用管道实拍图训练模型
推理速度慢开启模型精简,降低输入分辨率,关闭冗余后处理

九、开源声明与协议

开源说明

本项目全套代码、文档已开源至AtomGit平台,完全免费,专为管道内部巡检软体机器人场景定制。

  • 包含:PT权重验证代码、PT转ONNX代码、ATC转换命令、部署教程
  • 适用:个人学习、毕业设计、工程项目二次开发
  • 欢迎Star、Fork,提交Issue交流优化,共同完善管道巡检AI方案
http://www.jsqmd.com/news/563334/

相关文章:

  • 从对话到执行:一文读懂AI Coding Agent的底层原理
  • 质量块-阻尼器-弹簧系统H的鲁棒控制:次最优、Loopshaping与μ综合dk迭代设计案例
  • 数据增广翻车现场实录:我的模型准确率为什么反而下降了?附PyTorch调试避坑指南
  • 3大突破策略:Bypass Paywalls Clean 2024全场景应用指南
  • APK Studio核心功能解析:深入理解反编译与重编译流程
  • 2026电力盖板及玻璃钢制品优选营顺高性价比服务:玻璃钢电缆沟盖板/玻璃钢罐体/玻璃钢运输罐/电缆沟盖板/酸碱罐/选择指南 - 优质品牌商家
  • PyTorch模型部署实战:FP16 vs FP32 vs TF32 vs INT8性能对比与选择指南
  • 从6颗MLCC到高通滤波器:解码耳机输出耦合电容的取舍艺术
  • 从Dhrystone到SPEC:聊聊那些年我们跑过的“分”,以及为什么现在不能全信它
  • 轻量级MCU菜单框架设计与实现
  • 2026年知名的补漆/呼市汽车补漆热门推荐榜 - 品牌宣传支持者
  • Python异步编程新选择:用Channels替代Celery实现实时消息推送(Django 3.2+演示)
  • ANSYS_APDL——实例002-结构静力学分析
  • Systolic阵列优化技巧:如何减少硬件资源消耗并提升矩阵乘法效率
  • OpenRouter报错403
  • 单片机驱动分离架构设计与实践指南
  • 大模型---量化
  • nginx做四层代理配置
  • 【技术解析】PSMNet:如何通过金字塔池化与堆叠沙漏3D CNN革新立体匹配?
  • 3步破解Mac NTFS读写限制:面向跨平台工作者的开源工具Nigate全指南
  • HarmonyOS 6实战5:应用性能管理与崩溃日志分析技术
  • 从AlphaGo到《原神》NPC:蒙特卡洛树搜索(MCTS)在游戏AI中的落地实践
  • 2026年成品家具与定制服务白皮书南通高端别墅装修解析:如东家具工厂店、如东高端家具定制、如东黑胡桃家具工厂店选择指南 - 优质品牌商家
  • 3个核心价值:APKMirror安全下载与管理指南
  • 双目立体视觉实战:从平行视图到3D电影原理的完整解析
  • 从VMware到Pwn环境:Ubuntu 22.04虚拟机配置与安全研究工具链全解析
  • PyMobileDevice3 高效异步架构解析:深入理解iOS设备通信协议栈实现
  • Bongo Cat终极指南:如何选择最适合你的桌面猫咪伙伴
  • Qwen3-TTS语音生成保姆级教程:5分钟搞定10国语言配音
  • 深度学习模型可解释性详解:从原理到实践