【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

相关文章

IDEA实现回退提交的git代码(四种常见场景)

《IDEA实现回退提交的git代码(四种常见场景)》:本文主要介绍IDEA实现回退提交的git代码(四种常见场景),具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1.已提交commit,还未push到远端(Undo Commit)2.已提交commit并push到

Kotlin Compose Button 实现长按监听并实现动画效果(完整代码)

《KotlinComposeButton实现长按监听并实现动画效果(完整代码)》想要实现长按按钮开始录音,松开发送的功能,因此为了实现这些功能就需要自己写一个Button来解决问题,下面小编给大... 目录Button 实现原理1. Surface 的作用(关键)2. InteractionSource3.

python进行while遍历的常见错误解析

《python进行while遍历的常见错误解析》在Python中选择合适的遍历方式需要综合考虑可读性、性能和具体需求,本文就来和大家讲解一下python中while遍历常见错误以及所有遍历方法的优缺点... 目录一、超出数组范围问题分析错误复现解决方法关键区别二、continue使用问题分析正确写法关键点三

8种快速易用的Python Matplotlib数据可视化方法汇总(附源码)

《8种快速易用的PythonMatplotlib数据可视化方法汇总(附源码)》你是否曾经面对一堆复杂的数据,却不知道如何让它们变得直观易懂?别慌,Python的Matplotlib库是你数据可视化的... 目录引言1. 折线图(Line Plot)——趋势分析2. 柱状图(Bar Chart)——对比分析3

Spring Boot 整合 Redis 实现数据缓存案例详解

《SpringBoot整合Redis实现数据缓存案例详解》Springboot缓存,默认使用的是ConcurrentMap的方式来实现的,然而我们在项目中并不会这么使用,本文介绍SpringB... 目录1.添加 Maven 依赖2.配置Redis属性3.创建 redisCacheManager4.使用Sp

Python Pandas高效处理Excel数据完整指南

《PythonPandas高效处理Excel数据完整指南》在数据驱动的时代,Excel仍是大量企业存储核心数据的工具,Python的Pandas库凭借其向量化计算、内存优化和丰富的数据处理接口,成为... 目录一、环境搭建与数据读取1.1 基础环境配置1.2 数据高效载入技巧二、数据清洗核心战术2.1 缺失

使用Java实现Navicat密码的加密与解密的代码解析

《使用Java实现Navicat密码的加密与解密的代码解析》:本文主要介绍使用Java实现Navicat密码的加密与解密,通过本文,我们了解了如何利用Java语言实现对Navicat保存的数据库密... 目录一、背景介绍二、环境准备三、代码解析四、核心代码展示五、总结在日常开发过程中,我们有时需要处理各种软

Java List排序实例代码详解

《JavaList排序实例代码详解》:本文主要介绍JavaList排序的相关资料,Java排序方法包括自然排序、自定义排序、Lambda简化及多条件排序,实现灵活且代码简洁,文中通过代码介绍的... 目录一、自然排序二、自定义排序规则三、使用 Lambda 表达式简化 Comparator四、多条件排序五、

Java 压缩包解压实现代码

《Java压缩包解压实现代码》Java标准库(JavaSE)提供了对ZIP格式的原生支持,通过java.util.zip包中的类来实现压缩和解压功能,本文将重点介绍如何使用Java来解压ZIP或RA... 目录一、解压压缩包1.zip解压代码实现:2.rar解压代码实现:3.调用解压方法:二、注意事项三、总

Linux实现简易版Shell的代码详解

《Linux实现简易版Shell的代码详解》本篇文章,我们将一起踏上一段有趣的旅程,仿照CentOS–Bash的工作流程,实现一个功能虽然简单,但足以让你深刻理解Shell工作原理的迷你Sh... 目录一、程序流程分析二、代码实现1. 打印命令行提示符2. 获取用户输入的命令行3. 命令行解析4. 执行命令