foggy cityscapes实例分割转yolo
时间: 2024-12-31 13:19:07 浏览: 9
### 将 Foggy Cityscapes 数据集的实例分割标签转换为 YOLOv5 兼容格式
为了使雾天城市景观(Foggy Cityscapes)数据集中的实例分割标注能够与YOLOv5兼容,需遵循特定的数据结构和文件命名约定。以下是具体操作指南:
#### 准备工作
确保安装了必要的库来处理图像和JSON文件,例如`opencv-python`用于图像读取以及`json`模块解析原始标注。
#### 转换流程说明
1. **加载源数据**
雾天城市景观提供了高质量的真实世界场景下的语义分割掩码及其对应的边界框信息。这些信息存储在一个复杂的目录树内,并通过`.json`文件描述各个对象的位置和其他属性[^1]。
2. **创建目标文件夹结构**
构建类似于下面这样的简单而清晰的目标路径:
```
/path/to/your/dataset/
└── images/
├── train/
├── val/
└── labels/
├── train/
├── val/
```
3. **编写脚本实现自动化转换**
```python
import os
from pathlib import Path
import json
import cv2
def convert_cityscapes_to_yolo(cityscapes_path, yolo_output_dir):
image_paths = list(Path(os.path.join(cityscapes_path, "leftImg8bit")).rglob("*/*.png"))
for img_pth in image_paths:
label_file = str(img_pth).replace('leftImg8bit', 'gtFine').replace('.png', '_gtFine_polygons.json')
with open(label_file, 'r') as f:
data = json.load(f)
h, w = cv2.imread(str(img_pth)).shape[:2]
objects = []
for obj in data['objects']:
cls_name = obj["label"]
if not (cls_name.startswith("person") or cls_name.startswith("car")): continue
polygon_points = [(pt[0], pt[1]) for pt in obj["polygon"]]
x_coords, y_coords = zip(*polygon_points)
xmin, ymin = min(x_coords), min(y_coords)
xmax, ymax = max(x_coords), max(y_coords)
bbox_center_x = ((xmin + xmax)/2) / w
bbox_center_y = ((ymin + ymax)/2) / h
bbox_width = abs((xmax-xmin))/w
bbox_height = abs((ymax-ymin))/h
class_id = get_class_index(cls_name) # 定义此函数返回类别索引值
line = f"{class_id} {bbox_center_x:.6f} {bbox_center_y:.6f} {bbox_width:.6f} {bbox_height:.6f}\n"
objects.append(line)
save_label_txt(objects, img_pth.name.replace(".png", ".txt"), yolo_output_dir)
def save_label_txt(lines, filename, output_folder):
txt_filepath = os.path.join(output_folder, *filename.split('/')[-2:])
os.makedirs(os.path.dirname(txt_filepath), exist_ok=True)
with open(txt_filepath, 'w+') as file:
file.writelines(lines)
if __name__ == "__main__":
cityscape_dataset_root = "/path/to/foggy/cityscapes/"
destination_for_converted_labels = "./converted_foggy_cityscapes/"
convert_cityscapes_to_yolo(cityscape_dataset_root, destination_for_converted_labels)
```
这段Python代码实现了从Cityscapes格式到YOLO所需格式之间的自动转换过程。注意这里只选择了行人和个人车辆两类作为例子;实际应用时可以根据需求调整类别的选择标准。
阅读全文