Created by: heavengate
fix train on VOC on multi-GPU hang 问题表现: 多卡训练使用VOC数据集train --eval时,第一个snapshot没有问题,eval完第一个snapshot后会hang住 定位情况: 定位为pyreader不能正确读取数据,其中gt_box, gt_label为模型的输入,并在train中会被网络用到,eval中需要直接fetch这两个Variable,若在eval_prog里面将其置为persistable,再次train时pyreader无法正确读取数据,该情况须知会框架定位具体原因,是否需要修复? 解决方案:
- parse_fetch中不将extra_keys设为persistable,须确认使用gc是否会有问题
- 修改voc_eval中逻辑,不从模型input中获取gt_box, gt_label, 类似coco_eval一样,传进来anno_path, 在voc_eval中重新读取数据集gt
方案2潜在风险:
若通过anno_path的方式,须通过im_id匹配pred和gt,标准VOC数据集中image的名称有009247
和2008_002152
两种形式,其中第二种形式无法转换成int类型的im_id, 但基于ppdet目前VOC的分划,val部分的image名称全为第一种形式,可以转换成int类型的im_id。若用户自定义数据集,则需要要求用户的image名称均为数字类型,有此局限性
结论: gc下若未开启inplace,memory_opt,可不设置persistable,采用方法1
测试: python2/3 train eval精度正确