3、PyTorch训练YOLOv11—部署篇(detect)—Windows系统

1、pt转onnx或engine

复制代码
from ultralytics import YOLO

model = YOLO("best.pt")
model.export(format="onnx")
# model.export(format="engine")

# 预测看下效果
onnx_model = YOLO("best.onnx", task="detect")
results = onnx_model("https://ultralytics.com/images/bus.jpg")
results[0].show()

'''
tensorrt_model = YOLO("best.engine", task="detect")
results = tensorrt_model("https://ultralytics.com/images/bus.jpg")
results[0].show()
'''
复制代码

更丰富的export参数,查阅 YOLO11在训练和导出时的一些参数设置 - 夕西行 - 博客园 (cnblogs.com)

yolov11 常用参数(无废话)_yolo11参数-CSDN博客

2、YOLO10和11版本用了新的技术

有人说干掉了耗时的NMS操作,参考YOLOv10:无需NMS的目标检测新范式(强的离谱)_yolov10 topk-CSDN博客

其中有这样一句话:模型可以在训练期间利用一对多分配的丰富监督信号,而在推理期间则使用一对一分配的预测结果,从而实现无NMS的高效推理。

我在YOLO11的 loss.py 代码里看到了

那么,模型检测后应该会得到很少的框,即同一个位置只输出满足阈值的每一类的最大框,如图片里有人、狗(人和狗在一块),那么只输出两个框(如果满足设定的阈值)

训练时候只使用one2one,不使用one2many,行不行?

不行,论文里指出:

Dual label assignments. Unlike one-to-many assignment, one-to-one matching assigns only one prediction to each ground truth, 
avoiding the NMS post-processing. However, it leads to weak supervision, which causes suboptimal accuracy and convergence speed [75].
Fortunately, this deficiency can be compensated for by the one-to-many assignment [5].

参考 目标检测领域NMS(非极大值抑制)的改进算法有哪些? - 知乎 (zhihu.com)

3、部署框架的选择

为了效率,用C++部署。

git上有很多C++部署yolo的项目,关于获取框,主要参考YOLO11的 tal.py 这个文件,直接看大神博客 yolov10/v8 loss详解_yolov10损失函数-CSDN博客

找了两个部署框架:

TensorRT-YOLO/docs/cn/build_and_install.md at main · laugh12321/TensorRT-YOLO

emptysoal/TensorRT-YOLO11: Based on tensorrt v8.0+, deploy detection, pose, segment, tracking of YOLO11 with C++ and python api. (github.com)

yolo11和yolo10的输出如下:

yolo10的300行结果已经被排好序了,第一行就是最优结果(每一行前4位为候选框坐标xyxy,第五位为conf,第六位为类别,结果已经按照conf由大到小排列)。

yolo11的结果还是8400结果,需要nms,不过大神已经用cuda搞出来了,再此手动star⭐,感谢!!!

 github项目运行可能出现的错误:

mian.cpp里如果指定了engine,那么直接载入使用

std::string trtFile = "C:/Users/admin/source/repos/ConsoleApplication1/x64/Release/best.engine";

如果未指定,则载入config.h里的onnx

const std::string onnxFile = "../onnx_model/best.onnx";

对于指定了engine

 运行后报错,由于trt版本和当前电脑版本不一致导致,用当前电脑版本将pt转engine

posted @   夕西行  阅读(1584)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 提示词工程——AI应用必不可少的技术
· 地球OL攻略 —— 某应届生求职总结
· 字符编码:从基础到乱码解决
· SpringCloud带你走进微服务的世界
历史上的今天:
2022-10-09 Basler相机未成功安装USB驱动,数字签名验证失败问题
2019-10-09 SuperSocket自定义server、session、command、分隔符,WinForm服务端
2018-10-09 判断是否是素数(质数)
2018-10-09 高级组件——文件选择器JFileChooser
2018-10-09 高级组件——工具栏JToolBar
2018-10-09 高级组件——弹出式菜单JPopupMenu
2018-10-09 高级组件——菜单栏JMenuBar
点击右上角即可分享
微信分享提示