Skip to main content Link Menu Expand (external link) Copy Copied

目标检测手动标注

image

有关数据集导入导出训练/验证/测试集划分步骤请参快速开始文档

数据集格式

PaddleLabel 目前支持 PASCAL VOCCOCOYOLO 三种目标检测数据集格式

PASCAL VOC

v0.1.0+

PASCAL VOC 格式的标注信息保存在 xml 格式文件中,每张图片对应一个 xml 文件。您可以通过列表文件,相同文件名或 xml 文件内容三种方式将图片和标注 xml 对应起来,该规则细节将在后文描述

样例格式如下:

数据集路径
├── Annotations
│   ├── 0001.xml
│   ├── 0002.xml
│   ├── 0003.xml
│   └── ...
├── JPEGImages
│   ├── 0001.jpg
│   ├── 0002.jpg
│   ├── 0003.jpg
│   └── ...
├── labels.txt # 可选
├── test_list.txt # 可选
├── train_list.txt # 可选
└── val_list.txt # 可选

PaddleLabel 目前导入/导出用到的 VOC 格式 xml 文件内容如下

此处没有列出的节点在导入时不会被考虑,导出时也不会被包含

<annotation>
 <folder>JPEGImages</folder> # 可选:如果不存在folder节点,将使用默认值 JPEGImages
 <filename></filename> # 如果不存在filename节点,将使用默认值空字符串 ""
 <size> # 目前导入过程中会读取图像确认其宽高,以下三个值不会被使用
  <width></width>
  <height></height>
  <depth></depth>
 </size>
 <object>
  <name></name>
  <bndbox>
   <xmin></xmin>
   <ymin></ymin>
   <xmax></xmax>
   <ymax></ymax>
  </bndbox>
 </object>
</annotation>

train/val/test_list.txt 中每行是一组图像和标注 xml 的对应关系,路径需为相对数据集路径的相对路径,每行以空格为分隔符

示例格式如下:

JPEGImages/0001.jpg Annotations/0001.xml
JPEGImages/0002.jpg Annotations/0002.xml
...

新建 VOC 格式检测项目时,首先会扫描您填写的数据集路径下所有的图片和以 .xml 结尾的标注文件(不考虑大小写,类似.XML 结尾的文件也会被认为是标注信息)。之后 PaddleLabel 将顺序使用以下三个规则将图片和标注进行匹配。

  1. 如果数据集路径下存在 train/val/test_list.txt 列表文件,将首先按照列表文件内容确定对应关系
  2. 无法通过列表文件内容确定对应的 .xml 文件,将对应到数据集路径下文件名相同的图片。如 JPEGImages/0001.xml 对应到 Annotations/0001.jpg(二者文件名以.分割去除拓展名后都是 0001)
  3. 依然无法确定对应关系的 .xml 文件将与位于/数据集路径/folder/filename的图片对应。上述路径中的folderfilename从该 xml 文件中解析
    • folder
      • 如果 xml 中没有folder节点,将使用默认值 JPEGImages
      • 如果folder节点存在,但内容为空,将认为图像文件直接位于/数据集路径/filename
    • filename:xml 中 filename 节点的内容,如 xml 中不存在filename节点将使用默认值空字符串

如果导入图像后发现有 xml 标注信息的图像中没有标注,可以切换到 PaddleLabel 运行的命令行查看是否有报错。

COCO

v0.1.0+

COCO 格式将整个数据集的所有标注信息存在一个(或少数几个)json文件中。这里列出了 COCO 和检测相关的部分格式,更多细节请访问COCO 官网查看。

下文没有列出的项不会在导入时被保存到数据库中和最终导出,比如图像的 date_captured 属性

所有 COCO 格式的项目都不支持在导入时以 train/val/test_list.txt 指定数据集划分和使用 labels.txt 文件创建分类

样例格式如下:

数据集路径
├── image
│   ├── 0001.jpg
│   ├── 0002.jpg
│   ├── 0003.jpg
│   └── ...
├── train.json
├── val.json
└── test.json

COCO 文件的格式如下:

{
    "info": info,
    "images": [image],
    "annotations": [annotation],
    "licenses": [license],
    "categories": [category],
}

image{
    "id": int,
    "width": int, // 目前导入时会读取图片获取其大小
    "height": int, // 不会使用此处的宽高
    "file_name": str,
}

annotation{
    "id": int,
    "image_id": int,
    "category_id": int,
    "area": float,
    "bbox": [x, y, width, height],
}

category{
 "id": int,
 "name": str,
 "supercategory": str,
 "color": str // PaddleLabel 加入的项,COCO官方定义中没有这一项。标签颜色会被导出,导入时如果这项存在会给这一类别赋color指定的颜色
}

新建 COCO 类型项目时,填写的数据集路径下所有图片都将被导入,标签和图像对应规则为:image[‘file_name’]中最后的文件名和盘上图片的文件名相同(大小写敏感)。

这一设计是为了让对应逻辑尽可能简单并保持一定的跨平台兼容性。推荐将所有图片放在同一个文件夹下以避免图片重名,导致 coco 标注信息中的一条图片记录对应到盘上的多张图片。一些标注工具导出的 coco 标注记录中,image[‘file_name’]项可能是完整的文件路径或相对数据集根目录的路径,这种情况下我们用’/’和’\‘分割这个路径,取分割结果的最后一段为文件名。因此请避免在文件名中使用’/’和’\‘。

YOLO

v0.5.0+

YOLO 格式每张图像对应一个 txt 格式的标注信息文件,二者文件名除拓展名部分相同。

样例格式如下:

数据集路径
├── Annotations
│   ├── 0001.txt
│   ├── 0002.txt
│   ├── 0003.txt
│   └── ...
├── JPEGImages
│   ├── 0001.jpg
│   ├── 0002.jpg
│   ├── 0003.jpg
│   └── ...
├── labels.txt
├── test_list.txt
├── train_list.txt
└── val_list.txt

txt 文件内容样例如下:

0 0.4 0.5 0.7 0.8

其格式为:标签id bb中心宽方向位置/图像宽 bb中心高方向位置/图像高 bb宽/图像宽 bb高/图像高。其中标签id 从 0 开始。导入时没有标注的图像可以不提供标注文件,或提供空文件。PaddleLabel 对没有标注的图像不会导出空 YOLO 标注文件

注意 YOLO 格式的图像和标签完全通过文件名对应,如果有两张图片文件名只有拓展名不同,比如 cat.png 和 cat.jpeg,二者都会和 cat.txt 标签文件对应。为了避免这一情况,PaddleLabel 在导入图像时遇到上述情况会将其中一个文件重命名,如将 cat.png 重命名为 cat-1.png。这可能会导致图像找不到对应标注文件。如果发现有图像提供了标注文件但是导入后没有标注,可以查看 PaddleLabel 运行的命令行输出,对文件名做出调整后重新导入项目。

此外建议将所有图像都放在同一文件夹下,避免重名导致图像标注对应问题。

数据标注

创建项目后进入标注界面

  1. 您可以点击右侧类别列表下方“添加类别”按钮创建一个新类别
  2. 您可以点击一个类别右侧的 x 删除该类别。注:如果有检测框属于该类别,该类别不能被删除
  3. 首先点击选中一个类别,之后点击左侧工具栏的“矩形”工具,在画布中按下鼠标左键拖动可以创建一个检测框。每创建一个矩形框,标注信息会自动保存
  4. 点击左侧工具栏”编辑”工具,可以修改矩形框两个顶点的位置
  5. 点击画布两侧 < > 左右按钮切换图片

下一步

您可以继续浏览自动预标注使用方法了解如何使用 PaddleLabel-ML 提高检测项目标注效率