WuZifan / CPP_TensorRT_YOLOV3TINY

8 stars 5 forks source link

跑yolov3时会有一堆很奇怪的nan #1

Open fee0819 opened 4 years ago

fee0819 commented 4 years ago

您好,很感谢您提供这个项目,然后我跑您提供的demo时,能5ms识别一张图。然后我测yolov3时,会报出一堆nan,然后再出结果,我下次再想接着测试原图的时候,提示core dumped,然后我看了一眼,好像识别时间在1000ms左右了,请问是哪里问题呢?十分感谢 平台是nvidia NX

Screenshot from 2020-07-23 20-25-18

WuZifan commented 4 years ago

我没测试过yolov3,但是提供几个思路: 1、engine的输入输出的个数yolov3和tiny是不一样的,yolov3是1个输入3个输出,tiny是1个输入2个输出,这一点不知道你确认了没有; 2、我知乎上其他几篇内容中提到过,yolov3系列的上采样方法engine不支持,所以我用的都是反卷积替代了interpret上采样; 3、nan问题我在阶段遇到过,当时的预测结果有nan,导致nms失效,所以你看看是不是可以通过nms过滤到nan问题; 4、不清楚nvidia-nx系列支持的精度是否和需要的精度匹配(jetson-nano只有float16)。 5、再次测试时间超长看看是不是内存资源没有释放或者又在重新创建engine了?

希望能帮到你。

WuZifan

2012-2016 ZheJiang University 2016-2017 Imperial College London

fqlovetb notifications@github.com 于2020年7月23日周四 下午8:28写道:

您好,很感谢您提供这个项目,然后我跑您提供的demo时,能5ms识别一张图。然后我测yolov3时,会报出一堆nan,然后再出结果,我下次再想接着测试原图的时候,提示core dumped,然后我看了一眼,好像识别时间在1000ms左右了,请问是哪里问题呢?十分感谢 平台是nvidia NX

[image: Screenshot from 2020-07-23 20-25-18] https://user-images.githubusercontent.com/34056884/88286206-fae33d80-cd22-11ea-9ea9-ec948a8359e8.png

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/WuZifan/CPP_TensorRT_YOLOV3TINY/issues/1, or unsubscribe https://github.com/notifications/unsubscribe-auth/AFNHS4N3BK3WKQYXNEHJZDLR5AUG7ANCNFSM4PFVRJYA .

fee0819 commented 4 years ago

您好 1、yolov3是1个输入3个输出,这一点我已经对应修改了 2、关于您第二点反卷积代替了上采样方法,这一点我没有修改,不知道您是否有对应的demo 3、nan的话我在测试您提供的模型时是没有报的,而且阈值也很高,我觉得应该不是这个问题引起的 4、NX是支持16位的 5、再次测试内存已经释放,没有重新创建engine,只是读模型时显示内存不够

我用tiny初始80类模型时,报的是这个错

Screenshot from 2020-07-25 14-52-18

这个提示应该就是您说的那个使用反卷积而不是上采样

WuZifan commented 4 years ago

您好 1、yolov3是1个输入3个输出,这一点我已经对应修改了 2、关于您第二点反卷积代替了上采样方法,这一点我没有修改,不知道您是否有对应的demo 3、nan的话我在测试您提供的模型时是没有报的,而且阈值也很高,我觉得应该不是这个问题引起的 4、NX是支持16位的 5、再次测试内存已经释放,没有重新创建engine,只是读模型时显示内存不够

我用tiny初始80类模型时,报的是这个错

Screenshot from 2020-07-25 14-52-18

这个提示应该就是您说的那个使用反卷积而不是上采样

vector<vector<int> > output_shape = { {1, 21, 13, 13}, {1, 21, 26, 26} };  // 21=3*(4+1+类别数量) 这里记得也要改一下
vector<vector<int> > g_masks = { {3, 4, 5}, {0, 1, 2} };
vector<vector<int> > g_anchors = { {10, 14}, {23, 27}, {37, 58}, {81, 82}, {135, 169}, {344, 319} };
float obj_threshold = 0.5;
float nms_threshold = 0.4;
int CATEGORY = 2;  // 类别数量

类别数量80的话,记得在输出的地方也改一下。

图挂了,我看不到你的图;

原始的模型我用pytorch写的,具体反卷积部分是这样的:

 def _create_upsample(self,channel):
        model = nn.ConvTranspose2d(in_channels=channel,
                                   out_channels=channel,
                                   kernel_size=2, stride=2)
        return model