【idd】——印度自动驾驶场景语义分割数据集(解析代码)

2024-03-06 06:50

本文主要是介绍【idd】——印度自动驾驶场景语义分割数据集(解析代码),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

语义分割,街景场景

在这里插入图片描述

简介

该数据集由安装在汽车上的前置摄像头获得的图像组成。这辆车在海德拉巴、班加罗尔等城市及其郊区行驶。图像大多是1080p分辨率,但也有一些图像是720p和其他分辨率。
在这里插入图片描述
我们的数据集标注有独特的标签,如广告牌、机动人力车、动物等。此外,我们亦会留意道路旁可能安全的驾驶区域。

数据集的标签被组织为4级层次结构。每个级别都给出了唯一的整数标识符。如下图所示:

y轴上每个标签的像素数。

四个级别的标签层次结构和中间级别(级别2,级别3)的标签id。

将用于预测和地面真实掩模的颜色编码分别对应于相应的掩模。

例子

在这里插入图片描述
输入图像的一些例子,基线cityscape预训练模型的预测,在这个数据集上训练的相同基线的预测,以及验证集的基本事实(按列顺序),可以在下面看到。
可以看到,在我们的数据集上训练的模型清楚地将道路旁的泥泞可行驶区域与道路本身区分开来。我们的数据集有广告牌和道路中间的路边/中间的标签。此外,我们的图像帧来自非结构化的驾驶设置,道路泥泞,车道弟子不常遵循,道路上有大量的车辆。

语义label的解析

参考:semantic-segmentation-indian-driving-dataset
code:

import os 
import cv2
import sys
import jsonimport numpy as np
import skimage.io as iofrom skimage.draw import polygon
from skimage import img_as_float# %%
root = './anue/'
root = 'D:/19segmentation/idd-20k-II/idd20kIID/19segmentation/idd-20k-II/idd20kII'# %% [markdown]
# # Get all labels in the dataset as a dictionary# %%
def get_all_labels(root):labels = []final_labels = {}img_folder, segmap_folder = os.listdir(root)#     sub_path_train_img = os.path.join(root, img_folder, './train')sub_path_train_seg = os.path.join(root, segmap_folder, './train')#     sub_path_val_img = os.path.join(root, img_folder, './val')sub_path_val_seg = os.path.join(root, segmap_folder, './val')# extract training labelsfor folder in os.listdir(sub_path_train_seg):
#         curr_img_folder = os.path.join(sub_path_train_img, folder)curr_seg_folder = os.path.join(sub_path_train_seg, folder)for file in os.listdir(curr_seg_folder):if 'json' not in file:continuef = open(os.path.join(curr_seg_folder, file), 'r')data = json.loads(f.read())for obj in data['objects']:if obj['label'] not in labels:labels.append(obj['label'])# extract validation labelsfor folder in os.listdir(sub_path_val_seg):
#         curr_img_folder = os.path.join(sub_path_val_img, folder)curr_seg_folder = os.path.join(sub_path_val_seg, folder)for file in os.listdir(curr_seg_folder):if 'json' not in file:continuef = open(os.path.join(curr_seg_folder, file), 'r')data = json.loads(f.read())for obj in data['objects']:if obj['label'] not in labels:labels.append(obj['label'])for i in range(len(labels)):final_labels[labels[i]] = ireturn final_labels# %%
labels = get_all_labels(root)# %%
labels# %% [markdown]
# # Generate Segmentation Maps# %%
def create_segmentation_maps(root, labels):img_folder, segmap_folder = os.listdir(root)if not os.path.exists('./img'):os.makedirs('img')if not os.path.exists('./img/train'):os.makedirs('img/train')if not os.path.exists('./img/val'):os.makedirs('img/val')if not os.path.exists('./seg'):os.makedirs('seg')if not os.path.exists('./seg/train'):os.makedirs('seg/train')if not os.path.exists('./seg/val'):os.makedirs('seg/val')sub_path_train_img = os.path.join(root, img_folder, './train')sub_path_train_seg = os.path.join(root, segmap_folder, './train')sub_path_val_img = os.path.join(root, img_folder, './val')sub_path_val_seg = os.path.join(root, segmap_folder, './val')for folder in os.listdir(sub_path_train_seg):curr_img_folder = os.path.join(sub_path_train_img, folder)curr_seg_folder = os.path.join(sub_path_train_seg, folder)for file in os.listdir(curr_img_folder):id = file.split('_')[0]img = cv2.imread(os.path.join(curr_img_folder, file))f = open(os.path.join(curr_seg_folder, id+'_gtFine_polygons.json'), 'r')data = json.loads(f.read())seg_map = np.zeros((data['imgWidth'],data['imgHeight']))for obj in data['objects']:label = obj['label']poly = np.array(obj['polygon'])rr, cc = polygon(poly[:,0], poly[:,1], seg_map.shape)seg_map[rr,cc] = labels[label]cv2.imwrite('./img/train/'+id+'.png', img)cv2.imwrite('./seg/train/'+id+'.png', seg_map.T)for folder in os.listdir(sub_path_val_seg):curr_img_folder = os.path.join(sub_path_val_img, folder)curr_seg_folder = os.path.join(sub_path_val_seg, folder)for file in os.listdir(curr_img_folder):id = file.split('_')[0]img = cv2.imread(os.path.join(curr_img_folder, file))f = open(os.path.join(curr_seg_folder, id+'_gtFine_polygons.json'), 'r')data = json.loads(f.read())seg_map = np.zeros((data['imgWidth'],data['imgHeight']), np.uint8)for obj in data['objects']:label = obj['label']poly = np.array(obj['polygon'])rr, cc = polygon(poly[:,0], poly[:,1], seg_map.shape)seg_map[rr,cc] = labels[label]cv2.imwrite('./img/val/'+id+'.png', img)cv2.imwrite('./seg/val/'+id+'.png', seg_map.T)# %%
create_segmentation_maps(root, labels)

解析出来可视化的例子
在这里插入图片描述

语义标签

共39个类别, 类别仅供参考
在这里插入图片描述

这篇关于【idd】——印度自动驾驶场景语义分割数据集(解析代码)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/779187

相关文章

Java中注解与元数据示例详解

《Java中注解与元数据示例详解》Java注解和元数据是编程中重要的概念,用于描述程序元素的属性和用途,:本文主要介绍Java中注解与元数据的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参... 目录一、引言二、元数据的概念2.1 定义2.2 作用三、Java 注解的基础3.1 注解的定义3.2 内

vscode保存代码时自动eslint格式化图文教程

《vscode保存代码时自动eslint格式化图文教程》:本文主要介绍vscode保存代码时自动eslint格式化的相关资料,包括打开设置文件并复制特定内容,文中通过代码介绍的非常详细,需要的朋友... 目录1、点击设置2、选择远程--->点击右上角打开设置3、会弹出settings.json文件,将以下内

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

C++中使用vector存储并遍历数据的基本步骤

《C++中使用vector存储并遍历数据的基本步骤》C++标准模板库(STL)提供了多种容器类型,包括顺序容器、关联容器、无序关联容器和容器适配器,每种容器都有其特定的用途和特性,:本文主要介绍C... 目录(1)容器及简要描述‌php顺序容器‌‌关联容器‌‌无序关联容器‌(基于哈希表):‌容器适配器‌:(

JavaScript中的isTrusted属性及其应用场景详解

《JavaScript中的isTrusted属性及其应用场景详解》在现代Web开发中,JavaScript是构建交互式应用的核心语言,随着前端技术的不断发展,开发者需要处理越来越多的复杂场景,例如事件... 目录引言一、问题背景二、isTrusted 属性的来源与作用1. isTrusted 的定义2. 为

C#提取PDF表单数据的实现流程

《C#提取PDF表单数据的实现流程》PDF表单是一种常见的数据收集工具,广泛应用于调查问卷、业务合同等场景,凭借出色的跨平台兼容性和标准化特点,PDF表单在各行各业中得到了广泛应用,本文将探讨如何使用... 目录引言使用工具C# 提取多个PDF表单域的数据C# 提取特定PDF表单域的数据引言PDF表单是一

SQL Server使用SELECT INTO实现表备份的代码示例

《SQLServer使用SELECTINTO实现表备份的代码示例》在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误,在SQLServer中,可以使用SELECTINT... 在数据库管理过程中,有时我们需要对表进行备份,以防数据丢失或修改错误。在 SQL Server 中,可以使用 SE

一文详解Python中数据清洗与处理的常用方法

《一文详解Python中数据清洗与处理的常用方法》在数据处理与分析过程中,缺失值、重复值、异常值等问题是常见的挑战,本文总结了多种数据清洗与处理方法,文中的示例代码简洁易懂,有需要的小伙伴可以参考下... 目录缺失值处理重复值处理异常值处理数据类型转换文本清洗数据分组统计数据分箱数据标准化在数据处理与分析过

大数据小内存排序问题如何巧妙解决

《大数据小内存排序问题如何巧妙解决》文章介绍了大数据小内存排序的三种方法:数据库排序、分治法和位图法,数据库排序简单但速度慢,对设备要求高;分治法高效但实现复杂;位图法可读性差,但存储空间受限... 目录三种方法:方法概要数据库排序(http://www.chinasem.cn对数据库设备要求较高)分治法(常

Python调用另一个py文件并传递参数常见的方法及其应用场景

《Python调用另一个py文件并传递参数常见的方法及其应用场景》:本文主要介绍在Python中调用另一个py文件并传递参数的几种常见方法,包括使用import语句、exec函数、subproce... 目录前言1. 使用import语句1.1 基本用法1.2 导入特定函数1.3 处理文件路径2. 使用ex