MultiPoseNet.pytorch icon indicating copy to clipboard operation
MultiPoseNet.pytorch copied to clipboard

different input size of the two subnet when training

Open accountcwd opened this issue 6 years ago • 10 comments

你好,我注意到在training中,keypoint_subnet 的输入是480x480,而detection_subnet的是608x608,请问是出于什么考虑才设置不同的分辨率去训练这两个网络呢?

另外,我训练的keypoint_subnet经过48个epoch,val_loss为0.00312(上一个best为35epoch时的0.00313),这结果可以吧?

accountcwd avatar Jul 29 '19 01:07 accountcwd

你好,

不同分辨率是根据Multipose及RetinaNet两篇论文的设定。实际上可以是相同的。

loss部分我不太确定。可能较好的loss应该是0.00048左右?可以用multipose_keypoint_val.py文件测试一下我的baseline model下的loss。个人感觉需要训练更多的epoch。

LiMeng95 avatar Jul 29 '19 04:07 LiMeng95

你好,

不同分辨率是根据Multipose及RetinaNet两篇论文的设定。实际上可以是相同的。

loss部分我不太确定。可能较好的loss应该是0.00048左右?可以用multipose_keypoint_val.py文件测试一下我的baseline model下的loss。个人感觉需要训练更多的epoch。

明白了,那我之后尝试一下以480的分辨率输入训练detect部分,看看效果对比一下会如何。

keypoint subnet目前训练到54个epoch,按照ReduceLROnPlateau的规则,3次loss没改变lr就变为1/10,学习率已经变成1.e-11,我觉得应该没什么训练下去的必要了。

accountcwd avatar Jul 29 '19 04:07 accountcwd

你好,

不同分辨率是根据Multipose及RetinaNet两篇论文的设定。实际上可以是相同的。

loss部分我不太确定。可能较好的loss应该是0.00048左右?可以用multipose_keypoint_val.py文件测试一下我的baseline model下的loss。个人感觉需要训练更多的epoch。

抱歉又来打扰你了,我用multipose_keypoint_val.py测了你提供的baseline我训练出来的模型,以下是对比信息。

baseline model

Validation: epoch 0[200/204] heatmap_loss_k2: 0.0005163718 heatmap_loss_k3: 0.0005394759 heatmap_loss_k4: 0.0006861072 heatmap_loss_k5: 0.0009484939 heatmap_loss: 0.0004858993 max_ht: 1.0583070641 min_ht: -0.0239098679 (0.20/0.34s, fps:95.3, rest: 0:00:01) Validation loss: mean: 0.00315855001327673, std: 0.000935931666787233

my best model

Validation: epoch 0[200/204] heatmap_loss_k2: 0.0005108646 heatmap_loss_k3: 0.0005336166 heatmap_loss_k4: 0.0006818449 heatmap_loss_k5: 0.0009456928 heatmap_loss: 0.0004787863 max_ht: 1.0526026378 min_ht: -0.0250285474 (0.19/0.33s, fps:97.6, rest: 0:00:01) Validation loss: mean: 0.0031334521955417873, std: 0.0009189170184479267

注意到你说的比较理想的loss是0.00048,我想应该是指 heatmap_loss,那么我这个模型keypoint部分应该算是复现你的baseline了。

接下来我注意到在决定best model时衡量模型性能的标准应该是这个Validation loss: mean,即0.00313这个量级的值,这个数值没理解错的话应该是上面5层heatmaploss的总和,这应该是用intermediate supervision的方法来优化训练的。但是衡量模型性能的话是不是只取最后那个heatmap_loss比较好呢?

可能表达的不太好,请谅解~

accountcwd avatar Jul 29 '19 06:07 accountcwd

对的,我觉得使用最后一个heatmap_loss较好。这个Validation loss仅作参考。最后评价模型性能还是用MAP的。

LiMeng95 avatar Jul 29 '19 09:07 LiMeng95

有办法自定义设置ReduceLROnPlateau的监测指标(heatmap_loss)吗?

另外我想问max_ht、min_ht这两个是用来干什么的?看定义像是mask任务的东西,但是不太明白。

accountcwd avatar Jul 30 '19 08:07 accountcwd

ReduceLROnPlateau是用来检测loss变化的,具体设置见:multipose_keypoint_train.py#L112

max_ht、min_ht仅用于观察生成heatmap的最大值最小值,与GT对比。不参与loss计算。

LiMeng95 avatar Jul 31 '19 01:07 LiMeng95

ReduceLROnPlateau是用来检测loss变化的,具体设置见:multipose_keypoint_train.py#L112

max_ht、min_ht仅用于观察生成heatmap的最大值最小值,与GT对比。不参与loss计算。

感谢,ReduceLROnPlateau好像只能默认检测网络最终的loss,并不能自己指定一个指标?

accountcwd avatar Jul 31 '19 08:07 accountcwd

你好,

ReduceLROnPlateau检测的指标应该是可以自定义的。在初始化过程中可以设定。具体可以看一下ReduceLROnPlateau的代码。稍作修改就可以了

LiMeng95 avatar Aug 02 '19 08:08 LiMeng95

对的,我觉得使用最后一个heatmap_loss较好。这个Validation loss仅作参考。最后评价模型性能还是用MAP的。

大神,可以解释一下为什么heatmap loss的数量级会这么小吗?以及单独看keypoint subnet是不是除了用validation loss,没有别的评价指?因为detection的话还可以用IOU计算单独detection subnet的Map作为评价指标,但是keypoint subnet的结果是不知道点属于哪一个具体的人的,所以像OKS这种指标在这个单独网络里是不是不适用的?

BananaLv26 avatar Aug 05 '19 04:08 BananaLv26

你好,

  1. heatmap的ground truth制作时,采用峰值为1的高斯,没有标注的地方GT值为0。而且计算时采用了mean方式计算MSE,所以整体数量级会较小。

  2. 目前代码里的单独多人keypoint subnet只能用自定义的loss计算,暂时没有其他评价指标。除非把所有预测keypoint坐标取出来,与GT中所有坐标值对应,也是可以计算OKS的,但需要修改pycocotools的代码,现有官方代码是做不到多人情况的。

LiMeng95 avatar Aug 05 '19 06:08 LiMeng95