深度学习yolo算法训练道路车道线检测数据集 通过训练出道路车道线道路交通引导线数据集的权重道路路面提醒标识数据集 建立基于深度学习道路车道线检测识别系统 识别检测虚线 直线 限速 左转 限速 掉头等
文章目录
道路车道线检测数据集1792张,8比2划分训练集和验证集,
训练集1433张,验证集359张
“道路车道线检测数据集”情况
🚗 道路车道线检测 数据集统计表(共44 类)
编号 | 类别名称 | 图片数量 | 标注框数量 |
---|---|---|---|
1 | DotLine(虚线) | 939 | 1287 |
2 | StraightLine(直线) | 616 | 964 |
3 | RightDirection(右行箭头) | 409 | 437 |
4 | LeftMergeLine(左合流线) | 252 | 258 |
5 | PeopleSafetyZone(行人安全区) | 245 | 259 |
6 | StraightDirection(直行箭头) | 602 | 900 |
7 | RightMergeLine(右合流线) | 146 | 146 |
8 | Speedlimit40(限速40) | 15 | 24 |
9 | LeftDirection(左行箭头) | 256 | 283 |
10 | Leftmergearrow(左合流箭头) | 180 | 196 |
11 | CenterLine(中心线) | 367 | 380 |
12 | Speedlimit80(限速80) | 19 | 40 |
13 | StraightandRight(直右箭头) | 139 | 141 |
14 | Colorcone(彩色锥形桶) | 28 | 83 |
15 | OppositeTriangle(对向三角) | 92 | 97 |
16 | ConstructionZone(施工区域) | 5 | 6 |
17 | BusLine(公交专用道) | 17 | 19 |
18 | Speedlimit50(限速50) | 25 | 39 |
19 | Rightmergearrow(右合流箭头) | 56 | 59 |
20 | Speedlimit30(限速30) | 51 | 77 |
21 | Nouturn(禁止转向) | 19 | 20 |
22 | Roaddiamond(路面菱形标记) | 92 | 162 |
23 | NoStraight(禁止直行) | 135 | 152 |
24 | NoRightTurn(禁止右转) | 36 | 36 |
25 | NoLeftTurn(禁止左转) | 53 | 53 |
26 | speedlimit70(限速70) | 9 | 17 |
27 | speedlimit60(限速60) | 11 | 21 |
28 | StraightandLeft(直左箭头) | 116 | 120 |
29 | OppositeSideLeft(对向左转) | 26 | 27 |
30 | Speedlimit90(限速90) | 5 | 9 |
31 | SuddenlyDotLine(突发虚线) | 17 | 18 |
32 | LeftandUturn(左转+掉头) | 36 | 36 |
33 | TurnDotLine(转弯虚线) | 46 | 46 |
34 | StopLine(停止线) | 185 | 188 |
35 | Uturn(掉头线) | 42 | 44 |
36 | CrossWalk(人行横道) | 172 | 190 |
37 | OppositeSideUturn(对向掉头) | 13 | 13 |
38 | Busstopzone(公交车站区域) | 6 | 7 |
39 | bikeroad(自行车道) | 7 | 7 |
40 | Constructionleftmergearrow(施工左合流箭头) | 1 | 1 |
41 | StraightLeftRight(直左右箭头) | 1 | 1 |
42 | TurnDirection(转弯方向箭头) | 8 | 11 |
43 | LeftandRight(左右箭头) | 3 | 3 |
44 | SpeedLimit50(限速50重复类) | 1 | 1 |
| 总计 | | 1792 | 7550 |
read:
- 数据集总图片数:1792 张
- 总标注框数:7550 个
- 按照 8:2 的比例划分为训练集(1433 张)和验证集(359 张)
- 每张图片中可能多个车道线或交通标志目标(如多个标注框),标注框总数大于图片总数
一、数据准备
确保同学的数据集已按照以下结构组织:
road_lane_marking_dataset/
├── images/
│ ├── train/
│ └── val/
├── labels/
│ ├── train/
│ └── val/
└── data.yaml
images/train/
和labels/train/
分别存放训练图像及其对应的标签文件。images/val/
和labels/val/
分别存放验证图像及其对应的标签文件。
每个图像都需要有一个对应的.txt
文件,格式为:class_id center_x center_y width height
,所有坐标归一化到[0,1]。
二、创建 data.yaml
文件
在项目根目录下创建 data.yaml
文件,内容如下:
train: ./road_lane_marking_dataset/images/train
val: ./road_lane_marking_dataset/images/val
nc: 44
names: ['DotLine', 'StraightLine', ..., 'SpeedLimit50'] # 列出所有的44个类别名称
三、安装依赖库
首先,确保安装了必要的Python包:
pip install ultralytics opencv-python matplotlib numpy
四、模型训练代码(Python脚本)
下面是用于训练YOLOv8模型的示例代码:
from ultralytics import YOLO
# 加载YOLOv8模型架构配置或预训练模型
model = YOLO('yolov8s.yaml') # 可根据需求选择不同大小的模型如'n', 'm', 'l', 'x'
# 开始训练
results = model.train(
data='./road_lane_marking_dataset/data.yaml',
epochs=100,
imgsz=640,
batch=16,
name='road_lane_marking_train',
project='runs/road_lane_marking',
exist_ok=True,
device=0 if torch.cuda.is_available() else 'cpu'
)
# 保存最佳权重
best_weights_path = model.save('./road_lane_marking_best.pt')
print(f"Best weights saved to {best_weights_path}")
五、模型验证与性能评估
训练完成后,可以使用以下代码来评估模型在验证集上的表现:
from ultralytics import YOLO
# 加载训练好的模型
model = YOLO('./road_lane_marking_best.pt')
# 在验证集上评估
metrics = model.val()
# 打印关键指标
print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"mAP@0.5: {metrics.box.map50:.4f}")
print(f"Recall: {metrics.box.recall.mean():.4f}")
print(f"Precision: {metrics.box.precision.mean():.4f}")
六、单图推理 + 结果可视化
下面是如何对单张图片进行推理并显示结果:
from ultralytics import YOLO
import cv2
def detect_and_show(image_path):
model = YOLO('./road_lane_marking_best.pt')
results = model.predict(source=image_path, conf=0.25)
for result in results:
im_array = result.plot()
im = cv2.cvtColor(im_array, cv2.COLOR_RGB2BGR)
cv2.imshow("Detection Result", im)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 测试一张图片
detect_and_show('path/to/test_image.jpg')
七、批量推理并保存结果
如果需要对一批图片进行推理并将结果保存:
from ultralytics import YOLO
model = YOLO('./road_lane_marking_best.pt')
# 批量处理指定文件夹下的图片,并保存结果
model.predict(
source='./road_lane_marking_dataset/images/val',
save=True,
project='runs/road_lane_marking/predictions',
name='val_results',
conf=0.25
)
以上步骤涵盖了从数据准备、模型训练、验证评估到推理预测的完整流程。根据实际情况调整参数设置(例如学习率、批次大小等)以优化模型性能。
。
一、环境准备
确保你已经安装了必要的Python包:
pip install ultralytics opencv-python matplotlib numpy
二、数据组织
数据集按照以下结构组织:
road_lane_marking_dataset/
├── images/
│ ├── train/
│ └── val/
├── labels/
│ ├── train/
│ └── val/
└── data.yaml
images/train/
和labels/train/
分别存放训练图像及其对应的标签文件。images/val/
和labels/val/
分别存放验证图像及其对应的标签文件。
每个图像都需要有一个对应的.txt
文件,格式为:class_id center_x center_y width height
,所有坐标归一化到[0,1]。
三、创建 data.yaml
文件
在项目根目录下创建 data.yaml
文件,内容如下:
train: ./road_lane_marking_dataset/images/train
val: ./road_lane_marking_dataset/images/val
nc: 44
names: ['DotLine', 'StraightLine', ..., 'SpeedLimit50'] # 列出所有的44个类别名称
四、模型训练
使用YOLOv8进行模型训练的代码示例如下:
from ultralytics import YOLO
# 加载YOLOv8模型架构配置或预训练模型
model = YOLO('yolov8s.yaml') # 根据需求选择不同大小的模型如'n', 'm', 'l', 'x'
# 开始训练
results = model.train(
data='./road_lane_marking_dataset/data.yaml',
epochs=100,
imgsz=640,
batch=16,
name='road_lane_marking_train',
project='runs/road_lane_marking',
exist_ok=True,
device=0 if torch.cuda.is_available() else 'cpu'
)
# 保存最佳权重
best_weights_path = model.save('./road_lane_marking_best.pt')
print(f"Best weights saved to {best_weights_path}")
五、模型验证与性能评估
训练完成后,可以使用以下代码来评估模型在验证集上的表现:
from ultralytics import YOLO
# 加载训练好的模型
model = YOLO('./road_lane_marking_best.pt')
# 在验证集上评估
metrics = model.val()
# 打印关键指标
print(f"mAP@0.5:0.95: {metrics.box.map:.4f}")
print(f"mAP@0.5: {metrics.box.map50:.4f}")
print(f"Recall: {metrics.box.recall.mean():.4f}")
print(f"Precision: {metrics.box.precision.mean():.4f}")
六、单图推理 + 结果可视化
下面是如何对单张图片进行推理并显示结果:
from ultralytics import YOLO
import cv2
def detect_and_show(image_path):
model = YOLO('./road_lane_marking_best.pt')
results = model.predict(source=image_path, conf=0.25)
for result in results:
im_array = result.plot()
im = cv2.cvtColor(im_array, cv2.COLOR_RGB2BGR)
cv2.imshow("Detection Result", im)
cv2.waitKey(0)
cv2.destroyAllWindows()
# 测试一张图片
detect_and_show('path/to/test_image.jpg')
七、批量推理并保存结果
如果需要对一批图片进行推理并将结果保存:
from ultralytics import YOLO
model = YOLO('./road_lane_marking_best.pt')
# 批量处理指定文件夹下的图片,并保存结果
model.predict(
source='./road_lane_marking_dataset/images/val',
save=True,
project='runs/road_lane_marking/predictions',
name='val_results',
conf=0.25
)
八、部署系统(可选)
为了更进一步地部署你的系统,你可以考虑以下几个方向:
- Web应用:使用Flask或FastAPI构建一个简单的API接口,用户可以通过上传图片获取检测结果。
- 桌面应用:使用PyQt或Tkinter等工具构建图形界面,方便用户直接拖拽图片进行检测。
- 边缘设备部署:如果你希望在嵌入式设备上运行此系统,可以考虑使用TensorRT或其他优化工具对模型进行优化以适应资源受限的环境。
示例:简易Flask API
这里提供一个非常基础的Flask API示例:
from flask import Flask, request, jsonify
from ultralytics import YOLO
import cv2
import numpy as np
from PIL import Image
import io
app = Flask(__name__)
model = YOLO('./road_lane_marking_best.pt')
@app.route('/predict', methods=['POST'])
def predict():
file = request.files['image']
img_bytes = file.read()
img = Image.open(io.BytesIO(img_bytes))
results = model.predict(source=img, conf=0.25)
for result in results:
im_array = result.plot()
im = Image.fromarray(cv2.cvtColor(im_array, cv2.COLOR_BGR2RGB))
img_byte_arr = io.BytesIO()
im.save(img_byte_arr, format='PNG')
img_byte_arr = img_byte_arr.getvalue()
return jsonify({"status": "success", "result": base64.b64encode(img_byte_arr).decode('utf-8')}), 200
if __name__ == '__main__':
app.run(debug=True)
以上文字及代码仅供参考。