News: 最近开始论文实验,需要重新整理一下数据集,顺便整理一下这个代码仓库。
仓库中的脚本用于将Labelme标注的数据转换为PASCAL VOC格式或MS COCO格式的标准数据集,便于直接利用现有的训练框架进行训练。
Labelme是我用的标注工具,对图像进行多种类型的标注,可以直接得到json
文件。GitHub地址如下:
labelme: Image Polygonal Annotation with Python
PASCAL-VOC和MS-COCO是两个大型的开源数据集,其数据集的标注形式成为了通用的标注方式,常见的视觉模型的训练框架都支持这两种格式的读取,将自己的数据集转换为这两种标注方式,可以避免修改读取数据的代码。
两种数据集和标注格式的介绍:
-
labelme_json_to_dataset.py
:演示如何将单个labelme标注的json文件转换为单张图像的数据集。用法
python labelme_json_to_dataset.py [-h] [-o OUT] json_file
举例
python labelme_json_to_dataset.py test/test_single.json -o test/test_single
-
bbox_labelme2voc.py
:批量处理labelme标注的json文件,转换成VOC格式的数据集。 -
split_dataset.py
:将VOC数据集中的样本按照比例,分割成训练集和测试集。 -
voc_xml2coco_json.py
:将VOC数据集转换为COCO数据集。 -
segmentation_labelme2voc.py
:将labelme标注的json文件转换为VOC文件下下的语义分割标注文件。三种类型,.npy
,.png
和可视化图像。 -
voc_category_statics_and_smiple_oversampling.py
:统计VOC数据集的标注数目,并进行简单的过采样处理。过采样的方法有点简单的,可以用一些过采样算法替代。 -
utils.py
: 内置一些简单的转换函数。
# python3
conda create --name=labelme python=3.6
conda activate labelme
conda install labelme
其他工具:
conda install progressbar2 # 进度条
conda install scikit-learn # 用于分割数据集
conda install xmltodict
conda install lxml
仓库中的脚本只针对目前本人已有数据的转换,如果有实例分割、语义分割或视频标注等数据,可以参考labelme提供的示例代码进行修改,示例代码演示了这类标注文件如何转换成VOC格式数据集:
https://github.com/wkentaro/labelme/tree/master/examples
- 标注得到一批json文件
- 准备好
label_names.txt
,包含数据集的目标标签,可参考test/label_names.txt
- 如果有需要进行标签名称转换的,准备好
label_dict.txt
,可参考test/label_dict.txt
用法:
python bbox_labelme2voc.py --labels LABELS [--label_dict LABEL_DICT] input_dir output_dir
LABELS
:label_names.txt
LABEL_DICT
:label_dict.txt
input_dir
:json标注文件所在文件夹output_dir
:VOC数据集文件夹
举例:
python bbox_labelme2voc.py --labels test/label_names.txt --label_dict test/label_dict.txt test/test_jsons test/test_voc
用法:
python split_dataset.py [--random_state RANDOM_STATE] voc_dir test_ratio
voc_dir
:VOC数据集根目录,脚本创建test_ratio
:测试集比例RANDOM_STATE
:随机数种子
训练集和测试集文件在ImageSets/Main
文件夹下。
举例:
python split_dataset.py test/test_voc 0.35
用法:
python voc_xml2coco_json.py voc_dir voc_split coco_dir anno_file
voc_dir
:VOC数据集根目录voc_split
:训练集或测试集文件名称,例如train或testcoco_dir
:COCO数据集根目录,脚本创建anno_file
:与训练集或测试集对应的COCO数据集Json标注文件,保存在coco_dir/annotations
文件夹下。
举例:
python voc_xml2coco_json.py test/test_voc train test/test_coco train.json
用法:
python segmentation_labelme2voc.py seg_labels_file jsons_dir voc_dir
seg_labels_file
:与标注对应的标签文件jsons_dir
:包含标注文件的文件夹voc_dir
:目标文件夹
举例:
python segmentation_labelme2voc.py test/label_names.txt test/test_jsons test/test_voc
用法:
python voc_category_statics_and_smiple_oversampling.py [--save_name SAVE_NAME] voc_dir set
voc_dir
:VOC数据集根目录set
:数据集名字,比如train,在voc_dir/ImageSets/Main
文件夹下SAVE_NAME
:过采样后的数据集保存文件。将保存在voc_dir/ImageSets/Main
文件夹下