yolov8实例分割数据标注规则
时间: 2025-06-28 11:10:39 浏览: 4
### YOLOv8 实例分割数据标注规则
#### 数据格式要求
YOLOv8 支持多种输入格式,但对于实例分割任务而言,通常采用的是基于文本文件的标签格式。每个图像对应一个 `.txt` 文件作为其标签文件,位于特定目录下。这些标签文件中的每一行代表一个对象及其对应的多边形轮廓。
#### 多边形表示方法
对于每一个需要标记的对象,在标签文件中应记录该物体所属类别以及描述此物体质心位置和边界框大小的信息外加一系列顶点坐标来构成闭合曲线或多边形[^1]。具体来说:
- **类索引**:整数形式的第一列数值,指示当前所指代的目标属于哪一类;
- **质心相对坐标 (x_center, y_center)**:相对于图片宽度高度的比例值,范围介于0至1之间;
- **归一化后的宽高比例 (width_ratio, height_ratio)**:同样取值区间限定在(0, 1),分别表示包围盒宽度与原图宽度之比、长度同理;
- **多个顶点序列**:紧随上述四要素之后的一系列成对出现的小数,每一对都代表着一个多边形上的节点位置(横纵坐标的顺序不可颠倒),它们共同定义了目标区域的确切形状;
例如,假设有一个矩形障碍物占据画面左上角约五分之一面积,则可能被编码如下:
```
0 0.2 0.2 0.2 0.4 0.1 0.3 0.1 0.3 0.5 0.1 0.5
```
这里,“0”意味着这是第一个分类下的实体;接下来四个数字依次为重心所在处及占位尺寸;最后几组参数描绘出了这个简单几何图形的具体形态。
#### XML 和 JSON 转换支持
考虑到不同项目可能会有不同的原始数据源格式,官方提供了辅助工具帮助开发者们轻松完成从常见结构如 Pascal VOC 或 COCO 到适配 YOLO 框架所需的转换工作。特别是针对那些已经以 XML 或者 JSON 方式保存下来的带有多边形信息的数据集,可以利用专门编写的 Python 脚本来自动化这一流程[^3]。
```python
import json
from pathlib import Path
def convert_json_to_yolo(json_file_path, output_dir):
with open(json_file_path) as f:
data = json.load(f)
image_info = data['imagePath']
shapes = data['shapes']
txt_content = []
for shape in shapes:
label = str(shape['label'])
points = shape['points']
# Calculate bounding box and polygon coordinates...
x_coords = [p[0] for p in points]
y_coords = [p[1] for p in points]
bbox_w = max(x_coords) - min(x_coords)
bbox_h = max(y_coords) - min(y_coords)
center_x = (min(x_coords) + bbox_w / 2.) / img_width
center_y = (min(y_coords) + bbox_h / 2.) / img_height
norm_points = [(px/img_width, py/img_height) for px,py in points]
line = ' '.join([str(label), str(center_x), str(center_y),
str(bbox_w/img_width), str(bbox_h/img_height)] +
['{:.6f} {:.6f}'.format(*pt) for pt in norm_points])
txt_content.append(line)
out_txt_path = Path(output_dir) / '{}.txt'.format(Path(image_info).stem)
with open(out_txt_path, 'w') as outf:
outf.write('\n'.join(txt_content))
```
阅读全文
相关推荐


















