车道线识别之 tusimple 数据集介绍

Tusimple 是一家做自动驾驶的公司,他也公布了一些其在自动驾驶领域积累的数据,其中有一些是和车道线检测相关的。2018年6 月份,其举办了一次以摄像头图像数据做车道检测的比赛,公开了一部分数据及其标注。数据下载数据是:https://github.com/TuSimple/tusimple-benchmark/issues/3

在其doc中可以发现数据个数的一些说明

标注json 文件中每一行包括三个字段

raw_file : 每一个数据段的第20帧图像的的 path 路径

lanes 和 h_samples 是数据具体的标注内容,为了压缩,h_sample 是纵坐标(应该是从上到下拍好顺序的),lanes 是每个车道的横坐标,是个二维数组。

-2 表示这个点是无效的点

上面的数据就有 4 条车道线,第一条车道线的第一个点的坐标是(632,280)。

标注的过程应该是,将图片的下半部分如70%*height 等分成N份。然后取车道线(如论虚实)与该标注线交叉的点

利用以下脚本可以处理得到标注的数据,这个脚本稍微改动下也可以作为深度学习输入的图像。

# -*- coding: utf-8 -*-
import cv2
import json
import numpy as np

base_path = "/Users/jcl/workspace/lane_detection/"

file=open(base_path+‘test_label.json‘,‘r‘)
image_num=0

for line in file.readlines():
    data=json.loads(line)
    # print data[‘raw_file‘]
    # 取第 29 帧 看一下处理的效果
    if image_num == 29:
        image=cv2.imread(base_path+data[‘raw_file‘])
        # 二进制图像数组初始化
        binaryimage=np.zeros((image.shape[0],image.shape[1],1),np.uint8)
        # 实例图像数组初始化
        instanceimage=binaryimage.copy()
        arr_width=data[‘lanes‘]
        arr_height=data[‘h_samples‘]
        width_num=len(arr_width)
        height_num=len(arr_height)
        # print width_num
        # print height_num
        # 遍历纵坐标
        for i in range(height_num):
            lane_hist=40
            # 遍历各个车道的横坐标
            for j in range(width_num):
                # 端点坐标赋值
                if arr_width[j][i-1]>0 and arr_width[j][i]>0:
                    binaryimage[int(arr_height[i]),int(arr_width[j][i])]=255
                    instanceimage[int(arr_height[i]),int(arr_width[j][i])]=lane_hist
                    if i>0:
                        # 画线,线宽10像素
                        cv2.line(binaryimage, (int(arr_width[j][i-1]),int(arr_height[i-1])), (int(arr_width[j][i]),int(arr_height[i])), 255, 10)
                        cv2.line(instanceimage,(int(arr_width[j][i-1]),int(arr_height[i-1])), (int(arr_width[j][i]),int(arr_height[i])), lane_hist, 10)
                lane_hist+=50
        cv2.imshow(‘image.jpg‘,image)
        cv2.waitKey()
        cv2.imshow(‘binaryimage.jpg‘,binaryimage)
        cv2.waitKey()
        cv2.imshow(‘instanceimage.jpg‘,instanceimage)
        cv2.waitKey()
        break
        # string1=base_path+"gt_image_binary/"+str(image_num)+".png"
        # string2=base_path+"gt_image_instance/"+str(image_num)+".png"
        # string3=base_path+"raw_image/"+str(image_num)+".png"
        # cv2.imwrite(string1,binaryimage)
        # cv2.imwrite(string2,instanceimage)
        # cv2.imwrite(string3,image)
    image_num = image_num + 1

file.close()
print "total image_num:"+str(image_num)

处理完之后图片输出如下所示:

Tusimple 数据的标注特点:

1、车道线实际上不只是道路上的标线,虚线被当作了一种实线做处理的。这里面双实线、白线、黄线这类信息也是没有被标注的。

2、每条线实际上是点序列的坐标集合,而不是区域集合

原文地址:https://www.cnblogs.com/oftenlin/p/10670534.html

时间: 2024-11-05 23:24:43

车道线识别之 tusimple 数据集介绍的相关文章

语义分割之车道线检测Lanenet(tensorflow版)

Lanenet 一个端到端的网络,包含Lanenet+HNet两个网络模型,其中,Lanenet完成对车道线的实例分割,HNet是一个小网络结构,负责预测变换矩阵H,使用转换矩阵H对同属一条车道线的所有像素点进行重新建模 将语义分割和对像素进行向量表示结合起来的多任务模型,最近利用聚类完成对车道线的实例分割. 将实例分割任务拆解成语义分割和聚类,分割分支负责对输入图像进行语义分割(对像素进行二分类,判断像素属于车道线还是背景),嵌入分支对像素进行嵌入式表示,可将分割后得的车道线分离成不同的车道实

Pascal VOC & COCO数据集介绍 & 转换

目录 Pascal VOC & COCO数据集介绍 Pascal VOC数据集介绍 1. JPEGImages 2. Annotations 3. ImageSets 4. SegmentationObject & SegmentationClass COCO数据集介绍 数据集分类 Coco VOC数据集转化为COCO数据集格式 训练detectron 训练 测试 评估 Reference Pascal VOC & COCO数据集介绍 Pascal VOC数据集介绍 Annotat

车道线检测资源

数据集 CULane Dataset https://xingangpan.github.io/projects/CULane.html BDD100K https://bdd-data.berkeley.edu/ 代码 Spatial CNN for Traffic Lane Detection https://github.com/XingangPan/SCNN 汇总 GitHub:车道线检测最全资料集锦 http://bbs.cvmart.net/articles/158/github-c

图像分割 - LaneNet + H-Net 车道线检测

本文是对论文的解读与思考 论文:  Towards End-to-End Lane Detection: an Instance Segmentation Approach introduction 该论文提出了一种 端到端 的 实例分割方法,用于车道线检测: 论文包含 LaneNet + H-Net 两个模型网络,其中 LaneNet 是一种将 语义分割 和 像素矢量化 结合起来的多任务模型,语义分割用来分割车道线与背景,像素矢量化 用于把属于同一条车道线的像素 聚类 在一起, H-Net 是

检测车道线——2.选择兴趣区域 Region Masking

通过简单的颜色选择,我们设法消除了图像中除了车道线以外的几乎所有内容.但是,在这一点上,自动提取确切的线条仍然非常棘手,因为我们仍然在周边检测到了一些不是线条线的其他物体. 在这种情况下,我将假定拍摄图像的前置摄像头安装在汽车的固定位置,这样车道线总是会出现在图像的同一区域. 所以在提取行车线的时候,只关注这个梯形区域内的图像,可以避免其他区域的信息造成干扰.这个梯形区域如果选取地太大,则会引入更多无关信息(比如护栏,树木等),如果梯形区域选取太小,则可能看不见行车线,所以这里需要权衡.接下来,

数字图像处理:基于霍夫变换的车道线检测

1 数字图像处理:基于霍夫变换的车道线检测 https://zhuanlan.zhihu.com/p/60190848 2 环境 2-1  安装  Anaconda3 环境 2-2  在Anaconda3 环境种安装开发IDE  spyder 刚开始找不到spyder,但是我安装完vs code之后就出现了选择安装spyder的图标 2-3 安装opencv和contrib扩展库 2-4安装matplotlib库 https://blog.csdn.net/weixin_42116878/art

语义分割之车道线检测(tensorflow版)

      由于项目需要,参考了多篇相关车道线检测论文与源码,设计了一套Tensorflow版车道线检测功能. 二.基本结构:       该模型主要由以下部分组成: 1.数据源:包括所有原始数据,分组后的数据: 2.数据预处理:包括数据的准备,数据的导入,数据的提取,数据的分组(训练与测试): 3.配置文件:包括各种参数与超参数,如:训练周期,训练步长,批量数据,学习率,卷积核大小,全连接大小,训练模型存放路径(checkpoint),摘要存放路径(summary)等: 4.基础网络:包括基本

Udacity无人驾驶工程师试看课——车道线检测观后感

第一周的内容就是完成一个项目 Finding Lane Line,是免费试看的,网页版的,最多三四个小时就能看完. 讲的就是整个pipeline,一分钟视频版可以在这里看完:https://www.youtube.com/watch?v=xknesDIgOcA 或者看这个博客https://medium.com/udacity/udacity-self-driving-car-nanodegree-project-1-finding-lane-lines-719ac1adbed9 我也简单描述一

线圈式电磁炮1----原理介绍

线圈式电磁炮 电磁炮这一未来的军事武器,本就是一件小众的事情.于我而言,对于电磁炮技术有些许了解也是在2019年电子设计大赛之时.在这之前,关于它的信息全部来自于新闻报道,对于它的认识也就是一个模糊的印象. 在2019年电子设计大赛之时,查阅了大量的期刊文献,从见到了电磁炮发展的历史.演变的方向.也开始关注各国电磁炮技术的进展.作为大型军事武器,电磁炮大多采用电枢和轨道组成电磁轨道炮:作为手持玩具,一些爱好者采用线圈制作感应线圈炮.在这类我将介绍感应式线圈炮的原理,推导它的数学表达式.分析其中的