MIRACLE-Center / YOLO_Universal_Anatomical_Landmark_Detection

[MICCAI 2021] You Only Learn Once: Universal Anatomical Landmark Detection https://arxiv.org/abs/2103.04657
MIT License
79 stars 22 forks source link

2dunet权重问题 #23

Open yangyang117 opened 2 weeks ago

yangyang117 commented 2 weeks ago

你好,我看了下训练命令和源代码。 第一行是训练了一个2dunet模型,但是在训练第二个模型,gln的时候,并没有使用到2dunet的权重,在test以及过程中,有加载模型的权重,但是并没有说明是哪个权重。 在我看来,应该是训练了两个模型,一个2dunet,然后一个后处理模型gln,预测以及使用需要两个模型结合,请问是我哪里理解错误了吗?

heqin-zhu commented 2 weeks ago

你好,u2net 局部网络输出局部特征图,gln 全局网络输出全局特征图,最终输出的 heatmap 是局部特征图与全局特征图的逐点乘积。

yangyang117 commented 2 weeks ago

你好,u2net 局部网络输出局部特征图,gln 全局网络输出全局特征图,最终输出的 heatmap 是局部特征图与全局特征图的逐点乘积。

好的,了解了。 1.但是我看在训练gln的时候,用到了u2net,但是又没有加载权重。意思是2dunet是单独训练,gln单独训练(使用的默认的u2net权重) 2.最终预测的时候,才会把两个模型的训练权重都用上,是吗? 3.另外我看你们还提供了一个loadcheckpoint(python3 main.py -d ../runs -r GU2Net_runs -p train -m gln -l u2net -e 100 -c CHECKPOINT_PATH)这个是必须要做的,还是训练过程中断,从已经训练的权重中重新训练的命令呢? 4.我看预测时候(Test:python3 main.py -d ../runs -r GU2Net_runs -p test -m gln -l u2net -c CHECKPOINT_PATH)只提供了一个权重路径,这个是哪个权重呢?你提到heatmap需要逐点乘积,这部分是在哪个里面实现的呢?

heqin-zhu commented 2 weeks ago

你好,

之前说错了, GLN 就是论文中的 gu2net, 函数定义在这里,包含了局部网络 localnet (u2net) 和 全局网络 globalnet, 加载模型的时候就包含了两个子网络。这就是你的问题1和2的答案。对于问题3,训练时的 -c参数可选,一般是之前训练中断获得的模型。 对于问题4,这些 checkpoint_path 都指的是论文中的 gu2net (对应代码中的 GLN). heatmap 逐点乘积也是在 GLN 中实现的.

yangyang117 commented 2 weeks ago

你好,

之前说错了, GLN 就是论文中的 gu2net, 函数定义在这里,包含了局部网络 localnet (u2net) 和 全局网络 globalnet, 加载模型的时候就包含了两个子网络。这就是你的问题1和2的答案。对于问题3,训练时的 -c参数可选,一般是之前训练中断获得的模型。 对于问题4,这些 checkpoint_path 都指的是论文中的 gu2net (对应代码中的 GLN). heatmap 逐点乘积也是在 GLN 中实现的.

嗯嗯,谢谢。我还是有些疑问,就是第一个训练2dunet,训练之后的权重好像并没有应用在第二步训练gln的过程中。这个是我的主要疑惑点,感觉应该是忘记在代码中加载权重了。

heqin-zhu commented 2 weeks ago

GLN 包含 localnet(u2net), globalnet, 这两个网络是GLN 的子网络。训练过程只有一步,就是训练 GLN。代码中加载模型参数的地方也只有这一行代码。你可以在这一行代码前后打印出 state_dict,看看里面包含了哪些权重参数