道路驾驶视角人车检测数据集 16000张 带标注 voc yolo

news2024/9/22 14:05:19

随着智能驾驶技术和车辆辅助系统的快速发展,道路驾驶视角下的多目标检测成为了保障行车安全的关键技术之一。为了提高自动驾驶车辆以及辅助驾驶系统的性能,需要大量的高质量标注数据来训练这些系统。本数据集旨在为道路驾驶视角下的人车检测提供高质量的标注数据,支持自动化检测系统的开发与应用。

数据集概述:
  • 名称:道路驾驶视角人车检测数据集
  • 规模:共计16,000张图像
  • 类别:七种目标类别,“0”表示摩托车(Motorcycle), “1”表示行人(Pedestrian), “2”表示汽车(Car), “3”表示自行车(Bicycle), “4”表示公交车(Bus), “5”表示交通信号灯(Traffic Light), “6”表示卡车(Truck)
  • 标注格式:支持VOC和YOLO格式的标注文件,可以直接用于模型训练
数据集特点:
  1. 全面性:涵盖道路驾驶视角中常见的多种目标类型,确保数据集的多样性和实用性。
  2. 高质量标注:每张图像都已详细标注,确保数据的准确性和可靠性。
  3. 适用范围广:支持多种标注格式(VOC、YOLO),方便科研人员和开发者直接使用。
  4. 标准格式:采用广泛使用的标注文件格式,方便导入不同的检测框架。
数据集内容:

  • 摩托车(Motorcycle):标注了道路上行驶的摩托车。
  • 行人(Pedestrian):标注了道路上行走的行人。
  • 汽车(Car):标注了道路上行驶的汽车。
  • 自行车(Bicycle):标注了道路上骑行的自行车。
  • 公交车(Bus):标注了道路上行驶的公交车。
  • 交通信号灯(Traffic Light):标注了道路上的交通信号灯。
  • 卡车(Truck):标注了道路上行驶的卡车。
数据集用途:

  1. 目标检测:可用于训练和评估深度学习模型,特别是在道路驾驶视角下的人车检测方面。
  2. 智能驾驶:帮助实现自动驾驶车辆的智能感知,减少交通事故的发生。
  3. 科研与教育:为道路驾驶视角下的人车检测领域的研究和教学提供丰富的数据支持。
使用场景:
  1. 实时监控:在智能交通系统中,利用该数据集训练的模型可以实时检测道路上的目标。
  2. 事故预防:在事故预防和安全预警中,利用该数据集可以提高检测的准确性和速度。
  3. 生产管理:在智能驾驶系统和车辆辅助系统的开发工作中,利用该数据集可以提高系统的可靠性和稳定性。
技术指标:

  • 数据量:共计16,000张图像,覆盖多种目标类型。
  • 数据划分:数据集是否进行了训练集、验证集和测试集的划分,需根据数据集实际内容确定。
  • 标注格式:支持VOC和YOLO格式的标注文件,方便导入不同的检测框架。
  • 标注精度:所有图像均已详细标注,确保数据的准确性和可靠性。
注意事项:
  • 数据隐私:在使用过程中,请确保遵守相关法律法规,保护个人隐私。
  • 数据预处理:在使用前,建议进行一定的数据预处理,如图像归一化等。
获取方式:
  • 下载链接:请访问项目主页获取数据集下载链接。
  • 许可证:请仔细阅读数据集的使用许可协议。
关键代码示例:

以下是关键代码的示例,包括数据加载、模型训练、检测和结果展示。

数据加载(以VOC格式为例):
1import os
2import cv2
3import xml.etree.ElementTree as ET
4import numpy as np
5
6# 数据集路径
7DATASET_PATH = 'path/to/dataset'
8IMAGES_DIR = os.path.join(DATASET_PATH, 'JPEGImages')
9ANNOTATIONS_DIR = os.path.join(DATASET_PATH, 'Annotations')
10
11# 加载数据集
12def load_dataset(directory):
13    images = []
14    annotations = []
15
16    for img_file in os.listdir(IMAGES_DIR):
17        if img_file.endswith('.jpg') or img_file.endswith('.png'):
18            img_path = os.path.join(IMAGES_DIR, img_file)
19            annotation_path = os.path.join(ANNOTATIONS_DIR, img_file.replace('.jpg', '.xml').replace('.png', '.xml'))
20            
21            image = cv2.imread(img_path)
22            tree = ET.parse(annotation_path)
23            root = tree.getroot()
24            
25            objects = []
26            for obj in root.findall('object'):
27                name = obj.find('name').text
28                bbox = obj.find('bndbox')
29                xmin = int(bbox.find('xmin').text)
30                ymin = int(bbox.find('ymin').text)
31                xmax = int(bbox.find('xmax').text)
32                ymax = int(bbox.find('ymax').text)
33                objects.append((name, [xmin, ymin, xmax, ymax]))
34            
35            images.append(image)
36            annotations.append(objects)
37
38    return images, annotations
39
40train_images, train_annotations = load_dataset(os.path.join(DATASET_PATH, 'train'))
41val_images, val_annotations = load_dataset(os.path.join(DATASET_PATH, 'val'))
42test_images, test_annotations = load_dataset(os.path.join(DATASET_PATH, 'test'))
模型训练:
1# 初始化YOLOv8模型
2model = YOLO('yolov8n.pt')
3
4# 转换VOC格式到YOLO格式
5def convert_voc_to_yolo(annotations, image_shape=(640, 640), class_names=['Motorcycle', 'Pedestrian', 'Car', 'Bicycle', 'Bus', 'Traffic Light', 'Truck']):
6    yolo_annotations = []
7    class_map = {name: i for i, name in enumerate(class_names)}
8    
9    for ann in annotations:
10        converted = []
11        for name, obj in ann:
12            class_id = class_map[name]
13            x_center = (obj[0] + obj[2]) / 2 / image_shape[1]
14            y_center = (obj[1] + obj[3]) / 2 / image_shape[0]
15            width = (obj[2] - obj[0]) / image_shape[1]
16            height = (obj[3] - obj[1]) / image_shape[0]
17            converted.append([class_id, x_center, y_center, width, height])
18        yolo_annotations.append(converted)
19    return yolo_annotations
20
21# 定义训练参数
22EPOCHS = 100
23BATCH_SIZE = 16
24
25# 转换并训练模型
26train_yolo_annots = convert_voc_to_yolo(train_annotations)
27val_yolo_annots = convert_voc_to_yolo(val_annotations)
28
29results = model.train(data='road_driving_perspective_detection.yaml', epochs=EPOCHS, batch=BATCH_SIZE)
模型检测:
1# 加载训练好的模型
2model = YOLO('best.pt')
3
4# 检测图像
5def detect_road_objects(image):
6    results = model.predict(image)
7    for result in results:
8        boxes = result.boxes
9        for box in boxes:
10            x1, y1, x2, y2 = box.xyxy[0]
11            conf = box.conf
12            class_id = box.cls
13            
14            # 显示结果
15            cv2.rectangle(image, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
16            class_name = ['Motorcycle', 'Pedestrian', 'Car', 'Bicycle', 'Bus', 'Traffic Light', 'Truck'][class_id]
17            cv2.putText(image, f'{class_name}, Conf: {conf:.2f}', (int(x1), int(y1)-10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
18    
19    return image
20
21# 测试图像
22test_image = cv2.imread('path/to/test_image.jpg')
23result_image = detect_road_objects(test_image)
24cv2.imshow('Detected Road Objects', result_image)
25cv2.waitKey(0)
26cv2.destroyAllWindows()
配置文件 road_driving_perspective_detection.yaml
1train: path/to/train/images
2val: path/to/val/images
3test: path/to/test/images
4
5nc: 7  # Number of classes
6names: ['Motorcycle', 'Pedestrian', 'Car', 'Bicycle', 'Bus', 'Traffic Light', 'Truck']  # Class names
7
8# Training parameters
9batch_size: 16
10epochs: 100
11img_size: [640, 640]  # Image size
使用指南:
  1. 数据准备:确保数据集路径正确,并且数据集已准备好。
  2. 模型训练:运行训练脚本,等待训练完成。
  3. 模型检测:使用训练好的模型进行检测,并查看检测结果。
结语:

本数据集提供了一个高质量的道路驾驶视角人车检测数据集,支持自动化目标检测、智能驾驶等多个应用场景。通过利用该数据集训练的模型,可以提高道路驾驶视角下人车检测的效率和准确性。

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2144024.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

python画图|中秋到了,尝试画个月亮(球体画法)

学习了一段时间的画图,已经掌握了一些3D图的画法,部分链接如下: python画图|极坐标下的3D surface-CSDN博客 python画图|3D参数化图形输出-CSDN博客 我们今天尝试一下月亮的画法。 【1】官网教程 首先还是到达官网教程学习: …

java: 警告: 源发行版 17 需要目标发行版 17(100% 解决)

1. 问题说明 Idea启动Springboot服务报错:java: 警告: 源发行版 17 需要目标发行版 17 2. 解决方案 Project Structure指定jdk版本为我们当前使用的版本; Java Compiler指定jdk为我们当前使用的版本; Invalidate Caches重启Idea。 如果还…

NTC温度电阻--100K 10K

100K温度电阻分度表 粗精度直接用公式计算 细精度用厂家的传感器参数来计算 Y C1 C2* y C3 * y * y*y static float get_ntc_temp(double Rt) { double y log(Rt);//122.6us48M double val; static const double c1 0.0008314; static const double c2 0.00026178;…

Linux下vscode配置C++和python编译调试环境

Visual Studio Code (简称 VSCode) 是由微软开发的一款免费、开源、跨平台的代码编辑器。它支持 Windows、macOS 和 Linux 操作系统,并且内置对多种编程语言的支持,包括但不限于 C/C、Python、JavaScript、TypeScript、Java 和 Go 等。VSCode 主要用于编…

【C语言进阶】动态内存与柔性数组:C语言开发者必须知道的陷阱与技巧

📝个人主页🌹:Eternity._ ⏩收录专栏⏪:C语言 “ 登神长阶 ” 🤡往期回顾🤡:C语言动态内存管理 🌹🌹期待您的关注 🌹🌹 ❀C语言动态内存管理 &…

数据结构-链式二叉树-四种遍历

博客主页:【夜泉_ly】 本文专栏:【数据结构】 欢迎点赞👍收藏⭐关注❤️ 数据结构-链式二叉树-四种遍历 1.前言2.前、中、后序遍历2.1前序遍历2.1中、后序遍历 3.层序遍历3.1递归实现3.2队列实现关于在Pop之后为什么还能用tmp访问节点&#x…

Docker学习笔记(四)单主机网络

简介 Docker从容器中抽象除出了底层的主机连接网络,使得程序不用关心运行时的环境。连接到Docker网络的容器将获得唯一的地址,其他连接到同一Docker网络的容器也可以根据该IP找到目标容器并发送消息。   但是容器内运行的软件没法方便的确定主机IP地址…

第二期: 第二节 , 裸机编程 , gpio

1 首先就是 看原理图: 这里有两个 LED 核心板的原理图。 可以看到 是这个脚。 2 然后就是 查看数据手册。 从 数据手册可以看出 ,一共有这么多的 gpio 组, 但是这些 组 是有复用的&#xf…

非常实用的桌面日历 你桌面上的备忘录和提醒工具

在快节奏的现代生活中,时间管理成为了每个人不可或缺的技能。随着数字化时代的到来,我们虽然拥有了智能手机、平板电脑以及各类时间管理应用,但那份传统而温馨的桌面日历,却依然以其独特的魅力,在无数人的工作台上占据…

油耳拿什么清理比较好?好用的无线可视挖耳勺推荐

油耳的朋友通常都是用棉签来掏耳。这种方式是很不安全的。因为使用棉签戳破耳道和棉絮掉落在耳道中而引起感染的新闻不在少数。在使用过程中更加建议大家可视挖耳勺来清理会更好。不仅清晰度得干净而且安全会更高。但最近这几年我发现可视挖耳勺市面上不合格产品很多&#xff0…

澳元/美元价格:进一步上涨看向美联储

澳元/美元在0.6700关口附近波动不定。美元因美国经济数据强劲而重新获得上行动力。接下来,澳大利亚将公布西太平洋领先指数。 美元的再度走强使风险敏感资产承压,澳元/美元周二维持在0.6700关口上方的小幅区间内。尽管美元反弹,澳元仍成功维…

关于STM32项目面试题02:ADC与DAC篇(输入部分NTC、AV:0-5V、AI:4-20mA和DAC的两个引脚)

博客的风格是:答案一定不能在问题的后面,要自己想、自己背;回答都是最精简、最精简、最精简,可能就几个字,你要自己自信的展开。 面试官01:什么是模数转换/ADC?说说模数转换的流程? …

STM32F407 - 01

嵌入式概述 什么是嵌入式?嵌入式是以应用为中心,以计算机技术为基础 硬件可裁剪 适用于对体积 可靠性 功耗 性能等方面有着严格的专用计算机系统 简单来说 除了处理桌面PC和服务器之外所有的控制类设备都是嵌入式. 通用计算机和专用计算机的区别 两者的区别在于技术的发展和…

Python编码系列—Python组合模式:构建灵活的对象组合

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

质量与数量的博弈!大模型数据建设

质量与数量的博弈!大模型数据建设 前言大模型数据建设 前言 大数据和人工智能(DataAI)技术正以惊人的速度改变着我们的生活和工作方式。大模型数据建设作为人工智能领域的核心组成部分,其重要性日益凸显。 大模型数据建设涉及到海…

硬件工程师笔试面试——电机

目录 18、电机 18.1 基础 电机原理图 电机实物图 18.1.1 概念 18.1.2 电机的一些基本分类和特点 18.2 相关问题 18.2.1 不同类型的电机在实际应用中有哪些具体的优势和劣势 18.2.2 在设计一个电机系统时,我应该如何考虑电机的选型和配置? 18.2.3 对于需要频繁启停的…

【C++篇】C++类与对象深度解析(三):类的默认成员函数详解

文章目录 【C篇】C类与对象深度解析(三)前言4. 运算符重载基本概念4.1 运算符重载的基本概念4.2 重载运算符的规则4.3 成员函数重载运算符4.4 运算符重载的优先级与结合性4.5 运算符重载中的限制与特殊情况4.5.1 不能创建新的操作符4.5.2 无法重载的运算…

TypeScript入门 (一)数据类型与运算符

引言 大家好,我是GISer Liu😁,一名热爱AI技术的GIS开发者。本系列文章是我跟随DataWhale 2024年9月学习赛的TypeScript学习总结文档。希望通过我的知识点总结,能够帮助你更好地学习TypeScript。💕💕&#x…

【漏洞复现】科荣AIO UtilServlet 代码执行漏洞

免责声明: 本文内容旨在提供有关特定漏洞或安全漏洞的信息,以帮助用户更好地了解可能存在的风险。公布此类信息的目的在于促进网络安全意识和技术进步,并非出于任何恶意目的。阅读者应该明白,在利用本文提到的漏洞信息或进行相关测…

学习实践: Procdump获取本地远控信息

看到一篇文章是通过Procdump获取ToDesk远控信息的,于是实操了一下;顺便也测试了一下向日葵远控,发现都是适用的。该方法对于肉鸡提权有一定价值。 1、获取ToDesk远控信息 测试版本:ToDesk v4.7.4.3 测试工具:procdump、…