Ultra-Fast-Lane-Detection车道线模型训练自己数据集(基于culane模型)

1、克隆项目

2、创建虚拟环境,安装依赖包

3、进行labelme标注

关注下“labelme”、“points”

4、生成culane格式

以生成训练集为例

首先新建文件夹,放入图片集

mkdir train_dataset

将json文件放入train_dataset中,执行

python scripts/json2culane.py 

 这时候会在train_dataset生成文件夹

 

其中images_dir存储原始图片;

labels_dir存储掩码图,打开基本漆黑一片,实际存车道线的掩码图;

train_gt.txt存储标签 

执行$ python json2culane.py前需要修改下列部分

    data_root = "/home/lyn/Desktop/cdx0822/train_dataset/"
    json_file = "/home/lyn/Desktop/cdx0822/train_dataset/train_json/"
    dir_img = '/images_dir/'
    dir_labelimg = '/labels_dir/'
    train_gt_txt = data_root + 'list/train_gt.txt'

json2culane.py代码如下:

# encoding:utf-8
import argparse
import json
import os
import os.path as osp
import base64
import warnings

import PIL.Image
import yaml

from labelme import utils

#import cv2
import numpy as np
#from skimage import img_as_ubyte

def json2point_txt(path_json, path_txt):  # 可修改生成格式生成
    with open(path_json, 'r') as path_json:
        jsonx = json.load(path_json)
        with open(path_txt, 'w+') as ftxt:
            for shape in jsonx['shapes']:
                label = str(shape['label']) + ' '
                xy = np.array(shape['points'])
                strxy = ''
                for m, n in xy:
                    m = int(m)
                    n = int(n)
                    # print('m:',m)
                    # print('n:',n)
                    strxy += str(m) + ' ' + str(n) + ' '
                label = strxy
                ftxt.writelines(label + "\n")

def json2gt_txt(path_json, path_img, path_labelimg, train_gt_txt):  # 可修改生成格式
    with open(path_json, 'r') as path_json:
        jsonx = json.load(path_json)
        with open(train_gt_txt, 'a+') as ftxt:
            labelarray = [0,0,0,0]
            for shape in jsonx['shapes']:
                # label = int(shape['label'])
                '''if(shape['label'] == "left_lanes"):
                    label =2
                elif(shape['label'] == "right_lanes"):
                    label =3
                else:
                    label =1'''
                if(shape['label'] == "line1"):
                    label=1
                elif(shape['label'] == "line2"):
                    label=2
                elif(shape['label'] == "line3"):
                    label=3
                elif(shape['label'] == "line4"):
                    label=4
                if label == 1:
                    labelarray[0] = 1
                if label == 2:
                    labelarray[1] = 1
                if label == 3:
                    labelarray[2] = 1
                if label == 4:
                    labelarray[3] = 1

            labelstr = str(labelarray[0])+ " " + str(labelarray[1])+ " " + str(labelarray[2])+ " " + str(labelarray[3])
            ftxt.writelines(labelstr + "\n")

def main():
    #json_file = args.json_file
    data_root = "/home/lyn/Desktop/cdx0829/val/"
    json_file = "/home/lyn/Desktop/cdx0829/val/val_json/"
    dir_img = '/images_dir/'
    dir_labelimg = '/labels_dir/'
    train_gt_txt = data_root + 'list/val_gt.txt'
    list_path = os.listdir(json_file)
   # line_txt = '/home/lyn/Desktop/cdx0829/val/line_txt/' # txt存储目录
    list_dir = osp.join(data_root, 'list')
    if not osp.exists(list_dir):
        os.mkdir(list_dir)
    images_dir = osp.join(data_root, 'images_dir')
    if not osp.exists(images_dir):
        os.mkdir(images_dir)
    labels_dir = osp.join(data_root, 'labels_dir')
    if not osp.exists(labels_dir):
        os.mkdir(labels_dir)    
   # if not os.path.exists(line_txt):
     #   os.makedirs(line_txt)
     
        

    for i in range(0, len(list_path)):
        if list_path[i].endswith('.json'):
            path_json = os.path.join(json_file, list_path[i])
            if os.path.isfile(path_json):
                data = json.load(open(path_json))
                img = utils.img_b64_to_arr(data['imageData'])
                lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])

                captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]

                lbl_viz = utils.draw_label(lbl, img, captions)
                save_file_name = osp.basename(path_json).split('.')[0]

                PIL.Image.fromarray(img).save(osp.join(images_dir, '{}.jpg'.format(save_file_name)))
                PIL.Image.fromarray(lbl).save(osp.join(labels_dir, '{}.png'.format(save_file_name)))
                
                # 生成lines.txt
                path_txt = images_dir + "/" + list_path[i].replace('.json', '.lines.txt')
                # print(path_txt)
                json2point_txt(path_json, path_txt)                

                # 生成train_gt_txt
                path_img = dir_img + list_path[i].replace('.json', '.jpg')
                path_labelimg = dir_labelimg +  list_path[i].replace('.json', '.png')

                with open(train_gt_txt, 'a+') as ftxt:    
                    ftxt.writelines(path_img + " " + path_labelimg + " ") #写入txt文件

                json2gt_txt(path_json, path_img, path_labelimg, train_gt_txt)                                

if __name__ == '__main__':
    #  base64path = argv[1]
    main()

5、配置culane参数,进行训练

python train.py configs/culane.py


其中configs/culane.py 需要修改一下 训练集的数据 海可以更改训练参数比如:
    # epoch , batch_size ,optimizer ,learning_rate,adam
其中log_path项必填
log_path = "./result"
dataset='CULane'
    # 训练集的数据路径,
data_root = './train_dataset'

python train.py configs/culane.py --batch_size 8

每一轮epoch都会生成一次pth

6、可视化日志

tensorboard --logdir ./result --bind_all

7、demo展示生成avi

修改demo.py对应参数,其中train_gt.txt只是为了方便,此时你应该用你的验证集看看效果。不然训练的数据去看是不合理的。

python demo.py configs/culane.py --test_model xxx/xxx/ep099.pth(权重文件的地址)
  • 2
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
要复现"ultra fast structure-aware deep lane detection"代码,首先需要了解该算法的原理和网络结构。该算法是一种深度学习方法,用于车道线检测。其核心思想是结合结构感知机制和快速推理策略,以实现高效、准确的车道线检测。 为了复现该算法,需要完成以下步骤: 1. 数据集准备:收集车道线数据集并进行相应的标注。可以使用公开数据集,如CULane或TuSimple等,或者自己采集数据集数据集应包含车道线图像以及对应的标注信息。 2. 网络结构构建:根据论文中提到的网络结构,构建模型。根据论文中的说明,可以选择使用FCN、UNet等结构。确保灵活地调整网络的深度和宽度,以适应不同的数据集和性能要求。 3. 损失函数定义:根据论文中的介绍,选择适当的损失函数,如二分类交叉熵损失函数等,以最小化预测标注和真实标注之间的差异。 4. 数据预处理:对输入图像进行预处理,如图像归一化、resize等,以适应网络的输入要求。 5. 模型训练:使用准备好的数据集和网络结构,进行模型训练。设置合适的超参数,如学习率、批大小等。通过迭代优化网络参数,使模型逐渐学习到车道线的特征。 6. 模型评估:使用测试集对模型进行评估,计算准确率、召回率、F1得分等指标,以评估模型的性能。 7. 代码测试:使用测试集对复现的代码进行测试,观察模型的预测结果。可进行可视化展示,比较模型的预测结果与真实标注的差距。 8. 优化和改进:根据测试结果和需要,对网络结构、超参数等进行调整和优化,进一步提升模型性能。 通过以上步骤,就可以较为全面地复现"ultra fast structure-aware deep lane detection"代码,从而实现高效、准确的车道线检测算法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值