跳转到主要内容
精心设计的标签分类体系是任何标注项目的基础。本页介绍如何构建对象类别、配置属性和建立层次结构,以产生一致、高质量的训练数据。

什么是本体?

在数据标注的上下文中,本体(或标签分类体系)是标注员用于标注数据的类别、属性和关系的完整模式。它定义了:
  • 标注什么对象(对象类别)
  • 如何描述它们(属性和特性)
  • 类别之间如何相互关联(层次结构和分组)
清晰的本体减少标注员困惑,提高标注者间一致性,并为您的模型产生更干净的训练数据。

对象类别

对象类别是分类体系的核心构建模块。每个类别代表标注员将在数据中识别和标注的一类对象。

定义类别

在 Avala 中创建项目时,您将标签配置定义为类别列表:
{
  "labels": [
    { "name": "car", "color": "#FF0000" },
    { "name": "pedestrian", "color": "#00FF00" },
    { "name": "cyclist", "color": "#0000FF" },
    { "name": "truck", "color": "#FFA500" },
    { "name": "bus", "color": "#800080" }
  ]
}
每个类别都有唯一的名称和在标注编辑器中使用的显示颜色。选择与彼此以及数据中常见背景颜色视觉上不同的颜色。

类别命名最佳实践

实践示例原因
使用小写、具体的名称sedanpickup_truck减少歧义
避免重叠定义不要在同一层级同时有 carvehicle防止标注员困惑
分隔符保持一致traffic_light 而非 traffic-lighttrafficLight训练管道中一致的解析
仅在需要时包含否定/背景类别unknownignore_region某些模型需要显式的背景标签

属性

属性为每个标注添加超越对象类别的结构化元数据。它们让标注员描述可见性、姿态或状态等特性。

属性类型

Avala 支持多种属性类型,可以附加到任何对象类别:
类型描述使用场景示例
下拉菜单从预定义列表中单选互斥选项遮挡:nonepartialheavy
复选框布尔开关简单的是/否标记is_parked: true/false
文本自由格式字符串输入唯一标识符或描述车牌号
数字数值测量或计数估计距离(米)
多选从列表中多选并发的非互斥状态可见:headlightstaillightsturn_signal
属性类型对比

配置属性

属性在项目的分类配置中与标签配置一起定义:
{
  "labels": [
    { "name": "car", "color": "#FF0000" }
  ],
  "classification": {
    "attributes": [
      {
        "name": "occlusion",
        "type": "dropdown",
        "options": ["none", "partial", "heavy"],
        "required": true,
        "applies_to": ["car", "pedestrian", "cyclist"]
      },
      {
        "name": "is_parked",
        "type": "checkbox",
        "required": false,
        "applies_to": ["car", "truck", "bus"]
      },
      {
        "name": "truncation",
        "type": "dropdown",
        "options": ["none", "partial", "heavy"],
        "required": true,
        "applies_to": ["car", "pedestrian", "cyclist"]
      }
    ]
  }
}

条件属性

使用 applies_to 字段仅为相关类别显示属性。这保持标注员界面的整洁——pedestrian 不需要 is_parked 属性,traffic_light 不需要 truncation
将您的模型训练管道依赖的属性标记为 required。对于有用但不关键的补充元数据,保留可选属性。

层次分类体系

对于复杂领域,扁平的类别列表会变得难以管理。层次分类体系将相关类别分组到父类别下。

示例:车辆分类体系

Vehicle
├── Car
│   ├── Sedan
│   ├── SUV
│   └── Hatchback
├── Truck
│   ├── Pickup
│   └── Semi
├── Bus
│   ├── City Bus
│   └── School Bus
└── Motorcycle

何时使用层次结构

场景建议
少于 15 个类别扁平列表更简单快速
15-50 个类别分成 3-5 个顶级类别
50+ 个类别使用多级层次结构并支持搜索
类别共享属性分组到父类别下以便属性继承

设计层次结构

  1. 先粗后细。 从顶级类别(vehiclepedestrianinfrastructure)开始,仅在模型需要时添加更具体的分类。
  2. 每个叶子类别应该是明确的。 如果标注员无法可靠地区分两个子类别,请合并它们。
  3. 平衡深度和广度。 深层层次结构(4 级以上)会降低标注员速度。优先使用 2-3 级的较宽树。

单标签与多标签分类

Avala 根据您的项目需求支持两种分类模式。

单标签

每个对象或场景只接收一个类别标签。这是大多数标注类型的默认模式。
  • 目标检测:每个边界框获得一个类别
  • 场景分类:每个图像获得一个类别

多标签

一个对象或场景可以同时接收多个标签。当类别不互斥时使用此模式。
  • 图像可以同时是 rainynighttime
  • 车辆可以同时是 damagedparked
通过设置任务级分类类型在项目的分类配置中配置多标签分类:
{
  "classification": {
    "type": "multi-label",
    "categories": [
      { "name": "weather", "options": ["clear", "rainy", "foggy", "snowy"] },
      { "name": "time_of_day", "options": ["daytime", "nighttime", "dawn", "dusk"] },
      { "name": "road_condition", "options": ["dry", "wet", "icy"] }
    ]
  }
}

本体设计清单

在开始标注项目之前,请根据此清单验证您的本体:
检查项问题
完整性您的模型需要检测的每个对象都有对应的类别吗?
互斥性标注员是否总能明确地分配一个类别而没有歧义?
属性覆盖训练所需的所有属性都作为属性被捕获了吗?
一致粒度同一层级的类别是否同样具体?
标注员清晰度新标注员能否仅从名称理解每个类别?
模型对齐分类体系与您的模型架构期望是否匹配?
可扩展性以后能否在不重构的情况下添加新类别?

常见陷阱

过度细分类别

创建太多细粒度类别会导致标注者间一致性低,每个类别的训练数据稀少。 问题: 50 个车辆子类别,其中大多数只有不到 100 个样本。 解决方案: 从 5-10 个粗类别开始。仅在有足够数据且模型受益于区分时才添加子类别。

模糊边界

当两个类别在概念上重叠时,标注员会在使用哪个上产生分歧。 问题: 同时存在 vanminivan,但标注员无法可靠区分。 解决方案: 将它们合并为一个类别,或提供带有参考图像的明确视觉指南来展示边界。

缺失边缘案例

真实世界数据包含不完全符合分类体系的对象。 问题: 标注员遇到高尔夫球车,但分类体系只有 cartruckmotorcycle 解决方案: 包含一个兜底类别如 other_vehicle,并定期审核标注为此类别的项目以识别需要添加的类别。

下一步

核心概念

回顾 Avala 平台的基本构建模块。

质量控制

设置审核工作流以验证标注质量。

标注类型

查看边界框、多边形、长方体等的 JSON 格式。

第一个数据集

上传数据并创建您的第一个标注项目。