ChongQingNoSubway / SelfReg-UNet

Code for the paper "SelfReg-UNet: Self-Regularized UNet for Medical Image Segmentation "
MIT License
37 stars 5 forks source link

关于kd_loss #10

Closed meitiankuaileduoyidian closed 1 month ago

meitiankuaileduoyidian commented 1 month ago

您好感谢您的工作 您在论文中仅针对纯cnn或纯Transformer的网络使用了kd_loss,请问您有没有在混合cnn-Transformer的网络结构里尝试过呢? 我在TransUnet中尝试使用kd_loss,但是总损失函数振荡不收敛。仅对解码器部分使用kd_loss也会出现同样的问题。 请问您有没有什么建议呢?

ChongQingNoSubway commented 1 month ago

目前我们没有尝试过一些混合的模型像Hiformer这种. 是因为CNN和transformer的feature不在同一个scale吗?或者CNN主要不是permutation invariant的原因导致的吗? 可能需要深入探索一下.

你仅在decoder使用是在每个conv 3x3之后吗? 这样应该是可行的.

meitiankuaileduoyidian commented 1 month ago

我在encoder部分的使用,其实仅局限于TransUnet中encoder的cnn部分,将其跳跃连接输出进行计算。 我在仅decoder部分的使用是在3x3的conv之后的,与您网络中conv一致,很奇怪他确实不可行。我将mse替换为ce,loss收敛了但提升不大,仅有0.2左右

ChongQingNoSubway commented 1 month ago

你是否尝试过只有decoder的部分执行这个loss? 如果是这样想要扩展到非对称结构,你可以尝试一下投影到概率分布使用kl divergence.

meitiankuaileduoyidian commented 1 month ago

感谢您的回复,我有只在decoder部分执行,会出现振荡不收敛的现象。 KL散度我也有进行尝试,但是情况和mse类似,也是振荡不收敛。使用mse和KL散度的dice跟使用前差不多

ChongQingNoSubway commented 1 month ago

我感觉如果一直震荡的话,可以在进入loss之前normlize一下(torch.nn.functional.normalize). 把他的spatial dimension flatten了之后.

meitiankuaileduoyidian commented 1 month ago

感谢您提供的建议 微信图片_20240926083609 我这样进行了修改,loss如下所示 微信图片_20240926083438 修改后的loss似乎收敛了,可是仍会有大的波动,我不知道这是否正常。 修改后我的平均dice从81.5降低到了80.9,在性能上并不如使用ce计算。目前我主要还是对您的inter_fd进行使用,我的理解是inter_fd起到知识蒸馏的作用,但ce用于知识蒸馏似乎并不是呢么合适,final_layer作为teacher_model分布是变化的。 您能否给我一些其他的建议,期待您的回复

ChongQingNoSubway commented 1 month ago

你好,我相信CE和KL在某种程度也是等价的,都是最大似然拟合两个概率分布. 我在这里找到一些中文的参考资料: https://www.cvmart.net/community/detail/4100 但是也有人对这两种loss进行了比较, 也不乏有人使用CE进行蒸馏: https://www.reddit.com/r/MachineLearning/comments/ke1r2q/r_why_do_knowledge_distillation_papers_always_use/

我不确定混合的Unet是否有这样的特征导致训练不稳地,你可以尝试可视化一下CAM(没有inter_fd的情况下),是否符合文中观察到的现象. 可视化的代码在这里: https://github.com/ChongQingNoSubway/SelfReg-UNet/blob/main/src/visualize_cam.py