mmdet训练消防模型时,提示test result is empty
1.排查数据问题,包括输入图片尺寸是否统一,coco数据格式是否正确,是否存在脏数据,路径是否正确等,通过可视化暂时未发现问题
2.是否是模型收敛问题?是否由于消防门目标太大,anchor框设置不对?是否类别不平衡问题?(均不可能,不然至少会有检测效果)
3.用dataset_demo可视化,发现输入标签有问题,全是(-1,-1,-1,-1,-1),通过单步调试,查看dataset处理的数据流,最终发现是标签问题,
实际上dataset的代码写的不鲁棒,未能考虑当coco文件中的multilabel为空的情况
最终实际上是因为mmconvertor中转换为coco格式时,multi_labels=True if “train” in mode else False,这一行注释掉的话,coco标签里面会生成一个空的multi_id,而mmdet中的dataset未考虑为空的情况,生成了错误的多标签,于是将dataset中增加判断mutti_id为空时跳过多标签
整个排查花费了接近4天,有史以来耗时最久的一次,
总结:问题可能出现在任何地方,有的时候可以说简直是见鬼了,必须耐心调试,检查数据流,同时要熟悉模型,熟悉代码才能做到更好的排查,平时代码习惯也要养成,不要给以后挖坑。