CULane车道线数据集Linux下快速部署指南

0 下载量 64 浏览量 更新于2024-10-03 收藏 102.12MB ZIP 举报
资源摘要信息:"车道线数据集CULane评价可直接用的linux系统下的opencv3压缩包" 本资源提供了一个针对CULane数据集的评价工具,它是专为车道线检测任务设计的。用户需要在Linux操作系统环境下使用已经编译好的opencv3.4.0版本,该版本已经为处理车道线检测任务而优化。在安装和配置过程中,用户需要将opencv库的路径添加到环境变量中,以便在执行评价脚本时能够正确地找到和使用opencv库。以下是关于该资源的详细知识点。 1. CULane数据集 CULane是一个广泛用于车道线检测研究的公开数据集。该数据集包含了多种复杂场景,如多车道、拥挤、阴影、照明变化等。它为研究者提供了一个很好的基准,以测试和比较车道线检测算法的性能。CULane数据集包括了大量带有车道标记的视频帧以及相应的标注信息,这些标注信息指明了每个车道的边界。 2. Linux系统下的OpenCV OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它支持多种编程语言,包括C++、Python等,并且可以跨平台运行,在Linux系统上同样适用。OpenCV提供了丰富的图像处理、视频分析以及机器学习功能。本资源中的opencv3.4.0版本,是OpenCV库的一个稳定版本,已经被预先编译,使得安装和配置变得简单快捷。 3. 安装和配置opencv3.4.0 用户在使用本资源时,需要按照提供的步骤进行安装和配置。首先,用户需要在自己的.bashrc文件中设置环境变量PKG_CONFIG_PATH和LD_LIBRARY_PATH,这两个环境变量指向了opencv库的位置。之后,需要执行source命令来使改动生效。这样做的目的是为了确保系统能够找到opencv的配置文件和库文件,从而在使用opencv相关功能时不会出现找不到库的错误。 4. 替换eval_validation.sh文件内容 eval_validation.sh是一个脚本文件,通常用于执行评价任务。为了确保评价工具能够正确使用opencv库,用户需要将lib文件夹的路径替换到eval_validation.sh文件中指定的位置。这一步是为了确保评价脚本能够链接到正确的opencv库文件。 5. 车道线检测 车道线检测是计算机视觉中的一个经典问题,它在自动驾驶和智能交通系统中非常重要。车道线检测的目标是从车辆前方的图像中检测出车道线的位置和形状,以帮助车辆进行路径规划和决策。近年来,随着深度学习技术的发展,基于卷积神经网络(CNN)的车道线检测方法受到了广泛的关注。 总结来说,本资源为研究者提供了一个配置好的Linux系统下的opencv3.4.0版本以及一套用于CULane数据集评价的工具。通过简单的环境变量配置和脚本修改,用户可以快速开始使用opencv进行车道线检测任务的研究和开发。这将极大地降低设置开发环境的门槛,加快车道线检测算法的研究进度。

import torch, os, cv2 from model.model import parsingNet from utils.common import merge_config from utils.dist_utils import dist_print import torch import scipy.special, tqdm import numpy as np import torchvision.transforms as transforms from data.dataset import LaneTestDataset from data.constant import culane_row_anchor, tusimple_row_anchor if __name__ == "__main__": torch.backends.cudnn.benchmark = True args, cfg = merge_config() dist_print('start testing...') assert cfg.backbone in ['18','34','50','101','152','50next','101next','50wide','101wide'] if cfg.dataset == 'CULane': cls_num_per_lane = 18 elif cfg.dataset == 'Tusimple': cls_num_per_lane = 56 else: raise NotImplementedError net = parsingNet(pretrained = False, backbone=cfg.backbone,cls_dim = (cfg.griding_num+1,cls_num_per_lane,4), use_aux=False).cuda() # we dont need auxiliary segmentation in testing state_dict = torch.load(cfg.test_model, map_location='cpu')['model'] compatible_state_dict = {} for k, v in state_dict.items(): if 'module.' in k: compatible_state_dict[k[7:]] = v else: compatible_state_dict[k] = v net.load_state_dict(compatible_state_dict, strict=False) net.eval() img_transforms = transforms.Compose([ transforms.Resize((288, 800)), transforms.ToTensor(), transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225)), ]) if cfg.dataset == 'CULane': splits = ['test0_normal.txt', 'test1_crowd.txt', 'test2_hlight.txt', 'test3_shadow.txt', 'test4_noline.txt', 'test5_arrow.txt', 'test6_curve.txt', 'test7_cross.txt', 'test8_night.txt'] datasets = [LaneTestDataset(cfg.data_root,os.path.join(cfg.data_root, 'list/test_split/'+split),img_transform = img_transforms) for split in splits] img_w, img_h = 1640, 590 row_anchor = culane_row_anchor elif cfg.dataset == 'Tusimple': splits = ['test.txt'] datasets = [LaneTestDataset(cfg.data_root,os.path.join(cfg.data_root, split),img_transform = img_transforms) for split in splits] img_w, img_h = 1280, 720 row_anchor = tusimple_row_anchor else: raise NotImplementedError for split, dataset in zip(splits, datasets): loader = torch.utils.data.DataLoader(dataset, batch_size=1, shuffle = False, num_workers=1) fourcc = cv2.VideoWriter_fourcc(*'MJPG') print(split[:-3]+'avi') vout = cv2.VideoWriter(split[:-3]+'avi', fourcc , 30.0, (img_w, img_h)) for i, data in enumerate(tqdm.tqdm(loader)): imgs, names = data imgs = imgs.cuda() with torch.no_grad(): out = net(imgs) col_sample = np.linspace(0, 800 - 1, cfg.griding_num) col_sample_w = col_sample[1] - col_sample[0] out_j = out[0].data.cpu().numpy() out_j = out_j[:, ::-1, :] prob = scipy.special.softmax(out_j[:-1, :, :], axis=0) idx = np.arange(cfg.griding_num) + 1 idx = idx.reshape(-1, 1, 1) loc = np.sum(prob * idx, axis=0) out_j = np.argmax(out_j, axis=0) loc[out_j == cfg.griding_num] = 0 out_j = loc # import pdb; pdb.set_trace() vis = cv2.imread(os.path.join(cfg.data_root,names[0])) for i in range(out_j.shape[1]): if np.sum(out_j[:, i] != 0) > 2: for k in range(out_j.shape[0]): if out_j[k, i] > 0: ppp = (int(out_j[k, i] * col_sample_w * img_w / 800) - 1, int(img_h * (row_anchor[cls_num_per_lane-1-k]/288)) - 1 ) cv2.circle(vis,ppp,5,(0,255,0),-1) vout.write(vis) vout.release()

2023-04-23 上传