from pylabel import importer
dataset = importer.ImportCoco(path_to_annotations)
#Now the annotations are stored in a dataframe
#that you can query and manipulate like any other pandas dataframe
#In this case we filter the dataframe to images in a list of images
dataset.df = dataset.df[dataset.df.img_filename.isin(files)].reset_index()
dataset.export.ExportToCoco()
splitter = ProportionalDataSplitter(70, 10, 20)
ch_train, ch_val, ch_test = splitter.apply(ch)
dest_dir = Path("./result") # where to save the JSON files with annotations on the subset of images
for ch, ch_name in zip([ch_train, ch_val, ch_test], ["train", "val", "test"]):
print(f"Saving dataset: '{ch_name}'")
fname = dest_dir / f"{ch_name}.json"
ch.write_annotations_file(fname)
2条答案
按热度按时间93ze6v8z1#
没有简单的方法,因为所有注解的图像都在一个长的JSON文件中。我正在开发Python包,它可以帮助完成数据集准备任务,包括这个任务。
我在这个笔记本https://github.com/pylabel-project/samples/blob/main/coco_extract_subset.ipynb中创建了一个可重复的示例。您可以使用this link直接在Google Colab中打开它。
该软件包通常是这样工作的:
希望对你有用。请让我知道如果你有任何反馈。
k5hmc34c2#
初步说明:
COCO数据集主要是JSON文件,其中包含图像的路径和这些图像的注解。因此,如果你想拆分你的数据集,你不需要将你的图像移动到单独的文件夹,但你应该拆分JSON文件中包含的记录。从头开始并不简单,因为记录在JSON文件中具有内部依赖性。好消息是有一个名为COCOHelper的软件包可以帮助您轻松完成此任务!
快速解决方案:
您可以使用COCOHelper将COCO数据集拆分为与其自己的注解相关联的子集。它是如此简单:
一个完整的工作示例:
导入+设置路径:
创建一个cocohelper对象,它代表你的COCO数据集:
拆分数据集(例如使用随机分割数据的比例数据分割器):
更多的例子和细节here.