【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

相关文章

nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析(结合应用场景)

《nginx-t、nginx-sstop和nginx-sreload命令的详细解析(结合应用场景)》本文解析Nginx的-t、-sstop、-sreload命令,分别用于配置语法检... 以下是关于 nginx -t、nginx -s stop 和 nginx -s reload 命令的详细解析,结合实际应

MyBatis中$与#的区别解析

《MyBatis中$与#的区别解析》文章浏览阅读314次,点赞4次,收藏6次。MyBatis使用#{}作为参数占位符时,会创建预处理语句(PreparedStatement),并将参数值作为预处理语句... 目录一、介绍二、sql注入风险实例一、介绍#(井号):MyBATis使用#{}作为参数占位符时,会

Android kotlin中 Channel 和 Flow 的区别和选择使用场景分析

《Androidkotlin中Channel和Flow的区别和选择使用场景分析》Kotlin协程中,Flow是冷数据流,按需触发,适合响应式数据处理;Channel是热数据流,持续发送,支持... 目录一、基本概念界定FlowChannel二、核心特性对比数据生产触发条件生产与消费的关系背压处理机制生命周期

SQL中如何添加数据(常见方法及示例)

《SQL中如何添加数据(常见方法及示例)》SQL全称为StructuredQueryLanguage,是一种用于管理关系数据库的标准编程语言,下面给大家介绍SQL中如何添加数据,感兴趣的朋友一起看看吧... 目录在mysql中,有多种方法可以添加数据。以下是一些常见的方法及其示例。1. 使用INSERT I

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

SpringBoot+Docker+Graylog 如何让错误自动报警

《SpringBoot+Docker+Graylog如何让错误自动报警》SpringBoot默认使用SLF4J与Logback,支持多日志级别和配置方式,可输出到控制台、文件及远程服务器,集成ELK... 目录01 Spring Boot 默认日志框架解析02 Spring Boot 日志级别详解03 Sp

PostgreSQL的扩展dict_int应用案例解析

《PostgreSQL的扩展dict_int应用案例解析》dict_int扩展为PostgreSQL提供了专业的整数文本处理能力,特别适合需要精确处理数字内容的搜索场景,本文给大家介绍PostgreS... 目录PostgreSQL的扩展dict_int一、扩展概述二、核心功能三、安装与启用四、字典配置方法

MyBatis-Plus 中 nested() 与 and() 方法详解(最佳实践场景)

《MyBatis-Plus中nested()与and()方法详解(最佳实践场景)》在MyBatis-Plus的条件构造器中,nested()和and()都是用于构建复杂查询条件的关键方法,但... 目录MyBATis-Plus 中nested()与and()方法详解一、核心区别对比二、方法详解1.and()

MySQL 删除数据详解(最新整理)

《MySQL删除数据详解(最新整理)》:本文主要介绍MySQL删除数据的相关知识,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、前言二、mysql 中的三种删除方式1.DELETE语句✅ 基本语法: 示例:2.TRUNCATE语句✅ 基本语

深度解析Java DTO(最新推荐)

《深度解析JavaDTO(最新推荐)》DTO(DataTransferObject)是一种用于在不同层(如Controller层、Service层)之间传输数据的对象设计模式,其核心目的是封装数据,... 目录一、什么是DTO?DTO的核心特点:二、为什么需要DTO?(对比Entity)三、实际应用场景解析