基于paddledetection将voc数据集转换为coco数据集

在paddledetection中训练目标检测模型有voc和coco两个数据格式,如在YOLOv3中需要voc数据,而在yolox中则需要coco数据集。博主也曾测试过将yolox任务配置项的数据集改为voc数据,则会带来很多报错(或是由于yolox中数据增强策略中某些key读取错误)。因此,在paddledetection中用到yolox等模型是需要将voc数据转换为coco数据。 所幸,在paddledetection中内置了格式转换功能,支持voc数据转coco。具体可以参考一下链接 docs/tutorials/PrepareDataSet.md · PaddlePaddle/PaddleDetection - Gitee.com

转换代码如下所示

python tools/x2coco.py \
        --dataset_type voc \
        --voc_anno_dir path/to/VOCdevkit/VOC2007/Annotations/ \
        --voc_anno_list path/to/VOCdevkit/VOC2007/ImageSets/Main/trainval.txt \
        --voc_label_list dataset/voc/label_list.txt \
        --voc_out_name voc_train.json

这里博主以自己的voc数据为例进行转换,博主的数据路径如下所示(其中ImageSets包含了已经划分好的数据,具体如图2所示)。这里有一个label_list.txt,里面的内容是数据标签列表。

ImageSets下的目录结构及文件详情如下所示,就是一堆不含后缀的文件名列表(包含训练集、验证集、测试集等)。如果ImageSets下没有这几个文件,可以参考下列链接中的章节1.1中的代码生成。mmdetection2的使用教程从数据处理、配置文件到训练与测试(支持coco数据和pascal_voc数据)_万里鹏程转瞬至的博客-CSDN博客_mmdetection使用教程

paddledetection中的转换代码是针对txt文件(单个训练集或测试集)的,不想mmdetection是针对针对数据集的。因此,转换命令有两条,分别针对训练集和测试集。输出的json文件目录为dataset/coco。执行以下两个命令时需要进入PaddleDetection目录。

python tools/x2coco.py \
        --dataset_type voc \
        --voc_anno_dir dataset/voc/VOCdevkit/VOC2007/Annotations/ \
        --voc_anno_list dataset/voc/VOCdevkit/VOC2007/ImageSets/Main/train.txt \
        --voc_label_list dataset/voc/label_list.txt \
        --voc_out_name instances_train2017.json\
        --output_dir dataset/coco/annotations
python tools/x2coco.py \
        --dataset_type voc \
        --voc_anno_dir dataset/voc/VOCdevkit/VOC2007/Annotations/ \
        --voc_anno_list dataset/voc/VOCdevkit/VOC2007/ImageSets/Main/test.txt \
        --voc_label_list dataset/voc/label_list.txt \
        --voc_out_name instances_val2017.json\
        --output_dir dataset/coco/annotations

在上述两个命令执行后,会在PaddleDetection目录下生成annotations目录,annotations目录下包含两个json文件。然后需要生成软连接,将原先voc数据集上的图像访问路径,为coco数据集也添加访问入口。由于博主的Paddledetection在home目录(在Linux中home路径等于~)下,所以博主的下面代码中的路径是~/PaddleDetection,如果您的PaddleDetection在其他路径下,请按照实际情况修改。

ln -s ~/PaddleDetection/dataset/voc/VOCdevkit/VOC2007/JPEGImages ~/PaddleDetection/dataset/coco/train2017 -r
ln -s ~/PaddleDetection/dataset/voc/VOCdevkit/VOC2007/JPEGImages ~/PaddleDetection/dataset/coco/val2017 -r

按照上述命令进行修改后,即可用yolox训练自己的数据集了。

猜你喜欢

转载自blog.csdn.net/a486259/article/details/125696492