车道识别模型---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 python3.8 conda activate unet pip install -r requirements.txt (特别要注意torch和torchvision的版本以及自己的cuda版本是否一致)如果对torch和torchvision环境配置不清除可以在pytorch官网查询博主的环境为torch2.1.0torchvision0.16.0cuda11.x https://pytorch.org/get-started/previous-versions/三、 数据集制作3.1 labelme下载安装车道线标注使用labelme特别方便建议下载labelme工具(最新版要求python3.9版本及以上如果你的python版本低于3.9建议新建conda虚拟环境)conda create -n labelme python3.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, transformtransform ) val_dataset BDD100KDataset( images_dir/home/orin/Downloads/data/val/jpg, masks_dir/home/orin/Downloads/data/val/mask, transformtransform )所以我们的文件格式可以这样创建/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), dtypenp.uint8) # 处理json中每个shape绘制折线 for shape in annotation.get(shapes, []): points shape[points] pts np.array(points, np.int32) # 绘制线条 # 你可以调整线宽比如为2或3 cv2.polylines(mask, [pts], isClosedFalse, color255, thickness3) # 保存掩码 cv2.imwrite(mask_path, mask) # 你的路径 images_dir rD:\AI\Lane-Detection-UNet-main\data_process\data\jpg masks_dir rD:\AI\Lane-Detection-UNet-main\data_process\data\mask json_dir rD:\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, encodingutf-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_DEVICES0 python train.py训练完成之后会得到一个best_unet_lane_detection.pth权重文件五、测试效果博主自己改动了一下inference.py代码增加了一个二值化的图CUDA_VISIBLE_DEVICES0 python inference.py 注意改动测试图片路径训练过程有什么问题的欢迎和博主讨论博主qq2904385943训练成功完结撒花