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博客

~~~~~下一步计划,搜索能用于yolo11的c++项目,尤其是检测框的结果怎么拿,是不是还是很多(如8400个)需要自己筛选???

网上大神手速就是快,C++ Tensort YOLO11已经出来了,给这个人star支持吧,感谢作者的无私奉献。

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 @ 2024-10-09 17:46  夕西行  阅读(760)  评论(0编辑  收藏  举报