yhygao / CBIM-Medical-Image-Segmentation

A PyTorch framework for medical image segmentation
Apache License 2.0
260 stars 46 forks source link

data_conversion/acdc_3d.py中注意哪些参数? #1

Closed ruifenggong closed 2 years ago

ruifenggong commented 2 years ago

非常棒的框架,请问在使用自己的数据集时,需要在data_conversion/acdc_3d.py中注意哪些参数?

[def ResampleCMRImage(imImage, imLabel, save_path, patient_name, count, target_spacing=(1., 1., 1.)):](url)

我参照acdc_3d.py创建了一个自己数据集的mydataset_3d.py文件,但是发现ResampleCMRImage类中传入的target_spaceing为其他值时,比如(0.6481,0.6481,1),在trian的过程中,会出现RuntimeError: CUDA error: device-side assert triggered 的问题。试过其他spaceing值也是如此,但是采用默认的(1.5625,1.5625,5)是可以训练的。

另外,我使用的是CT的血管分割数据

请问这个spaceing值要如何设置?或者我还需要修改哪些地方?

yhygao commented 2 years ago

target_spacing应该是根据数据集设定的,我是follow了nnUNet的设定,target_spacing设为整个数据集spacing的中位数。这个数值只会影响输入图像的size,理论上应该不会导致CUDA error,我的实验中是没出过这个问题的。这个error可能是label数据出了问题,可以试着在loss之前看看label里面的值有没有超过classes类别的,或者跟你网络最后输出层channel数是不是匹配的上。

ruifenggong commented 2 years ago

target_spacing应该是根据数据集设定的,我是follow了nnUNet的设定,target_spacing设为整个数据集spacing的中位数。这个数值只会影响输入图像的size,理论上应该不会导致CUDA error,我的实验中是没出过这个问题的。这个error可能是label数据出了问题,可以试着在loss之前看看label里面的值有没有超过classes类别的,或者跟你网络最后输出层channel数是不是匹配的上。

感谢提醒。

我目前做的只有一个标签的分割。 在loss前这样处理后,能正常训练。

    label[label >= args.classes] = args.classes - 1
    label[label < 0] = 0

小建议,训练日志输出时,batchtime和training time数值相差不大,可以精简掉一个。 print('[%d/%d]: %d loss: %.5f, batch_time:%.5fs' % (epoch + 1, args.epochs, i, loss.item(), batch_time))

yhygao commented 2 years ago

感谢建议,这两个time是之前debug时候用的,忘记删掉了。这个框架目前还是非常初步的状态,有任何建议或者遇到什么bug欢迎提issue。感谢!