Ultra Fast Structure-aware Deep Lane Detection的训练实战

Ultra Fast Structure-aware Deep Lane Detection的训练实战

1、模型介绍

论文
知乎
代码
CULane数据集简介

2、基于CULane数据集格式的训练

2.1、video to img

import glob
import os
import cv2

# --------视频转图像-----------------------------------------
def video2image(video_path, save_path, index):
    if not os.path.exists(save_path): os.makedirs(save_path)
    cap = cv2.VideoCapture(video_path)
    img_num = 0
    while 1:
        print(index)
        ret, frame = cap.read()
        if img_num >2000:break
        if ret == False:break
        save_name = os.path.join(save_path, str(index) + ".jpg")
        cv2.imwrite(save_name, frame)
        index += 1
        img_num +=1
    cap.release()

    return index


if __name__ == "__main__":
    video_path = r"Ultra-Fast-Lane-Detection\dataset\video"
    video_list = os.listdir(video_path)
    print(video_list)
    index = 0

    for i in range(len(video_list)):
        video_load = os.path.join(video_path, video_list[i])
        save_path = os.path.join(r"Ultra-Fast-Lane-Detection\dataset\img", video_list[i].split(".")[0])
        print(save_path)
        index = video2image(video_load,save_path,index)

2.2 Labelme标注

在这里插入图片描述

2.3 json转label图片

单张图像的代码位于:anaconda2\envs\labelme\Lib\site-packages\labelme\cli\json_to_dataset.py;
批量使用:

import os
import glob

os.chdir("B:\Anaconda\envs\Lane_Detection\Lib\site-packages\labelme\cli")
path1 = r"conda activate your env"
os.system(path1)

json_file = r'your json file'  # 文件路径
json_list = glob.glob("%s/*.json" % (json_file))
for i in json_list:
    path11 = r"python json_to_dataset.py "
    path22 = path11 + i
    os.system(path22)

结果如图所示:
在这里插入图片描述

2.4 基于json生成点坐标的文本文件

import os
import json
import numpy as np

dir_json = r'your json path'  # json存储的文件目录
dir_txt = r'your txt save path'  # txt存储目录
if not os.path.exists(dir_txt):
    os.makedirs(dir_txt)
list_json = os.listdir(dir_json)


def json2txt(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")


for cnt, json_name in enumerate(list_json):
    path_json = os.path.join(dir_json, json_name)
    print(path_json)
    path_txt = os.path.join(dir_txt, json_name.replace('.json', '.lines.txt'))
    print(path_txt)
    json2txt(path_json, path_txt)

结果如图所示:
在这里插入图片描述

2.5 train.txt\test.txt\val.txt制作

import os

folder_path = "img/val_img/"  # 文件夹路径
txt_file_path = "list/val.txt"    # 输出txt文件路径

with open(txt_file_path, "w") as txt_file:
    for file_name in os.listdir(folder_path):
        if file_name.endswith(".jpg"):
            file_path = "/"+folder_path+file_name
            txt_file.write(file_path + "\n")  # 将文件名写入txt文件,每个文件名占一行

效果如图所示:
在这里插入图片描述

2.5 label_Seg文件夹的制作

将2.3步骤生成的文件夹的里的label.png重命名并保存到其它文件夹

import os
import glob
import shutil
save_path = r"D:\pythonFiles\Lane_Detection\2-Ultra-Fast-Lane-Detection\dataset\CULane\laneseg"

seg_img_path = r"D:\pythonFiles\Lane_Detection\2-Ultra-Fast-Lane-Detection\dataset\CULane\laneseg\all"

img_list = glob.glob("%s/*/*.png" % (seg_img_path))

for img_path in img_list:
    if img_path.split("\\")[-1] == "label.png":
        num = img_path.split("\\")[-2].split("_")[0]
        new_name = num + ".png"
        save_name = os.path.join(save_path, new_name)
        shutil.copy(img_path, save_name)

效果如图所示:
在这里插入图片描述

2.6 制作train_gt.txt\val_gt.txt

import os

folder_path = "img/train_img/"  # 文件夹路径
txt_file_path = "list/train_gt.txt"    # 输出txt文件路径
seg_path = "laneseg/train_img/"
with open(txt_file_path, "w") as txt_file:
    for file_name in os.listdir(folder_path):
        if file_name.endswith(".jpg"):
            file_path = "/"+folder_path+file_name
            print(file_path)
            txt_file.write(file_path + " ")  # 将文件名写入txt文件

            file_gt_path = "/"+seg_path+file_name.split(".")[0]+".png"
            print(file_gt_path)
            txt_file.write(file_gt_path + " ")
            #
            txt_file.write("1 1 1 1\n")

效果如图所示
在这里插入图片描述

2.7 最终数据集结构

1 CULane
1.1 img
在这里插入图片描述

1.2 laneseg
在这里插入图片描述

1.3 list
在这里插入图片描述

3 开始训练

3.1 configs/culane.py

在这里插入图片描述在这里插入图片描述

3.2 开始训练

python train.py configs/culane.py 

3.3 测试

把之前生成的test.txt复制到CULane数据集的一级目录下

python test.py configs/culane.py --test_model weights/ep048.pth --test_work_dir ./tmp

4 参考

CSDN博客1

CSDN博客2

CSDN博客3

CULane数据集介绍

CSDN博客4

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-19 00:42:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-19 00:42:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-03-19 00:42:02       82 阅读
  4. Python语言-面向对象

    2024-03-19 00:42:02       91 阅读

热门阅读

  1. MySQL Binlog 日志的三种格式详解

    2024-03-19 00:42:02       38 阅读
  2. 0010、TS的字面量类型

    2024-03-19 00:42:02       41 阅读
  3. 【Kotlin】变量和代码块的初始化顺序

    2024-03-19 00:42:02       42 阅读
  4. MySQL常用函数

    2024-03-19 00:42:02       39 阅读
  5. 图论复习(最短路、最小生成树)

    2024-03-19 00:42:02       37 阅读
  6. linux休眠-电源管理过程梳理

    2024-03-19 00:42:02       37 阅读
  7. C# 如何解决主线程堵塞问题

    2024-03-19 00:42:02       41 阅读
  8. Leetcode 3085. Minimum Deletions to Make String K-Special

    2024-03-19 00:42:02       48 阅读
  9. 机器学习入门:探索智能算法的世界 (上)

    2024-03-19 00:42:02       39 阅读
  10. spring boot 实现 PDF转换图片

    2024-03-19 00:42:02       43 阅读
  11. uniapp 兼容pc与手机的样式方法

    2024-03-19 00:42:02       39 阅读