极端天气道路目标检测数据集 3400张 带标注 VOC YOLO
分类名: (图片张数, 标注个数)
car :(3210,1 3654)truck: (1168, 1629)person: (1517, 4359)bicycle:(334,589)bus: (381, 439)motorcycle: (164, 214)总数: (3404, 20884)总类(nc): 6类
如何使用 YOLOv8 训练您的极端天气道路目标检测数据集。
面向自动驾驶、恶劣天气路况感知、交通目标检测方向课题研发,这套极端天气道路数据集极具科研价值。数据集总计3404张雨雪雾等恶劣场景道路实拍图像,共6大类道路通行目标,总标注数量20884个;同时提供VOC(xml)、YOLO(txt)两种标注格式,适配一阶段、两阶段各类检测算法。配套完整环境部署教程、YOLOv8训练脚本、训练指标可视化代码、PyQt5图像检测GUI程序,可快速搭建一套极端天气道路目标检测完整系统,适合毕业设计、自动驾驶感知算法开发。
| 数据类别(6类) | |
| 样本统计 | |
| 标注格式 | |
| 场景特点 | |
| 配套资源 |
# 创建虚拟环境(Windows)python -m venv yolov8_envyolov8_env\Scripts\activate# Linux/Macpython -m venv yolov8_envsource yolov8_env/bin/activate# 安装依赖pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117pip install ultralyticspip install pyqt5 matplotlib scikit-learn pandas opencv-python seaborn numpyextreme_weather_dataset/├── images/│ ├── train/│ └── val/├── labels/│ ├── train/│ └── val/└── classes.txtclasses.txt
cartruckpersonbicyclebusmotorcycleYOLO标签格式:class_id x_center y_center width height
from ultralytics import YOLOimport osdataset_path =r'extreme_weather_dataset'weights_path ='best.pt'# 自动生成yaml配置yaml_content =f"""train: {os.path.join(dataset_path,'images/train')}val: {os.path.join(dataset_path,'images/val')}nc: 6names: ['car', 'truck', 'person', 'bicycle', 'bus', 'motorcycle']"""yaml_path = os.path.join(dataset_path,'dataset.yaml')withopen(yaml_path,'w', encoding="utf-8")as f: f.write(yaml_content)# 加载预训练模型开始训练model = YOLO('yolov8n.pt')results = model.train( data=yaml_path, epochs=100, imgsz=640, batch=16, device="cuda", save=True)# 导出最优权重model.export(format='pt')if os.path.exists("runs/detect/train/weights/best.pt"): os.rename('runs/detect/train/weights/best.pt', weights_path)import jsonimport matplotlib.pyplot as pltimport seaborn as snsimport numpy as npfrom sklearn.metrics import confusion_matrix, ConfusionMatrixDisplaymetrics_path ='runs/detect/train/metrics.json'withopen(metrics_path,'r', encoding="utf-8")as f: metrics = json.load(f)loss =[entry['loss']for entry in metrics if'loss'in entry]precision =[entry['metrics/precision(B)']for entry in metrics if'metrics/precision(B)'in entry]recall =[entry['metrics/recall(B)']for entry in metrics if'metrics/recall(B)'in entry]map50 =[entry['metrics/mAP50(B)']for entry in metrics if'metrics/mAP50(B)'in entry]plt.figure(figsize=(15,5))plt.subplot(1,3,1)plt.plot(loss, label='Loss')plt.xlabel('Epochs')plt.ylabel('Loss')plt.title('Training Loss Curve')plt.legend()plt.subplot(1,3,2)plt.plot(precision, label='Precision')plt.plot(recall, label='Recall')plt.xlabel('Epochs')plt.ylabel('Score')plt.title('Precision & Recall Curve')plt.legend()plt.subplot(1,3,3)plt.plot(map50, label='mAP50')plt.xlabel('Epochs')plt.ylabel('mAP50')plt.title('mAP50 Curve')plt.legend()plt.tight_layout()plt.show()# 混淆矩阵(可接入真实预测结果替换测试数据)labels =['car','truck','person','bicycle','bus','motorcycle']true_labels = np.random.randint(0,6, size=100)predictions = np.random.randint(0,6, size=100)cm = confusion_matrix(true_labels, predictions, labels=list(range(6)))disp = ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=labels)disp.plot(cmap=plt.cm.Blues)plt.title('Confusion Matrix')plt.show()import sysimport cv2import numpy as npfrom PyQt5.QtWidgets import QApplication, QMainWindow, QLabel, QPushButton, QVBoxLayout, QWidget, QFileDialog, QMessageBoxfrom PyQt5.QtGui import QImage, QPixmapfrom PyQt5.QtCore import Qtfrom ultralytics import YOLOclassMainWindow(QMainWindow):def__init__(self):super().__init__() self.setWindowTitle("极端天气道路目标检测系统") self.setGeometry(100,100,800,600) self.image_label = QLabel() self.image_label.setAlignment(Qt.AlignCenter) self.open_btn = QPushButton("打开图片") self.predict_btn = QPushButton("开始检测") self.open_btn.clicked.connect(self.open_image) self.predict_btn.clicked.connect(self.predict_img) layout = QVBoxLayout() layout.addWidget(self.image_label) layout.addWidget(self.open_btn) layout.addWidget(self.predict_btn) container = QWidget() container.setLayout(layout) self.setCentralWidget(container) self.model = YOLO("best.pt") self.image_path =Nonedefopen_image(self):file, _ = QFileDialog.getOpenFileName(self,"选择图片","","Images(*.jpg *.png *.jpeg)")iffile: self.image_path =file pix = QPixmap(file) self.image_label.setPixmap(pix.scaled(800,600, Qt.KeepAspectRatio))defpredict_img(self):ifnot self.image_path: QMessageBox.warning(self,"提示","请先加载图像!")return img = cv2.imread(self.image_path) results = self.model(img)[0]for box in results.boxes: x1,y1,x2,y2 =map(int,box.xyxy[0]) conf =float(box.conf[0]) cls_id =int(box.cls[0]) name = self.model.names[cls_id] cv2.rectangle(img,(x1,y1),(x2,y2),(0,255,0),2) cv2.putText(img,f"{name}{conf:.2f}",(x1,y1-6),cv2.FONT_HERSHEY_SIMPLEX,0.6,(0,255,0),2) rgb = cv2.cvtColor(img,cv2.COLOR_BGR2RGB) h,w,c = rgb.shape qimg = QImage(rgb.data,w,h,c*w,QImage.Format_RGB888) self.image_label.setPixmap(QPixmap.fromImage(qimg).scaled(800,600,Qt.KeepAspectRatio))if __name__ =="__main__": app = QApplication(sys.argv) win = MainWindow() win.show() sys.exit(app.exec_())YOLOv8为单阶段实时目标检测框架,融合Anchor-Based与Anchor-Free思路,解耦检测头;依托C2f模块增强特征融合,使用Task-Aligned Assigner正负样本匹配策略,优化CIoU损失。整体流程:图像输入→骨干网络特征提取→颈部多尺度特征融合→检测头输出坐标、置信度、类别→NMS滤除重复框,输出检测结果。优势:兼顾推理速度与精度,非常适合部署在车载嵌入式设备,是恶劣路况感知主流基线模型。
#极端天气道路数据集 #自动驾驶感知数据集 #雨雾雪目标检测 #YOLO数据集 #VOCYOLO双标注 #道路交通目标检测 #恶劣路况识别 #YOLOv8完整工程 #PyQt5检测界面 #深度学习科研数据集
。