VOC 数据集格式的生成
准备好以下文件

- images里放置图片

- labels里面放置标签
注:前面两行必须是 ignore 和 background

- labelme2voc.py 里放入以下代码
#!/usr/bin/env pythonfrom __future__ import print_functionimport argparse
import glob
import os
import os.path as osp
import sysimport imgviz
import numpy as npimport labelmedef main():parser = argparse.ArgumentParser(formatter_class=argparse.ArgumentDefaultsHelpFormatter)parser.add_argument("input_dir", help="input annotated directory")parser.add_argument("output_dir", help="output dataset directory")parser.add_argument("--labels", help="labels file", required=True)parser.add_argument("--noviz", help="no visualization", action="store_true")args = parser.parse_args()if osp.exists(args.output_dir):print("Output directory already exists:", args.output_dir)sys.exit(1)os.makedirs(args.output_dir)os.makedirs(osp.join(args.output_dir, "JPEGImages"))os.makedirs(osp.join(args.output_dir, "SegmentationClass"))os.makedirs(osp.join(args.output_dir, "SegmentationClassPNG"))if not args.noviz:os.makedirs(osp.join(args.output_dir, "SegmentationClassVisualization"))print("Creating dataset:", args.output_dir)class_names = []class_name_to_id = {}for i, line in enumerate(open(args.labels).readlines()):class_id = i - 1 # starts with -1class_name = line.strip()class_name_to_id[class_name] = class_idif class_id == -1:assert class_name == "__ignore__"continueelif class_id == 0:assert class_name == "_background_"class_names.append(class_name)class_names = tuple(class_names)print("class_names:", class_names)out_class_names_file = osp.join(args.output_dir, "class_names.txt")with open(out_class_names_file, "w") as f:f.writelines("\n".join(class_names))print("Saved class_names:", out_class_names_file)for filename in glob.glob(osp.join(args.input_dir, "*.json")):print("Generating dataset from:", filename)label_file = labelme.LabelFile(filename=filename)base = osp.splitext(osp.basename(filename))[0]out_img_file = osp.join(args.output_dir, "JPEGImages", base + ".jpg")out_lbl_file = osp.join(args.output_dir, "SegmentationClass", base + ".npy")out_png_file = osp.join(args.output_dir, "SegmentationClassPNG", base + ".png")if not args.noviz:out_viz_file = osp.join(args.output_dir,"SegmentationClassVisualization",base + ".jpg",)with open(out_img_file, "wb") as f:f.write(label_file.imageData)img = labelme.utils.img_data_to_arr(label_file.imageData)lbl, _ = labelme.utils.shapes_to_label(img_shape=img.shape,shapes=label_file.shapes,label_name_to_value=class_name_to_id,)labelme.utils.lblsave(out_png_file, lbl)np.save(out_lbl_file, lbl)if not args.noviz:viz = imgviz.label2rgb(lbl,imgviz.rgb2gray(img),font_size=15,label_names=class_names,loc="rb",)imgviz.io.imsave(out_viz_file, viz)if __name__ == "__main__":main()
- 在该目录下打开cmd

- 依次输入以下命令
anaconda
activate labelme
labelme images --labels labels.txt --nodata --validatelabel exact --config "{shift_auto_shape_color: -2}"
python labelme2voc.py images target --labels labels.txt

- 发现新增target文件夹,转化完成

报错解决
AttributeError: module 'labelme' has no attribute 'LabelFile'
用命令pip install -U labelme更新labelme
















