使用YOLOv8进行训练道路车道线及路面标识检测数据集 使用权重识别直行右转限速虚线直线右转向左转向禁止直行等 并构建道路路面标识识别系统

使用YOLOv8进行训练道路车道线及路面标识检测数据集 使用权重识别直行右转限速虚线直线右转向左转向禁止直行等 并构建道路路面标识识别系统

以下文字及代码仅供参考。

道路车道线检测数据集 1700张 车道线 带标注 voc yolo在这里插入图片描述

在这里插入图片描述

1
在这里插入图片描述
构建一个针对道路车道线检测的系统,并使用YOLOv8进行训练,我们需要完成以下几个步骤:数据准备、模型训练、验证和推理,以及构建用户界面。下面将详细介绍每个步骤。
以下是翻译后的内容:
标签 图片编号 边界框编号
虚线 (939,1287) 无
直线 (616,964) 无
右方向 (409,437) 无
左合流线 (252,258) 无
人员安全区 (245,259) 无
直行车道方向 (602,900) 无
右合流线 (146,146) 无
限速 40(Spedini:40) (15,24) 无
左方向 (256,283) 无
左合流箭头 (180,196) 无
中心线 (367,380) 无
限速 80(SpeedlinitB0) (19,40) 无
直行和右转 (139,141) 无
(Caloreone ) (28,83) 无
反向三角形 (92,97) 无
施工区 (5,6) 无
公交专用道 (17,19) 无
限速 50 (25,39) 无
右合流箭头 (56,59) 无
限速 30 (51,77) 无
禁止掉头 (19,20) 无
道路菱形标识 (92,162) 无
禁止直行 (135,152) 无
禁止右转 (36,36) 无
禁止左转 (53,53) 无
限速 70 (9,17) 无
限速 60 (11,21) 无
直行和左转 (116,120) 无
对向车道左转 (26,27) 无
限速 90 (5,9) 无
突发虚线 (17,18) 无
左转和掉头 (36,36) 无
转弯虚线 (46,46) 无
停止线 (185,188) 无
掉头 (42,44) 无
(Croslalk 拼写可能有误,暂无法准确翻译) (172,190) 无
对向车道掉头 (13,13) 无
公交停靠区 (6,7) 无
自行车道 (0,7) 无
施工左合流箭头 (1,1) 无
直行、左转、右转 (1,1) 无
转弯方向 (8,11) 无
左转和右转 (3,3) 无
限速 50 (1,1) 无
总计 (1792,6878) 无
请注意,原文中 “Caloreone” 和 “Croslalk” 可能拼写错误,导致无法准确翻译,你可以根据实际情况进行确认和修正。

数据准备

假设您的数据集已经按照VOC格式标注好,并且您希望将其转换为YOLO格式(如果尚未准备好)。首先,确保数据集按以下结构组织:

dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
└── labels/
    ├── train/
    ├── val/
    └── test/

同时,提供一个data.yaml文件,内容如下:

train: ./dataset/images/train
val: ./dataset/images/val
test: ./dataset/images/test

nc: 31 # 类别数量,根据提供的类别计算得出
names: ['DotLine', 'StraightLine', 'RightDirection', 'LeftNergeLine', 'PeopleSafetyZone', 
        'StraightDirection', 'RightWNergeLine', 'Spedini40', 'LeftDireotion', 'Leftmergarrow',
        'CenterLine', 'SpeedlinitB0', 'StraightandRight', 'Caloreone', 'OppositeTrisngle',
        'ConstructionZone', 'BusLine', 'Speedlinit50', 'Rightnergearrou', 'Speedlinit30',
        'Nouturn', 'Roadianond', 'NoStraight', 'NoRightTurn', 'NoLeftTurn', 'speedlinit70',
        'spedlinit60', 'StraightandLoft', 'OppositeideLoft', 'Speedlinit90', 'SuddenlyDotLine',
        'LeftandUturn', 'TurnDotLine', 'StopLine', 'Uturn', 'Croslalk', 'OppositeSidelturn',
        'Busstopzone', 'bikeroad', 'Constructionleftmergcarrow', 'StraightLeftRight',
        'TurnDirection', 'LeftandRight', 'SpeedLinit50']

模型训练

下面是详细的训练代码示例:

from ultralytics import YOLO
import os

def main():
    # 加载预训练的YOLOv8模型
    model = YOLO('yolov8n.pt')  # 根据实际情况选择其他版本如'yolov8s.pt', 'yolov8m.pt'等
    
    # 开始训练
    results = model.train(
        data='./path/to/data.yaml',  # 替换为您的data.yaml路径
        epochs=300,  # 根据需要调整epoch数量
        imgsz=640,  # 输入图像尺寸
        batch=16,  # 批次大小,根据GPU内存调整
        project='./runs/detect',  # 训练结果保存位置
        name='lane_detection',  # 实验名称
        optimizer='SGD',  # 优化器类型
        device='0',  # 使用第0号GPU,'cpu'表示使用CPU
        save=True,  # 是否保存模型权重
        cache=True,  # 是否缓存数据到内存加速训练
    )

if __name__ == '__main__':
    main()

验证模型

在训练完成后,可以对模型进行验证以评估其性能。

# 加载最佳权重
model = YOLO('./runs/detect/lane_detection/weights/best.pt')

# 对验证集进行评估
results = model.val(
    data='./path/to/data.yaml',
    split='val',  # 或者'test'
)

构建道路车道线检测系统

接下来,我们将构建一个简单的GUI来展示模型的预测结果。这里我们使用tkinter作为GUI库,结合OpenCV和Pillow处理图像显示。

关键代码

首先,导入必要的库:

from tkinter import Tk, Label, Button, filedialog, Canvas, NW
from PIL import Image, ImageTk
import cv2
from ultralytics import YOLO
import numpy as np

定义加载模型和检测函数:

def load_model():
    """加载预训练的YOLOv8模型"""
    model = YOLO('./runs/detect/lane_detection/weights/best.pt')
    return model

model = load_model()

def detect_lane(image_path):
    """使用YOLO模型检测车道线"""
    results = model.predict(source=image_path)
    img = cv2.imread(image_path)
    for result in results:
        boxes = result.boxes.numpy()
        for box in boxes:
            r = box.xyxy
            x1, y1, x2, y2 = int(r[0]), int(r[1]), int(r[2]), int(r[3])
            cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)
    return img

构建GUI界面:

class App:
    def __init__(self, window, window_title):
        self.window = window
        self.window.title(window_title)

        self.canvas = Canvas(window, width=640, height=480)
        self.canvas.pack()

        self.btn_select_image = Button(window, text="选择图片", width=20, command=self.select_image)
        self.btn_select_image.pack(anchor='center', expand=True)

        self.window.mainloop()

    def select_image(self):
        path = filedialog.askopenfilename()
        if len(path) > 0:
            image = detect_lane(path)
            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
            image = Image.fromarray(image)
            self.image_on_canvas = ImageTk.PhotoImage(image)
            self.canvas.create_image(0, 0, anchor=NW, image=self.image_on_canvas)

启动应用程序:

root = Tk()
App(root, "车道线检测系统")

包括训练YOLOv8模型以及创建一个简单的图形用户界面(GUI)用于展示模型的预测结果,下面是完整的主函数代码示例。此示例包含了数据集准备、模型训练、验证和推理,以及构建一个简易的GUI来加载图片并显示车道线检测结果。

主函数代码

from tkinter import Tk, Label, Button, filedialog, Canvas, NW
from PIL import Image, ImageTk
import cv2
from ultralytics import YOLO
import numpy as np
import os

# 加载YOLO模型
def load_model():
    """加载预训练的YOLOv8模型"""
    model = YOLO('./runs/detect/lane_detection/weights/best.pt')  # 确保路径正确
    return model

model = load_model()

# 使用YOLO模型检测车道线
def detect_lane(image_path):
    """使用YOLO模型检测车道线"""
    results = model.predict(source=image_path)
    img = cv2.imread(image_path)
    for result in results:
        boxes = result.boxes.numpy()
        for box in boxes:
            r = box.xyxy
            x1, y1, x2, y2 = int(r[0]), int(r[1]), int(r[2]), int(r[3])
            cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)  # 绘制矩形框
    return img

class App:
    def __init__(self, window, window_title):
        self.window = window
        self.window.title(window_title)

        self.canvas = Canvas(window, width=640, height=480)
        self.canvas.pack()

        self.btn_select_image = Button(window, text="选择图片", width=20, command=self.select_image)
        self.btn_select_image.pack(anchor='center', expand=True)

        self.window.mainloop()

    def select_image(self):
        path = filedialog.askopenfilename(filetypes=[("Image files", "*.jpg *.jpeg *.png")])
        if len(path) > 0:
            image = detect_lane(path)
            image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
            image = Image.fromarray(image)
            self.image_on_canvas = ImageTk.PhotoImage(image)
            self.canvas.create_image(0, 0, anchor=NW, image=self.image_on_canvas)

if __name__ == '__main__':
    # 训练代码部分可以放在注释中或根据需要运行
    """
    from ultralytics import YOLO
    
    def main_train():
        model = YOLO('yolov8n.pt')  # 根据实际情况选择其他版本
        results = model.train(
            data='./path/to/data.yaml',
            epochs=300,
            imgsz=640,
            batch=16,
            project='./runs/detect',
            name='lane_detection',
            optimizer='SGD',
            device='0',
            save=True,
            cache=True,
        )
    
    main_train()
    """
    
    # GUI启动部分
    root = Tk()
    App(root, "车道线检测系统")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值