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的什么什么。。?瞎搞一下吧