LiheYoung / UniMatch

[CVPR 2023] Revisiting Weak-to-Strong Consistency in Semi-Supervised Semantic Segmentation
https://arxiv.org/abs/2208.09910
MIT License
478 stars 60 forks source link

您好,想请教一个关于medical场景下的问题。 #28

Closed YKtzo closed 1 year ago

YKtzo commented 1 year ago

作者你好,我把医学场景下的backbone由unet换成了deeplabv3+,但由于医学图像是单通道的,无法使用预训练权重,只能从头开始训练,但出现了如下问题,我截取了一个epoch的日志,可以看的更清晰,就是在evaluation阶段,他的每一个dice都是0,请问这个是正常的吗,或者说是哪里出了问题。希望请您指教一下。

[2023-04-10 16:48:11,793][ INFO] ===========> Epoch: 3, LR: 0.00095, Previous best: 0.00 [2023-04-10 16:48:11,981][ INFO] Iters: 0, Total loss: 0.349 [2023-04-10 16:49:00,196][ INFO] Iters: 379, Total loss: 0.165 [2023-04-10 16:49:48,422][ INFO] Iters: 758, Total loss: 0.163 [2023-04-10 16:50:37,289][ INFO] Iters: 1137, Total loss: 0.161 [2023-04-10 16:51:25,787][ INFO] Iters: 1516, Total loss: 0.160 [2023-04-10 16:52:14,801][ INFO] Iters: 1895, Total loss: 0.159 [2023-04-10 16:53:03,536][ INFO] Iters: 2274, Total loss: 0.159 [2023-04-10 16:53:52,277][ INFO] Iters: 2653, Total loss: 0.157 [2023-04-10 16:54:40,751][ INFO] Iters: 3032, Total loss: 0.156 [2023-04-10 16:54:57,018][ INFO] Evaluation >>>> Class [0 Right Ventricle] Dice: 0.00 [2023-04-10 16:54:57,019][ INFO] Evaluation >>>> Class [1 Myocardium] Dice: 0.00 [2023-04-10 16:54:57,019][ INFO] Evaluation >>>> Class [2 Left Ventricle] Dice: 0.00 [2023-04-10 16:54:57,019][ INFO] Evaluation >>>> MeanDice: 0.00

LiheYoung commented 1 year ago

抱歉这样很难看出来问题,有可能是因为对模型输出的处理不当。

YKtzo commented 1 year ago

好的,谢谢您的回复

RanKoala commented 1 year ago

抱歉这样很难看出来问题,有可能是因为对模型输出的处理不当。

作者你好!我看论文是多卡代码,请问如果是单机单卡需要配置哪些参数?谢谢

LiheYoung commented 1 year ago

只需要在执行训练指令的时候将num_gpus定为1即可。

RanKoala commented 1 year ago

只需要在执行训练指令的时候将num_gpus定为1即可。

在本地IDE想调试代码,不使用.sh的方式运行代码,直接运行unimatch.py文件。这种情况下该如何指定呢? 目前直接运行在 rank = int(os.environ["RANK"])即会报错。 是否需要将unimatch.py里相关DDP的代码屏蔽? 谢谢作者耐心解答。

LiheYoung commented 1 year ago

由于需要传参,所以需要在command里执行,不能直接运行unimatch.py

RanKoala commented 1 year ago

由于需要传参,所以需要在command里执行,不能直接运行unimatch.py

nproc_per_node ,master_port这两个参数确实需要命令里传入,这是DDP机制决定吧(目前了解情况)。 不过我修改了unimatch.py里DDP的代码,可以直接运行了,感谢作者。

yunzhuC commented 1 year ago

nproc_per_node ,master_port这两个参数确实需要命令里传入,这是DDP机制决定吧(目前了解情况)。 不过我修改了unimatch.py里DDP的代码,可以直接运行了,感谢作者。

您好,我也是单机单卡本地IDE想调试代码,想问一下应该如何修改unimatch.py里DDP的代码使其可以直接运行呢?非常感谢!期待您的回复!也感谢作者的代码,很棒的工作!

RanKoala commented 1 year ago

将一些开始通过.sh脚本里传入的必要的参数通过argparse形式在unimatch.py里传入。然后将rank, world_size等获取判断的条件删除,接着再将model和data有关多卡的代码调整下就可以了。如:torch.nn.parallel.DistributedDataParallel,torch.nn.SyncBatchNorm.convert_sync_batchnorm(model),torch.utils.data.distributed.DistributedSampler

yunzhuC commented 1 year ago

将一些开始通过.sh脚本里传入的必要的参数通过argparse形式在unimatch.py里传入。然后将rank, world_size等获取判断的条件删除,接着再将model和data有关多卡的代码调整下就可以了。如:torch.nn.parallel.DistributedDataParallel,torch.nn.SyncBatchNorm.convert_sync_batchnorm(model),torch.utils.data.distributed.DistributedSampler

感谢您的指点!很有用!