YOLO-World数据集构建:Obj365v1与GoldG数据清洗与标注规范
【免费下载链接】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来加载数据。该类继承自BatchShapePolicyDataset和Objects365V1Dataset,能够有效地处理大规模数据集的加载和预处理。
@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类来加载混合数据集。该类继承自BatchShapePolicyDataset和CocoDataset,能够同时处理多个数据集的加载和预处理。
@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数据集构建的流程图,展示了从原始数据到最终训练数据的完整过程:
6. 总结与展望
本文详细介绍了YOLO-World中Obj365v1和GoldG数据集的构建过程,包括数据清洗和标注规范。通过严格的数据清洗和规范的标注,能够提高数据集的质量,从而为模型训练提供有力的支持。
未来,我们将继续优化数据集构建流程,探索更多的数据增强方法和混合策略,以进一步提高YOLO-World模型的性能。同时,我们也欢迎社区贡献更多高质量的数据集和标注工具,共同推动目标检测领域的发展。
如果你对本文内容有任何疑问或建议,请随时与我们联系。感谢你的阅读!
点赞、收藏、关注,获取更多YOLO-World相关技术分享!下期预告:YOLO-World模型训练调优技巧。
【免费下载链接】YOLO-World 项目地址: https://gitcode.com/gh_mirrors/yo/YOLO-World
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



