CrowdDet icon indicating copy to clipboard operation
CrowdDet copied to clipboard

为什么loss一直震荡 难以收敛

Open AstrayChao opened this issue 5 years ago • 29 comments

BatchSize: 12 base lr: 1e-5 epoch: 40

best result: AP: 0.8621 MR: 0.5121 JI: 0.7651 epoch: 18

不管我怎么更改lr, loss都会震荡, 例如, 从2.6->1.8->2.4 不知道是不是CrowdHuman数据集的问题, 请问您训练过程中有这样的情况吗 谢谢

AstrayChao avatar Jun 30 '20 13:06 AstrayChao

我跑了他的代码 我的loss也有震荡的 因为他是每个GPU上的loss都print了一下 最后结果和readme差不多 或许跟你的batch size有什么关系?它最后的lr我记得是根据bs和卡数来算的 你看下能不能最后对上0.02的lr ps 一直想问下作者,该实现和mmdet上faster rcnn的实现除了以下几点还有别的区别吗:

  • RPN是all level NMS
  • RPN的anchor不考虑ignore region
  • RCNN的roi考虑ignore region 感觉42.4的MR好高啊 一直跑不出来...orz

zehuichen123 avatar Jun 30 '20 14:06 zehuichen123

我跑了他的代码 我的loss也有震荡的 因为他是每个GPU上的loss都print了一下 最后结果和readme差不多 或许跟你的batch size有什么关系?它最后的lr我记得是根据bs和卡数来算的 你看下能不能最后对上0.02的lr ps 一直想问下作者,该实现和mmdet上faster rcnn的实现除了以下几点还有别的区别吗:

  • RPN是all level NMS
  • RPN的anchor不考虑ignore region
  • RCNN的roi考虑ignore region 感觉42.4的MR好高啊 一直跑不出来...orz

谢谢 我再试试

AstrayChao avatar Jul 01 '20 02:07 AstrayChao

我跑了他的代码 我的loss也有震荡的 因为他是每个GPU上的loss都print了一下 最后结果和readme差不多 或许跟你的batch size有什么关系?它最后的lr我记得是根据bs和卡数来算的 你看下能不能最后对上0.02的lr ps 一直想问下作者,该实现和mmdet上faster rcnn的实现除了以下几点还有别的区别吗:

  • RPN是all level NMS
  • RPN的anchor不考虑ignore region
  • RCNN的roi考虑ignore region 感觉42.4的MR好高啊 一直跑不出来...orz

这三个是关键影响点数的区别,别的大小差异应该没啥影响点数的了。

xg-chu avatar Jul 01 '20 13:07 xg-chu

我跑了他的代码 我的loss也有震荡的 因为他是每个GPU上的loss都print了一下 最后结果和readme差不多 或许跟你的batch size有什么关系?它最后的lr我记得是根据bs和卡数来算的 你看下能不能最后对上0.02的lr ps 一直想问下作者,该实现和mmdet上faster rcnn的实现除了以下几点还有别的区别吗:

  • RPN是all level NMS
  • RPN的anchor不考虑ignore region
  • RCNN的roi考虑ignore region 感觉42.4的MR好高啊 一直跑不出来...orz

谢谢 我再试试

显示的loss小范围震荡是正常的,大的跨度上应该是稳定下降的。

xg-chu avatar Jul 01 '20 13:07 xg-chu

我跑了他的代码 我的loss也有震荡的 因为他是每个GPU上的loss都print了一下 最后结果和readme差不多 或许跟你的batch size有什么关系?它最后的lr我记得是根据bs和卡数来算的 你看下能不能最后对上0.02的lr ps 一直想问下作者,该实现和mmdet上faster rcnn的实现除了以下几点还有别的区别吗:

  • RPN是all level NMS
  • RPN的anchor不考虑ignore region
  • RCNN的roi考虑ignore region 感觉42.4的MR好高啊 一直跑不出来...orz

这三个是关键影响点数的区别,别的大小差异应该没啥影响点数的了。

好的 谢谢 那我再试试 我最高只到过44.x 而且会牺牲AP的数值🤣

zehuichen123 avatar Jul 01 '20 13:07 zehuichen123

batch size应该是0.00125*12=0.015

shuangw98 avatar Jul 02 '20 13:07 shuangw98

我跑了他的代码 我的loss也有震荡的 因为他是每个GPU上的loss都print了一下 最后结果和readme差不多 或许跟你的batch size有什么关系?它最后的lr我记得是根据bs和卡数来算的 你看下能不能最后对上0.02的lr ps 一直想问下作者,该实现和mmdet上faster rcnn的实现除了以下几点还有别的区别吗:

  • RPN是all level NMS
  • RPN的anchor不考虑ignore region
  • RCNN的roi考虑ignore region 感觉42.4的MR好高啊 一直跑不出来...orz

请问你AP和JI能跑出paper里的结果吗,我用paddledet复现的faster r-cnn AP能到87.0,但JI(78.4)和MR(44.5)都差了1到2个点,

shuangw98 avatar Jul 02 '20 13:07 shuangw98

我已经注意到了MR相关的问题,该版本相对于megengine开源版本点数较低。似乎由一个非常坑爹的bug/feature导致,我会在一到两天内解决。

xg-chu avatar Jul 02 '20 13:07 xg-chu

我跑了他的代码 我的loss也有震荡的 因为他是每个GPU上的loss都print了一下 最后结果和readme差不多 或许跟你的batch size有什么关系?它最后的lr我记得是根据bs和卡数来算的 你看下能不能最后对上0.02的lr ps 一直想问下作者,该实现和mmdet上faster rcnn的实现除了以下几点还有别的区别吗:

  • RPN是all level NMS
  • RPN的anchor不考虑ignore region
  • RCNN的roi考虑ignore region 感觉42.4的MR好高啊 一直跑不出来...orz

请问你AP和JI能跑出paper里的结果吗,我用paddledet复现的faster r-cnn AP能到87.0,但JI(78.4)和MR(44.5)都差了1到2个点,

我MR也最高到44.几,但是之前我对齐的时候发现RCNN阶段如果考虑ignore区域会经常存在roi凑不满512个(因为考虑到ignore,可能bg挑出来后不能当做bg),但是我看crowddet存在的情况比较少,但是具体哪里导致这个问题我还是没有找到...

zehuichen123 avatar Jul 03 '20 01:07 zehuichen123

MR相关感觉没问题了,修改fpn_anchor_target,py和learning rate decay即可。

xg-chu avatar Jul 08 '20 05:07 xg-chu

没碰到过。。

xg-chu avatar Aug 05 '20 12:08 xg-chu

那请问 你的图片数据是怎么存放的呢?是解压在一个文件夹里么? 这个repo的代码训练一直有问题,不知道是配置的问题....

bingnoi avatar Aug 05 '20 12:08 bingnoi

那请问 你的图片数据是怎么存放的呢?是解压在一个文件夹里么? 这个repo的代码训练一直有问题,不知道是配置的问题....

你说的有问题指的具体是什么问题呢? 图片数据都解压到一个文件夹就可以了。

xg-chu avatar Aug 05 '20 13:08 xg-chu

我使用的是Crowddet的数据集,train和val的图片是在一个文件夹里的 训练时 常常出现loss为inf 或 RuntimeError: CUDA error: device-side assert triggered 的错误 请问可以解答一下吗

bingnoi avatar Aug 06 '20 02:08 bingnoi

我使用的是Crowddet的数据集,train和val的图片是在一个文件夹里的 训练时 常常出现loss为inf 或 RuntimeError: CUDA error: device-side assert triggered 的错误 请问可以解答一下吗 loss为inf我在8卡上跑的时候很少碰到,实在多了可以调一下learning rate。 RuntimeError: CUDA error 没有碰到过。

xg-chu avatar Aug 06 '20 03:08 xg-chu

你好谢谢你的解答。我定位到的问题是 Assertion index >= -sizes[i] && index < sizes[i] && "index out of bounds" failed. 但不明白是不是数据集加载过程中出现了问题。

bingnoi avatar Aug 08 '20 06:08 bingnoi

你好谢谢你的解答。我定位到的问题是 Assertion index >= -sizes[i] && index < sizes[i] && "index out of bounds" failed. 但不明白是不是数据集加载过程中出现了问题。

这个assertion并不发生在我的代码内部,我也说不准是什么原因,具体位置你得自行定位排查了。

xg-chu avatar Aug 08 '20 10:08 xg-chu

MR相关感觉没问题了,修改fpn_anchor_target,py和learning rate decay即可。

看起来fpn_anchor_target的修改是为了在一个gt匹配到多个anchor且IOU一样大时能有一个随机性而不是每次固定样本,对吗?但是这种case实际的时候会发生吗?IOU什么情况下会一样大?感觉只有gt匹配的gt的时候才会严格一样

xingyuanbu avatar Sep 02 '20 08:09 xingyuanbu

MR相关感觉没问题了,修改fpn_anchor_target,py和learning rate decay即可。

看起来fpn_anchor_target的修改是为了在一个gt匹配到多个anchor且IOU一样大时能有一个随机性而不是每次固定样本,对吗?但是这种case实际的时候会发生吗?IOU什么情况下会一样大?感觉只有gt匹配的gt的时候才会严格一样

是的,为了避免每次训练都选择固定方位的anchor。gt和anchor进行匹配的时候,很可能出现anchor从gt一条边上边扫过去,iou是相等的这种情况。

xg-chu avatar Sep 04 '20 15:09 xg-chu

我跑了他的代码 我的loss也有震荡的 因为他是每个GPU上的loss都print了一下 最后结果和readme差不多 或许跟你的batch size有什么关系?它最后的lr我记得是根据bs和卡数来算的 你看下能不能最后对上0.02的lr ps 一直想问下作者,该实现和mmdet上faster rcnn的实现除了以下几点还有别的区别吗:

  • RPN是all level NMS
  • RPN的anchor不考虑ignore region
  • RCNN的roi考虑ignore region 感觉42.4的MR好高啊 一直跑不出来...orz

请问你AP和JI能跑出paper里的结果吗,我用paddledet复现的faster r-cnn AP能到87.0,但JI(78.4)和MR(44.5)都差了1到2个点,

我MR也最高到44.几,但是之前我对齐的时候发现RCNN阶段如果考虑ignore区域会经常存在roi凑不满512个(因为考虑到ignore,可能bg挑出来后不能当做bg),但是我看crowddet存在的情况比较少,但是具体哪里导致这个问题我还是没有找到...

你好,想和你交流mmdet上融入该算法的问题,根据你说的差异的这三点,对于第一点和第二点,麻烦问一下具体代码体现在哪里

hanyanLWD avatar Sep 15 '20 02:09 hanyanLWD

@hanyanLWD 第一点只需要改config就可以了 https://github.com/open-mmlab/mmdetection/blob/11b1ef830aa7c8c054d8b5346fe0966e643d473c/configs/base/models/faster_rcnn_r50_fpn.py#L75 把nms_across_levels改成True 第二点的话不用管的 只要把不ignore的gt拿去算label就可以了

zehuichen123 avatar Sep 15 '20 04:09 zehuichen123

@zehuichen123 谢谢,我把emd部分移植到了mmdet faster rcnn中,但是map的结果很差,但是loss正常下降,不知道是什么原因

hanyanLWD avatar Sep 15 '20 06:09 hanyanLWD

@hanyanLWD 如果很差的话应该是哪里写错了 我在simpledet上复现了一下emd 虽然baseline没达到这个repo上的点 但是最后加上emd涨点的幅度跟这篇差不多= =

zehuichen123 avatar Sep 15 '20 08:09 zehuichen123

@zehuichen123 在我的数据集中密集物体是比较少的,对于只有一个gt的图片,我是在gt中额外生成了一个gt=[0,0,0,0,-1],就是说这个假的gt框是全零,label是-1 ,这样做法对吗

hanyanLWD avatar Sep 15 '20 10:09 hanyanLWD

额 那得看mmdet是怎么计算cls和reg loss的 你可以写一个demo调用一下它的cls 和 reg loss看看你这个label是不是不算[0,0,0,0,-1]的loss了

zehuichen123 avatar Sep 15 '20 11:09 zehuichen123

File "/home/liangminghao.srtp2020/anaconda3/envs/fasterRCNN/lib/python3.7/site-packages/torch/autograd/grad_mode.py", line 15, in decorate_context return func(*args, **kwargs) File "../lib/det_oprs/find_top_rpn_proposals.py", line 31, in find_top_rpn_proposals offsets = rpn_bbox_offsets_list[l][bid]
IndexError: index 1 is out of bounds for dimension 0 with size 1

File "../lib/det_oprs/find_top_rpn_proposals.py", line 52, in find_top_rpn_proposals batch_proposals, box_min_size * im_info[bid, 2]) File "../lib/det_oprs/bbox_opr.py", line 8, in filter_boxes_opr keep = (ws >= min_size) * (hs >= min_size) File "/home/liangminghao.srtp2020/anaconda3/envs/fasterRCNN/lib/python3.7/site-packages/torch/tensor.py", line 28, in wrapped return f(*args, **kwargs) RuntimeError: CUDA error: an illegal memory access was encountered

File "../lib/det_oprs/fpn_anchor_target.py", line 76, in fpn_anchor_target boxes[bid], im_info[bid], anchors_perlvl) File "../lib/det_oprs/fpn_anchor_target.py", line 32, in fpn_anchor_target_opr_core_impl valid_gt_boxes = gt_boxes[:int(im_info[5]), :] RuntimeError: CUDA error: misaligned address

你好,我们在用visdrone的数据集训练,训练环境是2080四卡,连一个完整的epoch都跑不了

bingnoi avatar Oct 17 '20 09:10 bingnoi

File "/home/liangminghao.srtp2020/anaconda3/envs/fasterRCNN/lib/python3.7/site-packages/torch/autograd/grad_mode.py", line 15, in decorate_context return func(*args, **kwargs) File "../lib/det_oprs/find_top_rpn_proposals.py", line 31, in find_top_rpn_proposals offsets = rpn_bbox_offsets_list[l][bid] IndexError: index 1 is out of bounds for dimension 0 with size 1

File "../lib/det_oprs/find_top_rpn_proposals.py", line 52, in find_top_rpn_proposals batch_proposals, box_min_size * im_info[bid, 2]) File "../lib/det_oprs/bbox_opr.py", line 8, in filter_boxes_opr keep = (ws >= min_size) * (hs >= min_size) File "/home/liangminghao.srtp2020/anaconda3/envs/fasterRCNN/lib/python3.7/site-packages/torch/tensor.py", line 28, in wrapped return f(*args, **kwargs) RuntimeError: CUDA error: an illegal memory access was encountered

File "../lib/det_oprs/fpn_anchor_target.py", line 76, in fpn_anchor_target boxes[bid], im_info[bid], anchors_perlvl) File "../lib/det_oprs/fpn_anchor_target.py", line 32, in fpn_anchor_target_opr_core_impl valid_gt_boxes = gt_boxes[:int(im_info[5]), :] RuntimeError: CUDA error: misaligned address

你好,我们在用visdrone的数据集训练,训练环境是2080四卡,连一个完整的epoch都跑不了

试试减小batch size或者减小input的大小。

xg-chu avatar Oct 28 '20 07:10 xg-chu

@hanyanLWD Hi, I'm trying to remodel the EMD part on mmdet, but several problems happened. Could you like to share your model on mmdet with me?

SuperTyrael avatar Nov 18 '20 03:11 SuperTyrael

我跑了他的代码 我的loss也有震荡的 因为他是每个GPU上的loss都print了一下 最后结果和readme差不多 或许跟你的batch size有什么关系?它最后的lr我记得是根据bs和卡数来算的 你看下能不能最后对上0.02的lr ps 一直想问下作者,该实现和mmdet上faster rcnn的实现除了以下几点还有别的区别吗:

  • RPN是all level NMS
  • RPN的anchor不考虑ignore region
  • RCNN的roi考虑ignore region 感觉42.4的MR好高啊 一直跑不出来...orz

请问你AP和JI能跑出paper里的结果吗,我用paddledet复现的faster r-cnn AP能到87.0,但JI(78.4)和MR(44.5)都差了1到2个点,

我MR也最高到44.几,但是之前我对齐的时候发现RCNN阶段如果考虑ignore区域会经常存在roi凑不满512个(因为考虑到ignore,可能bg挑出来后不能当做bg),但是我看crowddet存在的情况比较少,但是具体哪里导致这个问题我还是没有找到...

请问,现在你和readme对齐了吗?MR部分我仍然还没对齐

w-sugar avatar Mar 05 '21 07:03 w-sugar