将CityScapes数据集转换为COCO格式的实例分割数据集

##¥##2019年结束前最后两小时,写出本年度最后一篇博客,不是博主没地方去跨年,实在是Coding乐趣无穷ahhhh ##¥##

COCO数据集是研究实例分割的通用数据集,但是针对道路环境的数据较少,对于自动驾驶和移动机器人的应用并不适配。而提供道路环境的实例分割数据的数据集目前有KITTI、CityScapes、Apllo等,CityScapes算是应用较广,数据质量较高的一个,所以,本篇博文给大家分享一下将CityScapes的实例标注转换为COCO格式的过程。

首先,COCO的标注信息格式参考博文:https://blog.csdn.net/u012609509/article/details/88680841,COCO的图片文件均放在一个文件夹下,而其标注信息都放在annotation文件夹的不同.json文本中,一个文本中包含了对所有图片以及某一任务的所有图片的标注信息。

CityScapes提供的标注信息有彩色语义图、实例id单通道图、语义id单通道图以及所有语义polygon的文本描述.json:

一个COCO标注文件中包含info、lisenses、categories、images以及annotations,代码初始预先设定了前三项,categories可以根据自己的需要进行修改,我保留的类别有5类,car、pedestrian(person)、truck、bus、rider,对应cityscapes中类别id的24-28, 以下是cityscapes完整的类别定义:

List of cityscapes labels:

                     name |  id | trainId |       category | categoryId | hasInstances | ignoreInEval
    --------------------------------------------------------------------------------------------------
                unlabeled |   0 |     255 |           void |          0 |            0 |            1
              ego vehicle |   1 |     255 |           void |          0 |            0 |            1
     rectification border |   2 |     255 |           void |          0 |            0 |            1
               out of roi |   3 |     255 |           void |          0 |            0 |            1
                   static |   4 |     255 |           void |          0 |            0 |            1
                  dynamic |   5 |     255 |           void |          0 |            0 |            1
                   ground |   6 |     255 |           void |          0 |            0 |            1
                     road |   7 |       0 |           flat |          1 |            0 |            0
                 sidewalk |   8 |       1 |           flat |          1 |            0 |            0
                  parking |   9 |     255 |           flat |          1 |            0 |            1
               rail track |  10 |     255 |           flat |          1 |            0 |            1
                 building |  11 |       2 |   construction |          2 |            0 |            0
                     wall |  12 |       3 |   constr
### 将 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所需格式之间的自动转换过程。注意这里只选择了行人和个人车辆两类作为例子;实际应用时可以根据需求调整类别的选择标准。
评论 47
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值