目标检测 - COCO数据集
COCO(Common Objects in Context)数据集 是计算机视觉领域最具影响力的基准数据集之一,广泛应用于目标检测、实例分割、图像描述生成等任务。其以场景复杂、标注丰富、数据量大著称,已成为学术研究和工业落地的黄金标准。以下是关于COCO数据集的详细解析:
基本信息
- 全称:Microsoft Common Objects in Context
- 发布年份:2014年(持续更新,常用版本为COCO2017)。
- 数据规模:
- 训练集:118,287张图像
- 验证集:5,000张图像
- 测试集:40,670张图像(无公开标注)
- 物体类别:80个常见类别(如人、车、动物、日常用品等)。
- 标注类型:目标检测框、实例分割掩膜、关键点检测、图像描述(Caption)。
- 官网:COCO Dataset
核心任务支持
COCO数据集支持以下五大任务,涵盖大部分计算机视觉研究方向:
- 目标检测(Object Detection):标注边界框和类别标签。
- 实例分割(Instance Segmentation):为每个物体实例提供像素级分割掩膜。
- 关键点检测(Keypoint Detection):标注人体关键点(17个关键点,如肘部、膝盖)。
- 全景分割(Panoptic Segmentation):统一标注可数物体(如人、车)和不可数背景(如天空、草地)。
- 图像描述生成(Image Captioning):每张图像提供5条人工编写的文本描述。
数据集特点
标注丰富性
- 密集标注:平均每张图像包含7.7个目标实例。
- 复杂场景:图像包含多个物体,且存在遮挡、小目标和多样背景。
- 多任务支持:一份数据同时支持检测、分割、关键点等任务。
类别覆盖
涵盖80类物体,分为10个超类:
动物:人、鸟、猫、狗、马、羊、牛、大象、熊、斑马、长颈鹿
交通工具:自行车、汽车、摩托车、飞机、公交车、火车、卡车、船
日常物品:背包、雨伞、手提包、领带、行李箱、杯子、叉子、刀、勺子、碗
家具:椅子、沙发、盆栽、床、餐桌、厕所、电视、笔记本电脑、鼠标、遥控器、冰箱
(完整列表见官网)
数据集目录结构
COCO数据集通常按以下结构组织:
coco/
├── annotations/ # 所有标注文件(JSON格式)
│ ├── instances_train2017.json
│ ├── instances_val2017.json
│ ├── person_keypoints_train2017.json
│ └── captions_train2017.json # 其他任务标注文件...
├── train2017/ # 训练集图像
├── val2017/ # 验证集图像
└── test2017/ # 测试集图像(无标注)
标注文件解析(以目标检测为例)
COCO标注文件为JSON格式,包含以下关键字段:
{
"images": [{"id": 1, "file_name": "000000001.jpg", "width": 640, "height": 480}, ...],
"annotations": [
{
"id": 1,
"image_id": 1, // 对应图像ID
"category_id": 18, // 类别ID(对应categories中的id)
"bbox": [x, y, width, height], // 边界框坐标(左上角x,y + 宽高)
"area": 10345.2, // 区域面积(用于评估小目标)
"iscrowd": 0 // 是否为一组物体(如人群标记为1)
},
...
],
"categories": [{"id": 1, "name": "person"}, {"id": 2, "name": "bicycle"}, ...]
}
评估指标
目标检测/实例分割
- mAP(Mean Average Precision):
- IoU阈值:通常使用0.5:0.95(从0.5到0.95,步长0.05,共10个阈值)。
- 计算方式:对每个类别计算AP(平均精度),再取80个类别的平均值。
- 区分尺度:报告小(area<32²)、中(32²<area<96²)、大(area>96²)目标的AP。
关键点检测
- AP@OKS(Average Precision based on Object Keypoint Similarity):
- 通过关键点相似度(OKS)衡量预测与真实关键点的匹配程度。
如何使用COCO数据集
步骤1:下载数据集
- 官网下载:从COCO官网获取图像和标注文件。
- 命令行工具(推荐):
# 下载2017训练集图像与标注 wget http://images.cocodataset.org/zips/train2017.zip wget http://images.cocodataset.org/annotations/annotations_trainval2017.zip
步骤2:使用COCO API
COCO提供官方Python API(pycocotools)用于数据加载和评估:
from pycocotools.coco import COCO
# 加载标注文件
annFile = 'annotations/instances_val2017.json'
coco = COCO(annFile)
# 获取某类别的所有图像ID(例如“猫”)
catIds = coco.getCatIds(catNms=['cat'])
imgIds = coco.getImgIds(catIds=catIds)
# 加载并显示图像
img = coco.loadImgs(imgIds[0])[0]
I = io.imread(f'val2017/{img["file_name"]}')
plt.imshow(I)
步骤3:模型训练与评估
- 目标检测示例(PyTorch):
from torchvision.models.detection import fasterrcnn_resnet50_fpn model = fasterrcnn_resnet50_fpn(pretrained=True) # 加载预训练模型 # 自定义数据加载器(需将COCO标注转换为模型输入格式)
