> ## Documentation Index
> Fetch the complete documentation index at: https://avala.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# 标签分类体系与本体

> 使用类别、属性和层次结构设计有效的标签分类体系

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

## 什么是本体？

在数据标注的上下文中，**本体**（或标签分类体系）是标注员用于标注数据的类别、属性和关系的完整模式。它定义了：

* 标注**什么**对象（对象类别）
* **如何**描述它们（属性和特性）
* 类别之间**如何**相互关联（层次结构和分组）

清晰的本体减少标注员困惑，提高标注者间一致性，并为您的模型产生更干净的训练数据。

## 对象类别

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

### 定义类别

在 Avala 中创建项目时，您将标签配置定义为类别列表：

```json theme={null}
{
  "labels": [
    { "name": "car", "color": "#FF0000" },
    { "name": "pedestrian", "color": "#00FF00" },
    { "name": "cyclist", "color": "#0000FF" },
    { "name": "truck", "color": "#FFA500" },
    { "name": "bus", "color": "#800080" }
  ]
}
```

每个类别都有唯一的名称和在标注编辑器中使用的显示颜色。选择与彼此以及数据中常见背景颜色视觉上不同的颜色。

### 类别命名最佳实践

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

## 属性

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

### 属性类型

Avala 支持多种属性类型，可以附加到任何对象类别：

| 类型       | 描述        | 使用场景     | 示例                                         |
| -------- | --------- | -------- | ------------------------------------------ |
| **下拉菜单** | 从预定义列表中单选 | 互斥选项     | 遮挡：`none`、`partial`、`heavy`                |
| **复选框**  | 布尔开关      | 简单的是/否标记 | `is_parked: true/false`                    |
| **文本**   | 自由格式字符串输入 | 唯一标识符或描述 | 车牌号                                        |
| **数字**   | 数值        | 测量或计数    | 估计距离（米）                                    |
| **多选**   | 从列表中多选    | 并发的非互斥状态 | 可见：`headlights`、`taillights`、`turn_signal` |

<img src="https://mintcdn.com/avala/QI4wcFsXqwG8KGbR/images/reference/attribute-types-comparison-light.svg?fit=max&auto=format&n=QI4wcFsXqwG8KGbR&q=85&s=866d0c1d56119fc7d7f88e48e751d2aa" alt="属性类型对比" className="block dark:hidden w-full" width="400" height="150" data-path="images/reference/attribute-types-comparison-light.svg" />

<img src="https://mintcdn.com/avala/QI4wcFsXqwG8KGbR/images/reference/attribute-types-comparison.svg?fit=max&auto=format&n=QI4wcFsXqwG8KGbR&q=85&s=4f02fa3d4a69dc7282f63ae245d406f0" alt="属性类型对比" className="hidden dark:block w-full" width="400" height="150" data-path="images/reference/attribute-types-comparison.svg" />

### 配置属性

属性在项目的分类配置中与标签配置一起定义：

```json theme={null}
{
  "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`。

<Tip>
  将您的模型训练管道依赖的属性标记为 `required`。对于有用但不关键的补充元数据，保留可选属性。
</Tip>

## 层次分类体系

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

### 示例：车辆分类体系

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

### 何时使用层次结构

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

### 设计层次结构

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

## 单标签与多标签分类

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

### 单标签

每个对象或场景只接收一个类别标签。这是大多数标注类型的默认模式。

* 目标检测：每个边界框获得一个类别
* 场景分类：每个图像获得一个类别

### 多标签

一个对象或场景可以同时接收多个标签。当类别不互斥时使用此模式。

* 图像可以同时是 `rainy` 和 `nighttime`
* 车辆可以同时是 `damaged` 和 `parked`

通过设置任务级分类类型在项目的分类配置中配置多标签分类：

```json theme={null}
{
  "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 个粗类别开始。仅在有足够数据且模型受益于区分时才添加子类别。

### 模糊边界

当两个类别在概念上重叠时，标注员会在使用哪个上产生分歧。

**问题：** 同时存在 `van` 和 `minivan`，但标注员无法可靠区分。

**解决方案：** 将它们合并为一个类别，或提供带有参考图像的明确视觉指南来展示边界。

### 缺失边缘案例

真实世界数据包含不完全符合分类体系的对象。

**问题：** 标注员遇到高尔夫球车，但分类体系只有 `car`、`truck` 和 `motorcycle`。

**解决方案：** 包含一个兜底类别如 `other_vehicle`，并定期审核标注为此类别的项目以识别需要添加的类别。

## 下一步

<CardGroup cols={2}>
  <Card title="核心概念" icon="book" href="/docs/zh/getting-started/concepts">
    回顾 Avala 平台的基本构建模块。
  </Card>

  <Card title="质量控制" icon="shield-check" href="/docs/annotation/guides/quality-control">
    设置审核工作流以验证标注质量。
  </Card>

  <Card title="标注类型" icon="pen-to-square" href="/docs/annotation/reference/annotation-types">
    查看边界框、多边形、长方体等的 JSON 格式。
  </Card>

  <Card title="第一个数据集" icon="rocket" href="/docs/annotation/tutorials/first-dataset">
    上传数据并创建您的第一个标注项目。
  </Card>
</CardGroup>
