AILab-CVC / YOLO-World

[CVPR 2024] Real-Time Open-Vocabulary Object Detection
https://www.yoloworld.cc
GNU General Public License v3.0
4.62k stars 447 forks source link

分割任务微调总卡住 #259

Open JiayuanWang-JW opened 6 months ago

JiayuanWang-JW commented 6 months ago

我使用yolo_world_v2_seg_l_vlpan_bn_2e-4_80e_8gpus_seghead_finetune_lvis.py在我自己的数据集上微调,总是训练到中途就停止,问题应该是梯度爆炸了。我调小了一些学习率还是不行。还有一种可能就是mmlab框架的问题,因为我看到有相似的issue在mmlab里。 但是这个方式训练出来的第5个epochs模型效果比较不错,第10个epochs我一直还没训练到过,每次到了第10个就会卡住,我设置的最大epochs是80。卡住的时候显存没满,但是显卡使用率全100%,就是不会继续训练了。以下是部分训练日志。

2024/04/17 20:28:38 - mmengine - INFO - Epoch(train)  [4][2500/2890]  base_lr: 1.0000e-04 lr: 9.2575e-05  eta: 8:29:42  time: 0.2868  data_time: 0.0022  memory: 6809  grad_norm: 192136.0025  loss: 283.9813  loss_cls: 176.2569  loss_bbox: 49.0313  loss_dfl: 44.5383  loss_mask: 14.1547
2024/04/17 20:28:53 - mmengine - INFO - Epoch(train)  [4][2550/2890]  base_lr: 1.0000e-04 lr: 9.2575e-05  eta: 8:29:27  time: 0.2924  data_time: 0.0022  memory: 6774  grad_norm: 555666.7429  loss: 176.4610  loss_cls: 64.5496  loss_bbox: 51.7177  loss_dfl: 45.5479  loss_mask: 14.6458
2024/04/17 20:29:07 - mmengine - INFO - Epoch(train)  [4][2600/2890]  base_lr: 1.0000e-04 lr: 9.2575e-05  eta: 8:29:11  time: 0.2891  data_time: 0.0023  memory: 6861  grad_norm: 909519.2610  loss: 225.1515  loss_cls: 116.6617  loss_bbox: 50.4214  loss_dfl: 43.5961  loss_mask: 14.4724
2024/04/17 20:29:22 - mmengine - INFO - Epoch(train)  [4][2650/2890]  base_lr: 1.0000e-04 lr: 9.2575e-05  eta: 8:28:53  time: 0.2862  data_time: 0.0022  memory: 6769  grad_norm: nan  loss: 557.5003  loss_cls: 438.8414  loss_bbox: 55.4688  loss_dfl: 48.1749  loss_mask: 15.0152

不过我按照您之前提供的检测任务新代码将优化器设置为SGD后,训练可以顺利进行,但是结果很糟糕......甚至无法正常分割任何内容,这是SGD的部分训练日志。

04/17 14:22:12 - mmengine - INFO - Epoch(train) [58][2750/2890]  base_lr: 1.0000e-04 lr: 3.0700e-05  eta: 6:26:39  time: 0.3600  data_time: 0.0047  memory: 6796  grad_norm: 1620.8358  loss: 241.3293  loss_cls: 55.1542  loss_bbox: 83.9340  loss_dfl: 86.1158  loss_mask: 16.1253
04/17 14:22:30 - mmengine - INFO - Epoch(train) [58][2800/2890]  base_lr: 1.0000e-04 lr: 3.0700e-05  eta: 6:26:21  time: 0.3584  data_time: 0.0048  memory: 6826  grad_norm: 1561.5729  loss: 242.0673  loss_cls: 54.9076  loss_bbox: 84.5381  loss_dfl: 86.3717  loss_mask: 16.2499
04/17 14:22:48 - mmengine - INFO - Epoch(train) [58][2850/2890]  base_lr: 1.0000e-04 lr: 3.0700e-05  eta: 6:26:02  time: 0.3572  data_time: 0.0047  memory: 6804  grad_norm: 1591.7277  loss: 242.3571  loss_cls: 55.5240  loss_bbox: 83.8791  loss_dfl: 86.4969  loss_mask: 16.4572
04/17 14:39:59 - mmengine - INFO - Evaluating bbox...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=300 catIds=all] = 0.039
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=300 catIds=all] = 0.143
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=300 catIds=all] = 0.009
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=     s | maxDets=300 catIds=all] = 0.031
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=     m | maxDets=300 catIds=all] = 0.081
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=     l | maxDets=300 catIds=all] = 0.056
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=300 catIds=  r] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=300 catIds=  c] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=300 catIds=  f] = 0.039
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 catIds=all] = 0.143
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=     s | maxDets=300 catIds=all] = 0.029
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=     m | maxDets=300 catIds=all] = 0.105
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=     l | maxDets=300 catIds=all] = 0.205
04/17 14:42:25 - mmengine - INFO - Evaluating segm...
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=300 catIds=all] = 0.000
 Average Precision  (AP) @[ IoU=0.50      | area=   all | maxDets=300 catIds=all] = 0.000
 Average Precision  (AP) @[ IoU=0.75      | area=   all | maxDets=300 catIds=all] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=     s | maxDets=300 catIds=all] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=     m | maxDets=300 catIds=all] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=     l | maxDets=300 catIds=all] = 0.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=300 catIds=  r] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=300 catIds=  c] = -1.000
 Average Precision  (AP) @[ IoU=0.50:0.95 | area=   all | maxDets=300 catIds=  f] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=   all | maxDets=300 catIds=all] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=     s | maxDets=300 catIds=all] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=     m | maxDets=300 catIds=all] = 0.000
 Average Recall     (AR) @[ IoU=0.50:0.95 | area=     l | maxDets=300 catIds=all] = 0.000
04/17 14:45:02 - mmengine - INFO - Epoch(val) [58][3334/3334]    lvis/bbox_AP: 0.0390  lvis/bbox_AP50: 0.1430  lvis/bbox_AP75: 0.0090  lvis/bbox_APs: 0.0310  lvis/bbox_APm: 0.0810  lvis/bbox_APl: 0.0560  lvis/bbox_APr: -1.0000  lvis/bbox_APc: -1.0000  lvis/bbox_APf: 0.0390  lvis/segm_AP: 0.0000  lvis/segm_AP50: 0.0000  lvis/segm_AP75: 0.0000  lvis/segm_APs: 0.0000  lvis/segm_APm: 0.0000  lvis/segm_APl: 0.0000  lvis/segm_APr: -1.0000  lvis/segm_APc: -1.0000  lvis/segm_APf: 0.0000  data_time: 0.0006  time: 0.2863

请问可以帮我分析一下原因吗?

JiayuanWang-JW commented 6 months ago

image 这是卡住时显卡的样子。

JiayuanWang-JW commented 6 months ago

我认为训练总卡住的原因是mmdet库有bug,我用单卡训练了一下,同样的配置文件,AdamW优化器可以正常训练,梯度一切正常,预测结果令人满意。可惜截至目前为止,mmdet并没有针对这个bug给出解决方案。

HGao-cv commented 6 months ago

我认为训练总卡住的原因是mmdet库有bug,我用单卡训练了一下,同样的配置文件,AdamW优化器可以正常训练,梯度一切正常,预测结果令人满意。可惜截至目前为止,mmdet并没有针对这个bug给出解决方案。

或许你可以尝试在你第十个epoch的时候把实验停了,然后接着第九个epoch(假设你保存下来了)继续训,我这边训练检测模型的时候也越到过卡住的,但是继续--resume之后可以正常训,如果又卡住,就继续接着训应该就可以,我最多只遇到过卡住两次的

JiayuanWang-JW commented 6 months ago

我认为训练总卡住的原因是mmdet库有bug,我用单卡训练了一下,同样的配置文件,AdamW优化器可以正常训练,梯度一切正常,预测结果令人满意。可惜截至目前为止,mmdet并没有针对这个bug给出解决方案。

或许你可以尝试在你第十个epoch的时候把实验停了,然后接着第九个epoch(假设你保存下来了)继续训,我这边训练检测模型的时候也越到过卡住的,但是继续--resume之后可以正常训,如果又卡住,就继续接着训应该就可以,我最多只遇到过卡住两次的

谢谢您的建议,我按照您的建议继续--resume训练,确实可以,但是在第13个epochs又卡住了,应该是多卡之间的通信出了问题,因为我看显存,服务器内存都没占满,只是显卡利用率都100%了,然后就卡住不训练了。 image

chenjiafu-George commented 6 months ago

我认为训练总卡住的原因是mmdet库有bug,我用单卡训练了一下,同样的配置文件,AdamW优化器可以正常训练,梯度一切正常,预测结果令人满意。可惜截至目前为止,mmdet并没有针对这个bug给出解决方案。

或许你可以尝试在你第十个epoch的时候把实验停了,然后接着第九个epoch(假设你保存下来了)继续训,我这边训练检测模型的时候也越到过卡住的,但是继续--resume之后可以正常训,如果又卡住,就继续接着训应该就可以,我最多只遇到过卡住两次的

谢谢您的建议,我按照您的建议继续--resume训练,确实可以,但是在第13个epochs又卡住了,应该是多卡之间的通信出了问题,因为我看显存,服务器内存都没占满,只是显卡利用率都100%了,然后就卡住不训练了。 image

你好 @JiayuanWang-JW ,我现在遇到的问题是,我同样拿自己的数据集进行训练,但是只有loss_cls损失下降,其他两个loss_bbox和loss_dfl损失一直为0,您能帮我分析一下对应的问题吗?谢谢

JiayuanWang-JW commented 6 months ago

我认为训练总卡住的原因是mmdet库有bug,我用单卡训练了一下,同样的配置文件,AdamW优化器可以正常训练,梯度一切正常,预测结果令人满意。可惜截至目前为止,mmdet并没有针对这个bug给出解决方案。

或许你可以尝试在你第十个epoch的时候把实验停了,然后接着第九个epoch(假设你保存下来了)继续训,我这边训练检测模型的时候也越到过卡住的,但是继续--resume之后可以正常训,如果又卡住,就继续接着训应该就可以,我最多只遇到过卡住两次的

谢谢您的建议,我按照您的建议继续--resume训练,确实可以,但是在第13个epochs又卡住了,应该是多卡之间的通信出了问题,因为我看显存,服务器内存都没占满,只是显卡利用率都100%了,然后就卡住不训练了。 image

你好 @JiayuanWang-JW ,我现在遇到的问题是,我同样拿自己的数据集进行训练,但是只有loss_cls损失下降,其他两个loss_bbox和loss_dfl损失一直为0,您能帮我分析一下对应的问题吗?谢谢

你好@chenjiafu-George , 这个问题我没遇到过,但我之前在issue中看到其他研究者在检测任务上遇到了同样的问题,你可以参考一下。loss为0的issue

Ricardoluffy commented 3 months ago

你好@JiayuanWang-JW ,我也遇到和你一样的问题,这个问题你解决了吗?只能用单卡训练了吗?