wang-xinyu / tensorrtx

Implementation of popular deep learning networks with TensorRT network definition API
MIT License
7.04k stars 1.78k forks source link

自己数据集训练的yolov9模型tensorrt的输出结果与pytorch结果差别很大,精度完全没有对齐 #1535

Closed guanshanjushib closed 4 days ago

guanshanjushib commented 6 months ago

Env

About this repo

Your problem

我用yolov9算法训练自己的数据集,得到的模型经过yolov9的tensorrtx推理,发现精度对不齐,pytorch输出的结果与tensorrt输出的结果差别很大,有些目标框的位置和精度没对齐。请问当前的yolov9推理对齐了吗?

guanshanjushib commented 6 months ago

请问有人训练自己的数据集后pytorch和tensorrt的结果对齐了吗

wang-xinyu commented 6 months ago

@guanshanjushib 试试用官方的模型 cc @WuxinrongY

WuxinrongY commented 6 months ago

你能发一下模型的结构吗,在pytorch下print打印就可以。如果和官网的一致,可以考虑提高一下tensorrt的版本,采用trt 8.6。

guanshanjushib commented 5 months ago

你能发一下模型的结构吗,在pytorch下print打印就可以。如果和官网的一致,可以考虑提高一下tensorrt的版本,采用trt 8.6。

yolov9_uav76_20240521_key.txt yolov9_uav76_20240521_model.txt 附件里是我生成wts后保存的模型结构和wts每层的key和len,我采用的是yolov9-e模型,用的是yolov9的master分支训练的。 并且我已经修改了最后一层,因为最后从一层采用的是cv4、cv5和dlf2的权重,不过就算我修改了网络代码,还是会有精度不对齐的情况,我训练的是无人机数据,场景比较复杂,目标比较多。 可以分析共同讨论一下 @WuxinrongY ,我觉得预处理、网络结构和后处理都有点小瑕疵,比如maxOutput,pytorch是设置1000,而c++设置的是2000.

WuxinrongY commented 5 months ago

你可以关注一下SyncBatchNorm的实现,是不是和官方模型中的BatchNorm2d不一样,可以直接在代码里面修改。maxOutput这个不要紧的,输出的是最大的置信度,至于预处理、网络结构和后处理方面确实可以讨论一下,hhh image

WuxinrongY commented 5 months ago

要是有兴趣,我们可以考虑实现一下SyncBatchNorm。email: w845756@qq.com

guanshanjushib commented 5 months ago

你可以关注一下SyncBatchNorm的实现,是不是和官方模型中的BatchNorm2d不一样,可以直接在代码里面修改。maxOutput这个不要紧的,输出的是最大的置信度,至于预处理、网络结构和后处理方面确实可以讨论一下,hhh image

多卡训练时,BatchNorm2d会自动变成SyncBatchNorm,那么在生成wts的时候可以直接变成BatchNorm2d嘛,还是说只能单卡训练才能维持成BatchNorm2d层?另外SyncBatchNorm怎么实现?要是在单卡上能直接推理SyncBatchNorm层嘛

guanshanjushib commented 5 months ago

要是有兴趣,我们可以考虑实现一下SyncBatchNorm。email: w845756@qq.com

可以啊,你们能实现SyncBatchNorm嘛?另外,我要是用onnx转成engine,会不会也会因为SyncBatchNorm出现精度问题?

WuxinrongY commented 5 months ago

要是有兴趣,我们可以考虑实现一下SyncBatchNorm。email: w845756@qq.com

可以啊,你们能实现SyncBatchNorm嘛?另外,我要是用onnx转成engine,会不会也会因为SyncBatchNorm出现精度问题? 我查了一下,syncBN似乎计算上没什么区别。 另外,之前我尝试过训练yolov7的小目标,并转换engine,也有问题,原因是重参数化。

guanshanjushib commented 4 months ago

要是有兴趣,我们可以考虑实现一下SyncBatchNorm。email: w845756@qq.com

可以啊,你们能实现SyncBatchNorm嘛?另外,我要是用onnx转成engine,会不会也会因为SyncBatchNorm出现精度问题? 我查了一下,syncBN似乎计算上没什么区别。 另外,之前我尝试过训练yolov7的小目标,并转换engine,也有问题,原因是重参数化。

我测试了一下,wts转换出来的engine运行后,精度差异很大,用onnx转engine,运行后精度损失很少

stale[bot] commented 1 month ago

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.