CSV 格式的 目标检测(Object Detection)标注文件 ,采用的是 边界框(Bounding Box)标注,属于 矩形框标注(Axis-Aligned Bounding Box, AABB) 类型。

CSV示例内容:

image_name,x_min,y_min,x_max,y_max,label  
image_1.jpg,30,50,150,200,face  
image_2.jpg,20,40,180,220,face

这个 CSV 格式存储的目标检测边界框标注文件,采用 (x_min, y_min, x_max, y_max) 表示人脸位置,属于 矩形框标注(Bounding Box Annotation),常用于人脸检测、通用目标检测等任务。


🔍详细解析:

每一行的字段含义如下:

字段名 含义
image_name 图像文件名
x_min 边界框左上角的 x 坐标(最小 x)
y_min 边界框左上角的 y 坐标(最小 y)
x_max 边界框右下角的 x 坐标(最大 x)
y_max 边界框右下角的 y 坐标(最大 y)
label 目标类别标签(这里是 "face"

这种表示方式是目标检测任务中 非常常见的一种标注格式,尤其在以下场景中广泛使用:

  • 自定义数据集训练(如 YOLO、Faster R-CNN、SSD 等模型的前期数据准备)
  • Kaggle 竞赛中的检测任务
  • 简单的 CSV 格式便于人工检查和编辑

与其他常见标注格式对比:

格式 特点 示例
CSV(如你所示) 简洁、易读、适合单框或多框(每行一个框) image.jpg,10,20,100,150,face
Pascal VOC (XML) 结构化 XML,支持多目标、难例标记等 <bndbox><xmin>10</xmin>...</bndbox>
COCO (JSON) 复杂但功能强大,支持检测、分割、关键点 "bbox": [x, y, width, height]
YOLO (TXT) 每张图一个 .txt 文件,归一化坐标 0 0.5 0.6 0.2 0.3

注意:这个 CSV 示例使用的是 (x_min, y_min, x_max, y_max) 格式,而 YOLO 格式使用的是 (center_x, center_y, width, height) 且坐标归一化到 [0,1],两者不同。


如何使用这种 CSV 标注?

  1. 训练模型前转换
    大多数深度学习框架(如 Detectron2、MMDetection、YOLOv5/v8)不直接读取 CSV,需要先转换为对应格式(如 COCO JSON 或 YOLO TXT)。

  2. 自定义 Dataset 类(PyTorch 示例)

    import pandas as pd
    from torch.utils.data import Dataset
    from PIL import Image
    
    class CSVDataset(Dataset):
        def __init__(self, csv_file, img_dir, transform=None):
            self.annotations = pd.read_csv(csv_file)
            self.img_dir = img_dir
            self.transform = transform
    
        def __len__(self):
            return len(self.annotations)
    
        def __getitem__(self, idx):
            img_path = os.path.join(self.img_dir, self.annotations.iloc[idx, 0])
            image = Image.open(img_path).convert("RGB")
            bbox = self.annotations.iloc[idx, 1:5].values.astype("float32")  # [x_min, y_min, x_max, y_max]
            label = self.annotations.iloc[idx, 5]
            # ... 转换为 tensor 等
    
  3. 可视化检查
    可用 OpenCV 或 Matplotlib 读取 CSV 并在图像上画框,验证标注质量。

更多推荐