将VOC数据集转成coco数据集格式

之前因为需要用到facebook的Detectron进行测试,但这个平台只能使用coco格式的数据集。所以找了一些资料进行格式转换。

https://blog.csdn.net/meccaendless/article/details/79457330 这个博客的资料挺好的,但是在我照着做的时候也是碰到了一些坑,所有写出来一下。


首先,需要的数据内容,annotion这个肯定要有,里面是xml的文件,每个对应自己的图片。图片文件夹,就voc数据库中的那个名字就行。然后imageset文件夹中的main,需要在里面放上val、train、trainval的txt文件,这个在格式转换时候需要有,而且这里面会有坑,我下面会讲。


下载cocoapi,地址在这 https://github.com/cocodataset/cocoapi

cocoapi里面已经帮我们写好相关接口,能直接在matlab里面讲voc格式的数据集转成coco的,所以我们只要按照要求来就行了。关于路径什么的,你可以按照代码里的来放置,当然也可以修改代码。

新建一个matlab文件,调用。需要注意的是,这里面的val、train等就是调用上面说到的txt文件。里面写的是你自己分好的测试集和训练集名称(就是去掉.jpg的)

mex('CXXFLAGS=\$CXXFLAGS -std=c++11 -Wall','-largeArrayDims',...  
    'private/gasonMex.cpp','../common/gason.cpp',...  
     '-I../common/','-outdir','private');  
 CocoUtils.convertPascalGt( 'D:/datasets', '2013', 'val', 'D:/datasets/pascal_val2013.json')  
 CocoUtils.convertPascalGt( 'D:/datasets', '2013', 'test', 'D:/datasets/pascal_test2013.json') 

好了,下面是我碰到的大坑,就是这个txt。我一开始用的是windows自带的txt读取的,发现所有的文件名连在一起。心想那很简单啊,直接遍历,然后把文件名直接添加就好了。但是出错了。

后来用notepad++打开,发现其实是有换行的。ok,那我加上换行符。还是不行。

扫描二维码关注公众号,回复: 935860 查看本文章

突然想到,讲道理有换行符那一开始我就应该看到,为什么两个软件里面看到的不一样呢?后来发现是换行符的问题。

你可以在notepad++里面显示所有符号看一下,voc自带的txt的换行符是LF,windows自带的是RC+LF,mac是RC。嗯,很坑爹。

所以其实也很简单,先换行,再notepad++里面的  编辑, 文档格式转换  ,可以先转成window再转成unix(因为此时是混合 格式的,先转成一种)。ok,然后就能用上面那个代码轻松转换了。

遍历添加txt的代码,我这个lowb的代码你们也可以参考下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time    : 2018/3/28 9:08
# @Author  : He Hangjiang
# @Site    : 
# @File    : DivideImgByJson.py
# @Software: PyCharm

import json
import os
import shutil

inputfile = []
inner = {}

floderaddress = 'J:/object_dection/datasets/train2014'

file_all = os.listdir(floderaddress) #路径下所有文件名

print(len(file_all))
print(type(file_all))
print(file_all[0])
print(file_all[0][0:11])

with open("J:/object_dection/datasets/train.txt","a") as f:
    for i in file_all:
        fileName = i[:11] + "\r"
        # if fileName != "2013_000030":
        f.writelines(fileName) 

至于说路径错误什么的,你们看自己具体情况吧,我这边也不能给你解决。

猜你喜欢

转载自blog.csdn.net/hehangjiang/article/details/79840638