今天在做目标检测时,需要把.json批量转为.xml(VOC2007数据集格式),代码参考的是下面这篇文章
Labelme标注的json文件转成xml文件(voc2007所需格式)
把原代码中labelme_path和saved_path换成自己的文件路径就可以成功转格式了,原博代码很清晰,提供的代码转格式转得很成功
但在运行到划分文件这部分代码时出现了一个错误,ValueError: With n_samples=0, test_size=0.15 and train_size=None, the resulting train set will be empty.
见下图
在网上搜了下都说是sklearn版本太高(我这里的版本是0.24.0),要降成0.19.1,经查看train_test_split( )的函数说明,这个错误和版本没关系。
主要错误是输入的total_files变量为空,长度为0,所以报错。
然后找到total_files最开始定义的位置
在原博第98行
total_files = glob("./VOC2007/Annotations/*.xml")
"./VOC2007/Annotations/*.xml"的“.”指的是当前程序代码所在目录,我的目标保存文件夹VOC2007不在这个路径下,所以total_files是空的。将这行改为
total_files = glob(saved_path + "Annotations/*.xml")
问题解决
还需要注意检验是否转换成功和是否准确的步骤
- 打开labelImg软件
- 点击Change Save Dir,选择标注文件所在文件夹Annatations
- 点击Open Dir,选择图片所在文件夹JPEGImages
- 点击Next Image,一个一个查看,是否标注正确