问题描述
在进行深度学习学习的时候,需要将VOC数据集转换为COCO数据集,需要用到x2coco.py这个脚本程序,在aisudio里面准备好了自己的数据集,这个数据集是通过PaddleX的可视化界面导入后切分后形成的,如图所示。
其中,train_list.txt中的数据结构如下:
在aisudio中进行格式转换的代码如下:
%cd /home/aistudio/work/PaddleDetection/
!python tools/x2coco.py \
--dataset_type voc \
--voc_anno_dir /home/aistudio/data/data215116/D0004/ \
--voc_anno_list /home/aistudio/data/data215116/D0004/train_list.txt \
--voc_label_list /home/aistudio/data/data215116/D0004/labels.txt \
--voc_out_name /home/aistudio/data/data215116/coco_train.json
然而,运行的时候报错如下:
所谓的标注文件明明是存在的,但是就是不知道为什么总是找不到,找遍了网上所有的关于x2coco.py的使用教程,都没有这个错误的解决方法,真是百思不得其解。肿么办呢?
解决办法
最后再仔细查看错误的原因:
这里有一个\,应该是这个地方不太对,所以,查看train_list.txt文件发现里面的路径分隔符是“\”,把第一行改成“/”,如图,先试试看。
这时候发现,第一行数据没有问题了,问题定位到了第二行的数据,如图所示:
这说明,还真是这个问题,因为数据集比较简单,所以先手动修改一下数据集的结构吧。
然后再运行,果然转换完成了。一声叹息,这么一个小问题,耗费了好几天的时间。
问题归纳
首先排查这个问题的时候,是觉得都是飞桨一个体系的,PaddleX分割出来的数据结构应该也是通用的,没有想到会是这个问题,另一个问题是自己没有理解这个路径的分隔符的底层逻辑,所以没有及早的发现这个问题,需要好好打牢基础。