news 2026/10/28 9:25:09

车道识别模型---Unet环境部署和个人数据集训练教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
车道识别模型---Unet环境部署和个人数据集训练教程

目录

一、github下载模型

二、环境部署

三、 数据集制作

3.1 labelme下载安装:

3.2 数据集格式介绍:

3.3数据标注过程:

3.4 数据转换:

四、 训练:

五、测试效果

一、github下载模型

模型地址:https://github.com/AnshChoudhary/Lane-Detection-UNet

二、环境部署

文件下载后压缩,推荐创建一个conda虚拟环境(miniconda的下载和安装不多赘述):

conda create -n unet python=3.8 conda activate unet pip install -r requirements.txt (特别要注意torch和torchvision的版本以及自己的cuda版本是否一致)

如果对torch和torchvision环境配置不清除可以在pytorch官网查询:(博主的环境为torch==2.1.0,torchvision=0.16.0,cuda=11.x) https://pytorch.org/get-started/previous-versions/

三、 数据集制作

3.1 labelme下载安装:

车道线标注使用labelme特别方便,建议下载labelme工具(最新版要求python3.9版本及以上,如果你的python版本低于3.9,建议新建conda虚拟环境)

conda create -n labelme python=3.10 conda activate labelme pip install labelme

这里介绍一个key,如果你想单独快速下载包,可以在pip install命令中添加-i参数指定镜像地址。以清华源为例,你可以使用以下命令:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple labelme

下载完成之后在虚拟环境终端输入:

labelme

即可出现labelme的UI界面,你就安装成功啦!

3.2 数据集格式介绍:

由于要自己准备数据集,所以我们得先了解模型需要的数据集格式,模型中train.py文件中的数据集是这样要求的:

train_dataset = BDD100KDataset( images_dir='/home/orin/Downloads/data/jpg', masks_dir='/home/orin/Downloads/data/mask', transform=transform ) val_dataset = BDD100KDataset( images_dir='/home/orin/Downloads/data/val/jpg', masks_dir='/home/orin/Downloads/data/val/mask', transform=transform )

所以我们的文件格式可以这样创建:

/home/orin/Downloads/data/ ├── jpg/ # 训练集图像目录 │ ├── image1.jpg │ ├── image2.jpg │ └── ... ├── mask/ # 训练集标注目录(如分割mask或车道线多边形) │ ├── image1_mask.png │ ├── image2_mask.png │ └── ... └── val/ # 验证集目录 ├── jpg/ # 验证集图像目录 │ ├── val_image1.jpg │ ├── val_image2.jpg │ └── ... └── mask/ # 验证集标注目录 ├── val_image1_mask.png ├── val_image2_mask.png └── ...

3.3数据标注过程:

首先打开图片目录(右上角还可以点击自动保存和更改输出路径加快标注速度):

单击右键后点击创建折线:

标注:

保存后得到json文件:

├── jpg/ # 训练集图像目录│ └── ...├── mask/ # 训练集标注目录(如分割mask或车道线多边形)│ └── ...└── val/ # 验证集目录├── jpg/ # 验证集图像目录│ └── ...└── mask/ # 验证集标注目录└── ...

3.4 数据转换:

由于数据集需要图片掩码,这里需要新建python程序将json数据格式转换为图片掩码:

import os import json import cv2 import numpy as np def generate_mask(image_path, annotation, mask_path): # 读取图片尺寸 img = cv2.imread(image_path) height, width = img.shape[:2] # 创建空白掩码 mask = np.zeros((height, width), dtype=np.uint8) # 处理json中每个shape,绘制折线 for shape in annotation.get('shapes', []): points = shape['points'] pts = np.array(points, np.int32) # 绘制线条 # 你可以调整线宽,比如为2或3 cv2.polylines(mask, [pts], isClosed=False, color=255, thickness=3) # 保存掩码 cv2.imwrite(mask_path, mask) # 你的路径 images_dir = r'D:\AI\Lane-Detection-UNet-main\data_process\data\jpg' masks_dir = r'D:\AI\Lane-Detection-UNet-main\data_process\data\mask' json_dir = r"D:\AI\Lane-Detection-UNet-main\data_process\data\json" if not os.path.exists(masks_dir): os.makedirs(masks_dir) for image_filename in os.listdir(images_dir): if not image_filename.endswith('.jpg'): continue image_path = os.path.join(images_dir, image_filename) json_filename = os.path.splitext(image_filename)[0] + '.json' json_path = os.path.join(json_dir, json_filename) if not os.path.exists(json_path): print(f"对应的json文件不存在:{json_path}") continue with open(json_path, 'r', encoding='utf-8') as f: annotation_data = json.load(f) # 生成掩码路径 mask_path = os.path.join(masks_dir, image_filename.replace('.jpg', '.jpg')) # 调用绘制线条生成掩码 generate_mask(image_path, annotation_data, mask_path)

即可得到图片掩码:

到此,数据集准备完毕!!!

四、 训练

进入模型目录,输入训练代码(注意改动标注图片路径)即可开始训练:

CUDA_VISIBLE_DEVICES=0 python train.py

训练完成之后会得到一个best_unet_lane_detection.pth权重文件:

五、测试效果

博主自己改动了一下inference.py代码,增加了一个二值化的图:

CUDA_VISIBLE_DEVICES=0 python inference.py (注意改动测试图片路径)

训练过程有什么问题的欢迎和博主讨论:

博主qq:2904385943

训练成功,完结撒花!!!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/28 9:22:16

Codex从代码补全到软件工程智能体:安装、实操与踩坑全解析

如果说前几年大家还在把“代码生成大模型”当成一种“更聪明的自动补全”,那么到Codex真正演变成一套软件工程智能体之后,这个判断就只对了一半。Codex这个名字最早确实是一组代码生成模型的代号,后来它逐渐变成跑在终端、桌面和编辑器里的AI…

作者头像 李华
网站建设 2026/10/28 9:21:28

两数之和-哈希表1-pythonc++

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 9:20:49

STM32嵌入式开发入门与进阶:从Cortex-M内核到RTOS实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 9:20:36

校园代取快递微信小程序毕业设计:Spring Boot+MySQL全流程源码解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 9:20:12

PowerVR三十年:从分块渲染到移动光追的图形架构进化史

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/28 9:19:33

芯片时序路径分析:七层物理本质与违例根因定位

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华