1. 理解COCO数据集与YOLOv8-seg的数据需求
COCO数据集是计算机视觉领域最常用的基准数据集之一,包含超过33万张图像和80个常见物体类别。每张图像都带有精确的边界框标注和实例分割标注,这些标注信息以JSON格式存储。而YOLOv8-seg作为Ultralytics公司推出的最新实例分割模型,其训练数据需要特定的TXT格式标注文件。
在实际项目中,我们往往只需要训练特定类别的模型。比如在智能宠物监控场景中,可能只需要检测人和宠物(猫、狗)。这时候就需要从COCO的全类别标注中提取特定类别的数据。YOLOv8-seg的标注文件格式要求每个对象用一行表示,包含类别索引和归一化的多边形坐标点,格式如下:
code复制<class-index> <x1> <y1> <x2> <y2> ... <xn> <yn>
理解这个转换过程的核心在于把握三个关键点:COCO的JSON结构、目标类别的筛选逻辑,以及多边形坐标的归一化处理。COCO的标注文件采用层次化结构,主要包含images、annotations和categories三个关键部分。其中annotations字段中的segmentation字段存储的就是我们需要提取的多边形坐标。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 准备开发环境和数据目录
在开始转换之前,我们需要搭建合适的Python环境。推荐使用Python 3.8+和以下关键库:
python复制pip install numpy opencv-python Pillow tqdm pycocotools
数据目录结构对YOLOv8训练至关重要。我们需要预先创建符合YOLOv8要求的目录树:
code复制mydata/
├── images/
│ ├── train/
│ └── val/
└── labels/
├── train/
└── val/
建议使用Pathlib模块来管理路径,这样可以避免跨平台路径分隔符的问题。以下代码可以快速创建这个目录结构:
python复制from pathlib import Path
def create_yolo_dirs(base_path="mydata"):
base = Path(base_path)
for split in ["train", "val"]:
(base/"images"/split).mkdir(parents=True, exist_ok=True)
(base/"labels"/split).mkdir(parents=True, exist_ok=True)
return base
3. 解析COCO JSON并筛选特定类别
COCO的标注文件是一个大型JSON,我们需要从中提取特定类别的分割标注。首先加载JSON文件:
python复制import json
with open("instances_val2017.json") as f:
coco_data = json.load(f)
建立类别名称到ID的映射关系:
python复制category_map = {cat["name"]: cat["id"] for cat in coco_data["categories"]}
target_classes = ["person", "cat", "dog"]
target_ids = [category_map[name] for name in target_classes]
为了提高处理效率,我们可以预先构建两个字典:
- 图像ID到图像信息的映射
- 图像ID到其
