• 【数据集处理工具】将COCO格式数据集的val.json与tett.json文件合并为一个json


    1、目的

    Python脚本旨在帮助用户合并多个COCO格式的数据集JSON文件,特别适用于将验证集和测试集的标注数据整合到单一文件中。

    该脚本假设各个数据集的类别信息(categories字段)完全一致,这在许多场景下是合理的假设,尤其是在验证集和测试集是从同一母体数据集划分而来的情况下。
    在这里插入图片描述

    2、功能概述
    1. 合并images字段:脚本会将来自不同JSON文件的图像信息列表合并在一起,构建一个统一的图像信息集合。

    2. 合并annotations字段:脚本在合并标注信息时,会确保每个标注的ID(id字段)在最终的合并数据集中是唯一的。这通过追踪已有的最大标注ID并在导入新的标注时递增ID来实现。

    3. 保留categories字段:由于假定所有数据集的类别信息一致,脚本默认从第一个数据集中复制categories字段到合并后的数据集,而不做任何改变。

    4. 保留其他元数据:脚本还会保留infolicenses字段,确保合并后的JSON文件包含原始数据集的元数据信息。

    3、使用方法
    1. 定义输入和输出文件路径:在脚本中,你需要定义一个包含所有待合并JSON文件路径的列表json_files,以及指定输出合并后JSON文件的路径output_file

    2. 运行脚本:调用merge_coco_jsons(json_files, output_file)函数,脚本将处理指定的输入文件,合并数据,并将结果保存到指定的输出文件中。

    4、注意事项
    • 确保所有待合并的数据集的categories字段完全相同,否则需要在合并前进行相应的调整。
    • 在合并annotations时,脚本自动更新每个新添加的标注的ID,以避免ID冲突。确保在合并后的数据集中,标注ID的唯一性得到保持。
    • 在运行脚本前,备份原始数据集文件,以防意外覆盖或数据丢失。

    通过使用此脚本,你可以轻松地将多个COCO数据集合并为一个,为后续的数据分析、模型训练或评估提供便利。

    5、 代码部分
    import json
    #   将COCO格式的验证集和测试集的JSON文件合并成一个文件,
    #   主要涉及合并两个JSON文件中的images、annotations和可能的categories字段
    def merge_coco_jsons(json_files, output_file):
        # 加载第一个JSON文件作为基础数据
        with open(json_files[0], 'r') as f:
            merged_data = json.load(f)
    
        # 更新annotation ID的最大值
        max_ann_id = max([a['id'] for a in merged_data['annotations']]) if merged_data['annotations'] else 0
    
        # 从第二个JSON文件中合并数据
        for json_file in json_files[1:]:
            with open(json_file, 'r') as f:
                data = json.load(f)
    
            # 合并images
            merged_data['images'].extend(data['images'])
    
            # 合并annotations,同时更新annotation ID
            if data.get('annotations'):
                for annotation in data['annotations']:
                    annotation['id'] = max_ann_id + 1
                    max_ann_id = annotation['id']
                    merged_data['annotations'].append(annotation)
    
        # 写入合并后的JSON文件
        with open(output_file, 'w') as f:
            json.dump(merged_data, f)
    
    # 使用函数
    json_files = ['path/to/val_annotations.json', 'path/to/test_annotations.json']
    output_file = 'path/to/merged_annotations.json'
    
    merge_coco_jsons(json_files, output_file)
    
  • 相关阅读:
    桌面运维命令
    C++笔记20•数据结构:哈希(Hash)•
    LVS负载均衡集群
    jQuery
    Python 3.10.9 Mac m1 无法安装grpc的解决办法
    Docker构建Springboot项目,并发布测试
    ardupilot开发 --- 通信链路 篇
    基于AE的基础的GIS系统的开发
    【无标题】
    SecureCRT 自动测试脚本的使用方法
  • 原文地址:https://blog.csdn.net/qq_39237205/article/details/140465528