YOLO-World数据集构建:Obj365v1与GoldG数据清洗与标注规范

YOLO-World数据集构建:Obj365v1与GoldG数据清洗与标注规范

【免费下载链接】YOLO-World 【免费下载链接】YOLO-World 项目地址: https://gitcode.com/gh_mirrors/yo/YOLO-World

引言

在计算机视觉领域,高质量的数据集是训练高性能模型的基础。YOLO-World作为一款先进的目标检测模型,其性能很大程度上依赖于训练数据的质量。本文将详细介绍YOLO-World中使用的Obj365v1和GoldG数据集的构建过程,包括数据清洗和标注规范,旨在为研究者和开发者提供清晰的指导,帮助他们更好地理解和使用这些数据集。

读完本文,你将能够:

  • 了解Obj365v1和GoldG数据集的基本情况
  • 掌握数据清洗的关键步骤和方法
  • 熟悉标注规范的具体要求
  • 理解数据集构建在YOLO-World模型训练中的重要性

1. 数据集概述

1.1 Obj365v1数据集

Obj365v1(Objects365V1)是一个大规模的通用目标检测数据集,包含了365个目标类别。该数据集旨在提供丰富多样的目标实例,以支持通用目标检测模型的训练和评估。

在YOLO-World项目中,Obj365v1数据集被广泛应用于模型的预训练阶段。通过使用该数据集,模型可以学习到大量通用目标的特征,为后续的微调任务打下坚实的基础。

1.2 GoldG数据集

GoldG数据集是一个高质量的标注数据集,主要用于提升模型对目标的精细化理解能力。与Obj365v1相比,GoldG数据集的标注更加精准,包含了更多的细节信息,如目标的边界框、类别标签等。

GoldG数据集在YOLO-World中通常与其他数据集混合使用,以提高模型的检测精度和泛化能力。

2. 数据清洗流程

数据清洗是数据集构建过程中的关键环节,其目的是去除噪声数据、纠正错误标注,从而提高数据集的质量。以下是Obj365v1和GoldG数据集的清洗流程:

2.1 数据加载与初步筛选

在数据清洗的第一步,我们需要加载原始数据并进行初步筛选。对于Obj365v1数据集,YOLO-World项目中使用了专门的数据集类YOLOv5Objects365V1Dataset来加载数据。该类继承自BatchShapePolicyDatasetObjects365V1Dataset,能够有效地处理大规模数据集的加载和预处理。

@DATASETS.register_module()
class YOLOv5Objects365V1Dataset(BatchShapePolicyDataset, Objects365V1Dataset):
    """Dataset for YOLOv5 VOC Dataset.

    We only add `BatchShapePolicy` function compared with Objects365V1Dataset.
    See `mmyolo/datasets/utils.py#BatchShapePolicy` for details
    """
    pass

对于GoldG数据集,虽然没有专门的数据集类,但在混合数据集类YOLOv5MixedGroundingDataset中,通过加载相应的标注文件来获取数据。

2.2 图像质量检查

图像质量是影响模型训练效果的重要因素。在数据清洗过程中,需要对图像的质量进行严格检查,包括以下几个方面:

  • 图像尺寸检查:过滤掉过小的图像。在filter_data方法中,通过设置min_size参数来确保图像的最小尺寸符合要求。
def filter_data(self) -> List[dict]:
    """Filter annotations according to filter_cfg.

    Returns:
        List[dict]: Filtered results.
    """
    if self.test_mode:
        return self.data_list

    if self.filter_cfg is None:
        return self.data_list

    filter_empty_gt = self.filter_cfg.get('filter_empty_gt', False)
    min_size = self.filter_cfg.get('min_size', 0)

    # obtain images that contain annotation
    ids_with_ann = set(data_info['img_id'] for data_info in self.data_list)

    valid_data_infos = []
    for i, data_info in enumerate(self.data_list):
        img_id = data_info['img_id']
        width = int(data_info['width'])
        height = int(data_info['height'])
        if filter_empty_gt and img_id not in ids_with_ann:
            continue
        if min(width, height) >= min_size:
            valid_data_infos.append(data_info)

    return valid_data_infos
  • 图像完整性检查:确保图像文件能够正常打开,没有损坏或缺失的情况。在parse_data_info方法中,通过检查图像路径的有效性来实现这一点。
img_path = None
img_prefix = self.data_prefix.get('img', None)
if isinstance(img_prefix, str):
    img_path = osp.join(img_prefix, img_info['file_name'])
elif isinstance(img_prefix, (list, tuple)):
    for prefix in img_prefix:
        candidate_img_path = osp.join(prefix, img_info['file_name'])
        if osp.exists(candidate_img_path):
            img_path = candidate_img_path
            break
assert img_path is not None, (
    f'Image path {img_info["file_name"]} not found in'
    f'{img_prefix}')

2.3 标注数据清洗

标注数据的质量直接影响模型的训练效果。以下是标注数据清洗的主要步骤:

  • 边界框检查:过滤掉无效的边界框,如面积为零、宽度或高度小于1的边界框。
x1, y1, w, h = ann['bbox']
inter_w = max(0, min(x1 + w, float(img_info['width'])) - max(x1, 0))
inter_h = max(0, min(y1 + h, float(img_info['height'])) - max(y1, 0))
if inter_w * inter_h == 0:
    continue
if ann['area'] <= 0 or w < 1 or h < 1:
    continue
  • 类别标签检查:确保类别标签的一致性和准确性。在YOLOv5MixedGroundingDataset中,通过从图像标题中提取类别名称,并建立类别到ID的映射关系来实现。
cat2id = {}
texts = []
for ann in ann_info:
    cat_name = ' '.join([img_info['caption'][t[0]:t[1]] for t in ann['tokens_positive']])
    if cat_name not in cat2id:
        cat2id[cat_name] = len(cat2id)
        texts.append([cat_name])
data_info['texts'] = texts
  • 重复标注处理:检查并去除重复的标注信息,确保每个目标实例只有一个有效的标注。在load_data_list方法中,通过检查标注ID的唯一性来实现。
if self.ANN_ID_UNIQUE:
    assert len(set(total_ann_ids)) == len(
        total_ann_ids
    ), f"Annotation ids in '{self.ann_file}' are not unique!"

3. 标注规范

3.1 边界框标注规范

  • 标注方式:采用矩形边界框(Bounding Box)进行标注,坐标格式为[x1, y1, w, h],其中x1和y1为边界框左上角的坐标,w和h分别为边界框的宽度和高度。
  • 精度要求:边界框应尽可能准确地包围目标对象,边缘与目标的实际边缘对齐。
  • 完整性要求:确保目标对象完全被边界框包围,避免出现目标部分在边界框外的情况。

3.2 类别标注规范

  • 类别体系:遵循Obj365v1和GoldG数据集的类别体系,确保类别名称的准确性和一致性。
  • 多标签处理:对于一个目标实例可能属于多个类别的情况,应根据数据集的要求进行处理。在YOLO-World中,通常每个目标实例只标注一个主要类别。
  • 文本描述:在GoldG数据集中,类别标签通过文本描述来表示。这些文本描述应简洁、准确,能够清晰地标识目标的类别。

3.3 标注文件格式

标注文件采用COCO格式,主要包含以下几个部分:

  • 图像信息(images):包含图像的ID、文件名、宽度和高度等信息。
  • 标注信息(annotations):包含每个目标实例的边界框、类别标签、面积等信息。
  • 类别信息(categories):包含类别ID和类别名称的对应关系。

以下是一个标注文件的示例片段:

{
  "images": [
    {
      "id": 1,
      "file_name": "image1.jpg",
      "width": 1280,
      "height": 720
    },
    ...
  ],
  "annotations": [
    {
      "id": 1,
      "image_id": 1,
      "category_id": 5,
      "bbox": [100, 200, 300, 400],
      "area": 120000,
      "iscrowd": 0
    },
    ...
  ],
  "categories": [
    {
      "id": 1,
      "name": "person"
    },
    ...
  ]
}

4. 数据集混合策略

为了提高模型的泛化能力,YOLO-World采用了数据集混合策略,将Obj365v1和GoldG等数据集进行混合使用。以下是数据集混合的主要步骤:

4.1 数据加载

通过YOLOv5MixedGroundingDataset类来加载混合数据集。该类继承自BatchShapePolicyDatasetCocoDataset,能够同时处理多个数据集的加载和预处理。

@DATASETS.register_module()
class YOLOv5MixedGroundingDataset(BatchShapePolicyDataset, CocoDataset):
    """Mixed grounding dataset."""

    METAINFO = {
        'classes': ('object',),
        'palette': [(220, 20, 60)]}

4.2 数据混合

在数据加载过程中,通过设置不同数据集的权重来控制每个数据集在训练中的占比。具体的混合比例可以根据实际需求进行调整,以达到最佳的训练效果。

4.3 数据预处理

混合后的数据集需要进行统一的预处理,包括图像大小调整、归一化等操作。YOLO-World中采用了BatchShapePolicy来动态调整批次中图像的大小,以提高训练效率。

5. 数据集构建流程图

以下是Obj365v1和GoldG数据集构建的流程图,展示了从原始数据到最终训练数据的完整过程:

mermaid

6. 总结与展望

本文详细介绍了YOLO-World中Obj365v1和GoldG数据集的构建过程,包括数据清洗和标注规范。通过严格的数据清洗和规范的标注,能够提高数据集的质量,从而为模型训练提供有力的支持。

未来,我们将继续优化数据集构建流程,探索更多的数据增强方法和混合策略,以进一步提高YOLO-World模型的性能。同时,我们也欢迎社区贡献更多高质量的数据集和标注工具,共同推动目标检测领域的发展。

如果你对本文内容有任何疑问或建议,请随时与我们联系。感谢你的阅读!

点赞、收藏、关注,获取更多YOLO-World相关技术分享!下期预告:YOLO-World模型训练调优技巧。

【免费下载链接】YOLO-World 【免费下载链接】YOLO-World 项目地址: https://gitcode.com/gh_mirrors/yo/YOLO-World

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值