☰
道路车道线及路面标识检测数据集
2026/9/27 23:01:36 网站建设 项目流程

使用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/trainval:./dataset/images/valtest:./dataset/images/testnc: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']

模型训练

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

fromultralyticsimportYOLOimportosdefmain():# 加载预训练的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'表示使用CPUsave=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处理图像显示。

关键代码

首先,导入必要的库:

fromtkinterimportTk,Label,Button,filedialog,Canvas,NWfromPILimportImage,ImageTkimportcv2fromultralyticsimportYOLOimportnumpyasnp

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

defload_model():"""加载预训练的YOLOv8模型"""model=YOLO('./runs/detect/lane_detection/weights/best.pt')returnmodel model=load_model()defdetect_lane(image_path):"""使用YOLO模型检测车道线"""results=model.predict(source=image_path)img=cv2.imread(image_path)forresultinresults:boxes=result.boxes.numpy()forboxinboxes: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)returnimg

构建GUI界面:

classApp: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()defselect_image(self):path=filedialog.askopenfilename()iflen(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来加载图片并显示车道线检测结果。

主函数代码

fromtkinterimportTk,Label,Button,filedialog,Canvas,NWfromPILimportImage,ImageTkimportcv2fromultralyticsimportYOLOimportnumpyasnpimportos# 加载YOLO模型defload_model():"""加载预训练的YOLOv8模型"""model=YOLO('./runs/detect/lane_detection/weights/best.pt')# 确保路径正确returnmodel model=load_model()# 使用YOLO模型检测车道线defdetect_lane(image_path):"""使用YOLO模型检测车道线"""results=model.predict(source=image_path)img=cv2.imread(image_path)forresultinresults:boxes=result.boxes.numpy()forboxinboxes: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)# 绘制矩形框returnimgclassApp: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()defselect_image(self):path=filedialog.askopenfilename(filetypes=[("Image files","*.jpg *.jpeg *.png")])iflen(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,"车道线检测系统")

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询