xmengli / H-DenseUNet

TMI 2018. H-DenseUNet: Hybrid Densely Connected UNet for Liver and Tumor Segmentation from CT Volumes
526 stars 161 forks source link

Some questions about codes? #7

Closed mingqizhang closed 5 years ago

mingqizhang commented 5 years ago

您好,我对代码有几点不是很清楚,能解答一下嘛,万分感谢~~~ (1)在训练dense-2dunet是时,训练数据应该类似于shuffle的吧,并没有将3D的数据块转换成2D的训练。 (2)在训练3D的时候,3dpart和end2end有什么区别吗,模型好像没什么区别。 (3)在训练3D的时候,使用的是一块gpu,batch_size只能设置1,设置其他的在最后数据变换的时候会报错。

Albelt commented 5 years ago

作者是香港中文大学的,貌似不会中文(我猜测),我说一下我的理解: 1.3D的数据转换成2D了,只是这个2D跟我们平时理解的不一样,她是三张原图放在一起作为2D网络 Input,同时取三张原图中间那张对应的标签作为2D网络的 Label,所以从这个意义上来讲,输入是二维的。训练数据没有进行shuffle,但是进行了随机采样,也起到了数据增强的效果。 2.3dpart和end2end两种模式使用的是同一个网络结构,即端到端的模型,这个模型包括一个2D DenseUNet,一个3D DenseUNet和最后一个简单的融合层HFF,这两种训练模式的差别在于:使用3dpart模式时,2D部分的参数是不可变的(代码中2D DenseUNet网络的trainable参数设置成了false),也就是固定2D网络参数,单独训练3D网络(以及最后面的HFF);而使用end2end模式,2D部分的参数是可变的(代码中2D DenseUNet网络的trainable参数设置成了true),这个时候2D、3D网络和HFF都已经训练完了,再进行一次融合训练,相当于fine tune。end2end模式训练结束后整个训练过程才算完事。 3.batch_size设置成其他会报错,这是因为你设置的时候只改了一处的batch size,应该同时修改数据配置和网络配置处的batch size。其实设置成1已经接近极限了,因为最后的数据是4x8=32张224x224的图。因为网络比较深,参数6000多万虽然不占多少显存,但是中间层的计算结果需要留在显存中供反向传播梯度更新使用,所以会占据相当大的显存,具体你可以算一下,但是我不知道keras会保存哪些中间计算结果,所以我也没算过。

yangsenwxy commented 5 years ago

您好,我对模型的预测有些不太懂,您模型预测的时候需要livermask,那怎么得到livermask呢

JunMa11 commented 5 years ago

@yangsenwxy The the given liver mask is generated from a simple ResNet. Please refer to issue 5