yolox训练不同数据集注意事项

问题

先后训练两个数据集,都是VOC格式,仅有图片和标签不同,那么怎么对他们进行训练?

答:直觉就是,配置好一次环境,先训练第一个数据集,然后训练第二个数据集的时候,把数据集文件夹内容替换,其余一律不变。

但这样有一个致命错误:AP始终很小,可能是0.00000XXX。

原因

因为两个数据集的标注工作是分别在labelme和labelimg上完成的,还是有一些细微区别,所以首先怀疑数据集本身的问题,于是我做了个迷你版的数据集,只有10张图片,严格按照VOC2007格式要求来做,然后训练。

然后我就发现了问题,出现一个报错,没有截图,大概意思是找不到名为‘00022’的图片。

但是我这次只做了10张图片的数据集,编号1-10,根本没有名为22的图片,这说明,虽然我在用新的数据集,但程序用的还是上一个数据集的某些东西。应该是类似‘缓存’的东西没有清理。

然后我就在各个配置群文件中找,在YOLOX/yolox/evaluators/voc_eval.py中找到这样一段代码:

显然这是一段关于缓存文件夹的东西,’annots.pkl’貌似代表着由标签文件生成的某种东西。

大师,我悟了!只要找到这个缓存文件夹,把它删掉即可!验证正确!

怪不得删缓存之前AP极小但不为0,不为0说明训练的配置是有效的,AP极小就是因为用于比较IOU的标签是原来是原来数据集上的,根本就没法对应新的数据集图片。

再仔细一看缓存文件夹下还有子文件夹,命名为test,猜测是train.py里某个自定义的属性值,但奇怪的是没找到哪里设置了test,可能这是默认的名字,懒得深究了

总结

切换数据集训练前,删除数据及文件夹同目录下的annotations_cache文件夹!

然后python setup.py install一下,这可能是根据配置文件重建一下yolox的什么什么。。?瞎搞一下吧


yolox训练不同数据集注意事项
https://xinhaojin.github.io/2022/03/31/yolox训练不同数据集注意事项/
作者
xinhaojin
发布于
2022年3月31日
许可协议