win10 tensorflow faster-rcnn 训练自己的数据集的问题记载
- 报错:ValueError: attempt to get argmax of an empty sequence
batch_size改成1,每次打印训练的图片。发现有的图片可以通过,有的报错。
接着查看出错图片的信息,不同程序的位置可能不一样,我的在self.roidb.
比如我的是47号图片有问题,展开之后发现boxes为空,实际该图片是有标记框的。
再追溯到该图片的xml文件。
<object>
<name>wrong</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>1</difficult>
<bndbox>
<xmin>307</xmin>
<ymin>64</ymin>
<xmax>319</xmax>
<ymax>76</ymax>
</bndbox>
</object>
<object>
<name>wrong</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>1</difficult>
<bndbox>
<xmin>351</xmin>
<ymin>71</ymin>
<xmax>377</xmax>
<ymax>85</ymax>
</bndbox>
</object>
该图片的两个目标都有difficult标签,所以有可能是屏蔽了difficult目标框。
找到lib/datasets/pascal_voc.py
在148行有config中的use_diff项,意思是如果‘use_diff’为True才加载图片标记中的difficult目标,否则不加载difficult目标。我这里设置成了False,所以导致有些目标框并没有加载成功。所以修改’use_diff’即可。位置应该在pascal_voc类的初始化当中。
另:注意修改之后删除data/cache下的文件,否则又会加载之前的数据。
总结:该报错可能是训练图片的某些信息没有正确导入,最好想办法定位到具体出错的图片,观察信息是否正确。我这里是屏蔽了difficult标签,导致部分目标信息没有加载成功。
如果随随便便就能成功,那胜利还有喜悦吗?加油!少年!