Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

BTCV #12

Open
DDBB-YL opened this issue Sep 10, 2024 · 16 comments
Open

BTCV #12

DDBB-YL opened this issue Sep 10, 2024 · 16 comments

Comments

@DDBB-YL
Copy link

DDBB-YL commented Sep 10, 2024

1d23f9f5218411e9444b6c395009e86c
作者您好我在使用BTCV数据集输入python ./data/synapse/ni12format.py命令时出现了这个问题 请问您该怎么解决呢?感谢您的回复。

@lin-tianyu
Copy link
Owner

如果你看了BTCV数据集的dataloader代码(./ldm/data/synapse.py)就会发现,预处理后的BTCV数据集存放在./data/synapse/train/./data/synapse/test/./data/synapse/test_vol/路径中。

而现在的./data/synapse/路径下是没有train/test/test_vol/文件夹的。因此你可以先提前创建这些文件夹然后再运行代码试试看。

当然也可以在代码中动态检查这些文件夹是否存在,若不存在则自动创建。欢迎提交PR~

@DDBB-YL
Copy link
Author

DDBB-YL commented Sep 11, 2024

感谢作者您的帮助 已经解决该数据集的问题。请问您STS-3D这个数据集我该下载图片里的哪个呢?
99f07815380789d01b18b360e6a14ac7

@lin-tianyu
Copy link
Owner

我是在这里下载的STS-3D数据集:https://tianchi.aliyun.com/competition/entrance/532087/information

@DDBB-YL
Copy link
Author

DDBB-YL commented Sep 11, 2024

感谢作者您的帮助 问题已经解决 非常感谢!

@DDBB-YL
Copy link
Author

DDBB-YL commented Sep 13, 2024

作者再次麻烦您一下,第一张图的BTCV数据集之前跑起来过断了再次跑的时候发现出现dice计算的问题 请问是我选择的yaml文件不对吗?第二张图的sts数据集在处理的时候出现这样的问题该怎么解决呢?感谢作者您的帮助!
92a3557ccb51c41f32fa8812fa2b7bcb
d93f78f3e335759477c4f549927745c4

@lin-tianyu
Copy link
Owner

  1. BTCV的这个问题挺奇怪的,似乎是没有正确读取到数据。你可以提供更多的细节给我,比如运行的训练命令、使用的yaml文件等;
  2. STS的这个问题的报错是Missing key num_classes,我认为这是sts3d-ldm-kl-8-concat-mode.yaml中的model - params下缺失了num_classes: 2参数导致的。你可以试试加入这个参数。如果修改后可以正确运行的话欢迎提交PR,这样我就可以把你加到collaborator~

@DDBB-YL
Copy link
Author

DDBB-YL commented Sep 14, 2024

1.训练命令:nohup python -u main.py --base configs/latent-diffusion/synapse-cls14-ldm-kl-8.yaml -t --gpus 1, --name btcv > nohup/btcv.log 2>&1 &
2.
1ab2a6d4a90a7de107eed13949b26bc4
作者我加上您说的参数了还是出现了图片里的问题。感谢您的回复!

@lin-tianyu
Copy link
Owner

lin-tianyu commented Sep 14, 2024

  1. 我们不支持14类,SDSeg是一个二类分割方法,请使用synapse-cls2-ldm-kl-8.yaml。我们会在后续的更新中澄清这一点。
  2. 请提供完整的报错和运行相关信息。这里的NameError: name 'trainer' is not defined涵盖的范围非常的广泛,只要任何一种错误导致trainer没有正常定义就会出错,所以无法分析问题。(而且你仔细看的话,这次的报错和上次不一样,在full_key处)

@DDBB-YL
Copy link
Author

DDBB-YL commented Sep 16, 2024

1f76e5d025c296ac8d91e986559f9c6
d30c1e90a3d407edc4fa071f8b66f54
df1213520d0466a6b02e6c19c01e2ee

作者您好 已经根据您说的方式进行修改 是因为我数据的存放位置不对导致的错误吗?

@lin-tianyu
Copy link
Owner

我看了一下STS3D的dataloader代码,ldm/data/sts3d.py里定义了一个DATA_PATH变量作为STS3D数据集的输入路径。请问你修改了这个变量吗?

顺便,你可以试试把原来的num_classes: 2去掉,仅仅修改这里的DATA_PATH变量,看看能不能运行。

如果num_classes: 2 + DATA_PATH 或者仅修改DATA_PATH两种方式都还是不行,就请你在ldm/data/sts3d.py的dataloader里面将实际读取到的路径打印到命令行输出看看,这对debug也有所帮助,谢谢~

@DDBB-YL
Copy link
Author

DDBB-YL commented Sep 19, 2024

QQ_1726761371842
QQ_1726761491219
QQ_1726761748348
作者您好 我尝试了很多次修改 每一次都是在epoh9终止,请问您这是什么原因呢?感谢您的回复。

@lin-tianyu
Copy link
Owner

抱歉,是我没有在README中解释清楚。

问题解释

基于你的log,你这里出现的问题在于没有正确的读取到测试集数据:
image
红框内的值应该是12,表示12个测试volumes。

而之所以会在epoch9的时候报错,是因为configs/latent-diffusion/synapse-cls2-ldm-kl-8.yaml中定义了log_dice_frequency: 5000,意味着每5000个training steps就会中断训练执行一次测试过程,而测试集又没有读取到,所以报错。这里可以看到错误出现在training steps为5000的时候:
image
没有读取到测试集数据自然就导致了你这里第三章图中的division by zero的错误。

解决方案

数据集中应该还有一个test_vol文件夹,存放了12个测试集数据的volumes及其对应的label文件:
image
这一步我应该是手动做的,所以没有反映在nii2format.py中。

一些细节

应该注意,synapse-cls2-ldm-kl-8.yaml中提到了一个SynapseValidation用于validation,和一个SynapseValidationVolume用于testing(二者都定义在ldm/data/synapse.py中),这二者的异同在于:

  1. SynapseValidationSynapseValidationVolume所使用的其实是完全相同的12个volumes里的数据,但前者是2D slices而后者是3D volumes;
  2. 在训练过程中的validation process使用SynapseValidation来计算相关的loss,而不计算分割指标(dice);训练过程中的testing process使用SynapseValidationVolume来计算分割指标,使得我们可以了解模型目前的分割效果如何。
  3. validation process的频率通过synapse-cls2-ldm-kl-8.yaml中的check_val_every_n_epoch来定义,对于BTCV数据集默认为10;testing process的频率通过log_dice_frequency来定义,对于BTCV数据集默认为5000 steps。

@DDBB-YL
Copy link
Author

DDBB-YL commented Sep 21, 2024

QQ_1726914467249
QQ_1726914486733
作者您好!根据您的建议进行修改后出现了如图所示得报错,该如何修改呢?感谢您的回复!

@lin-tianyu
Copy link
Owner

请你先尝试自己debug之后,告诉我debug过程中发现的现象,再整理成**现象+问题(+思考)**的格式来问问题。而不是“如图所示”就要让我分析出问题在哪,没有人有这个能力,也极少有报错这么简单。私以为直接甩张图就要作者将解决方案喂到嘴边的行为是不礼貌的,请理解。

提高所问问题的质量将很大程度上提升我们的沟通效率。谢谢!

For example,

  1. Attribute Error: 'list' object has no attribute 'shape'意味着seg_label_dict[k]是一个list;
  2. 往前找到第405行,可以知道seg_label_dict是来自模型的log_dice函数的返回值;
  3. README中提到了模型定义在ldm/models/ddpm.py中,根据这个文件以及推理代码scripts/slice2seg.py都可以看出log_dice函数的定义和模型在一起,因此找到ldm/models/ddpm.py中的log_dice
  4. 可以看到模型的第二个返回值seg_label_dict来自变量seg_label_pair
  5. ctrl+fcmd+f一下就可以找到seg_label_pair的定义,来自于1668-1684行;
  6. 这个代码段中又有很多存储为list格式的数据、数据预处理步骤,等等。

依次阅读并检查上述部分的代码将非常有助于发现问题。(上述步骤里其中有一步解释了为什么调用.shape的时候seg_label_dict[k]会是list类型,请自己找到答案)

解决问题后,希望能提交PR来帮助SDSeg代码库的更新,如果不熟悉PR的流程,也可以简单总结解决这些bug所进行的代码修改。感谢。

@lin-tianyu
Copy link
Owner

lin-tianyu commented Sep 24, 2024 via email

@lin-tianyu
Copy link
Owner

lin-tianyu commented Sep 25, 2024

我看了一下STS3D的dataloader代码,ldm/data/sts3d.py里定义了一个DATA_PATH变量作为STS3D数据集的输入路径。请问你修改了这个变量吗?

顺便,你可以试试把原来的num_classes: 2去掉,仅仅修改这里的DATA_PATH变量,看看能不能运行。

如果num_classes: 2 + DATA_PATH 或者仅修改DATA_PATH两种方式都还是不行,就请你在ldm/data/sts3d.py的dataloader里面将实际读取到的路径打印到命令行输出看看,这对debug也有所帮助,谢谢~

@DDBB-YL @catcatcat 我已经将STS3D数据集的相关设置文件(yaml, sts3d.py)进行了更新,有需要的话可以看看最新的代码。

此外,请务必将yaml文件中的increase_log_steps设置为False,即increase_log_steps: False。这会减少不必要的log过程,前期训练速度会大幅增加,谢谢。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants