首页 > 其他分享 >基于深度学习的夜间车辆检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

基于深度学习的夜间车辆检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

时间:2024-04-05 16:56:28浏览次数:31  
标签:夜间 车辆 训练 检测 模型 YOLOv8 v6 v7

摘要:本文深入研究了基于YOLOv8/v7/v6/v5的夜间车辆检测系统,核心采用YOLOv8并整合了YOLOv7YOLOv6YOLOv5算法,进行性能指标对比;详述了国内外研究现状数据集处理算法原理模型构建与训练代码,及基于Streamlit的交互式Web应用界面设计。在Web网页中可以支持图像、视频和实时摄像头进行夜间车辆检测,可上传不同训练模型(YOLOv8/v7/v6/v5)进行推理预测,界面可方便修改。本文附带了完整的网页设计、深度学习模型代码和训练数据集的下载链接。


目录

➷点击跳转至文末所有涉及的完整代码文件下载页☇


完整资源中包含数据集及训练代码,环境配置与界面中文字、图片、logo等的修改方法请见视频,项目完整文件下载请见演示与介绍视频的简介处给出:➷➷➷
演示与介绍视频https://www.bilibili.com/video/BV1sC411L7Rd/
YOLOv8/v7/v6/v5项目合集下载https://mbd.pub/o/bread/mbd-ZZ2YmJpy
YOLOv8和v5项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Ykpdr
YOLOv7项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Yl5hy
YOLOv6项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Yl51x

        若您想获得博文中涉及的实现完整全部资源文件(包括测试图片、视频,py, UI文件,训练数据集、训练代码、界面代码等),这里已打包上传至博主的面包多平台,见可参考博客与视频,已将所有涉及的文件同时打包到里面,点击即可运行,完整文件截图如下:


1. 网页功能与效果

        (1)开启摄像头实时检测:本系统允许用户通过网页直接开启摄像头,实现对实时视频流中夜间车辆的检测。系统将自动识别并分析画面中的夜间车辆,并将检测结果实时显示在用户界面上,为用户提供即时的反馈。

        (2)选择图片检测:用户可以上传本地的图片文件到系统中进行夜间车辆检测。系统会分析上传的图片,识别出图片中的夜间车辆,并在界面上展示带有夜间车辆标签和置信度的检测结果,让用户能够清晰地了解到每个夜间车辆状态。

        (3)选择视频文件检测:系统支持用户上传视频文件进行夜间车辆检测。上传的视频将被系统逐帧分析,以识别和标记视频中每一帧的夜间车辆。用户可以观看带有夜间车辆检测标记的视频,了解视频中夜间车辆的变化。

        (4)选择不同训练好的模型文件:系统集成了多个版本的YOLO模型(如YOLOv8/v7/v6/v5),用户可以根据自己的需求选择不同的模型进行夜间车辆检测。这一功能使得用户能够灵活地比较不同模型的表现,以选择最适合当前任务的模型。

        本系统还集成了一系列高级功能,以提高用户的使用体验和检测效率。用户可以在检测画面中同时或单独显示**检测画面和原始画面**,便于直观比较检测结果与实际情况。通过可点击的下拉框,用户能够**单独标记特定目标并显示结果**,这一点对于关注特定类型目标的用户来说极其有用。所有的检测结果都会在页面的表格中显示,用户还可以根据需要动态调整检测算法的**置信度阈值和IOU阈值**,以优化检测结果的精度和召回率。

        为了方便用户进一步分析和记录检测结果,本系统支持点击按钮将检测的表格结果输出到csv文件。此外,所有标记的图片、视频、摄像头画面结果都可以导出为avi图像文件,方便用户保存和分享检测结果。这些高级功能的设计,旨在为用户提供一个全面、灵活、易用的夜间车辆检测工具,满足不同用户在不同应用场景下的需求。


2. 绪论

2.1 研究背景及意义

        在当前的交通系统中,夜间车辆检测技术的重要性日益凸显,它在提高夜间行车安全、减少交通事故中起着至关重要的作用。随着自动驾驶技术的迅速发展,对于高精度和高可靠性的车辆检测算法的需求也随之增加。夜间车辆检测面临着独特的挑战,如光照条件不佳、车辆灯光的干扰等,这些因素大大增加了检测难度,传统的基于图像处理技术的方法已经无法满足现在的需求。近年来,基于深度学习的目标检测算法,尤其是YOLO(You Only Look Once)系列算法的出现和发展,为夜间车辆检测提供了新的解决方案。YOLO算法因其高速度和高精度的特性,成为了目标检测领域的研究热点。

        然而,尽管YOLO系列算法在目标检测方面取得了显著进展,夜间车辆检测仍然是一个具有挑战性的问题。当前研究主要集中在提高检测算法的鲁棒性,以及在低光照条件下的表现。最新的研究显示,通过算法改进、引入新的数据增强技术、使用更大更复杂的数据集,以及采用更为先进的神经网络结构,可以显著提高夜间车辆检测的准确率和实时性。这些研究成果不仅为夜间车辆检测技术的发展提供了新的方向,也为自动驾驶系统的安全性和可靠性提供了强有力的支持。

        此外,随着计算技术的不断进步和数据处理能力的提升,采用深度学习方法进行夜间车辆检测成为可能。深度学习方法,特别是卷积神经网络(CNN)在图像识别和视频分析领域已经显示出了其强大的性能。通过对大量夜间行车数据的训练,深度学习模型能够学习到复杂的特征表示,从而在各种光照条件下都能实现准确的车辆检测。

        基于上述背景,本博客将深入探讨基于YOLOv8/v7/v6/v5的夜间车辆检测系统的设计与实现,分析其在实际应用中的表现和价值,以期为夜间车辆检测和研究提供技术支持和新思路。

2.2 国内外研究现状

        在目前的研究背景下,夜间车辆检测领域正处于快速发展之中,众多学者和研究机构投入大量资源进行探索。近年来,夜间车辆检测技术经历了显著的发展,尤其是在深度学习领域。随着计算能力的提升和数据采集技术的进步,基于深度学习的算法已成为提高夜间车辆检测准确性和效率的关键。以下是一些最新研究成果的概述,它们展示了该领域的最新进展和未来方向。首先,YOLO系列的发展持续引领目标检测技术的创新。自从YOLOv5[1]之后,后续版本如YOLOv6[2]、v7[3]、和最新的YOLOv8[4],不断地在检测速度和准确性之间找到更好的平衡。这些版本通过引入更先进的神经网络架构、改进的损失函数和更高效的训练方法,显著提高了在复杂环境下,特别是在低光照条件下的检测性能。

除了YOLO系列,其他深度学习算法也在夜间车辆检测方面取得了突破。例如,通过利用生成对抗网络(GANs)来增强夜间图像的质量,进而提高检测算法的准确性[5]。此外,注意力机制被引入到卷积神经网络中,以更好地聚焦于图像中的车辆,从而在高度嘈杂的夜间场景中实现更准确的检测。

        面向特定场景的算法改进也是近年研究的焦点。例如,针对雨夜或雾夜等特殊天气条件下的车辆检测,研究人员开发了专门的模型和技术,以克服恶劣天气条件对检测性能的影响。这些研究通过深入分析特定条件下的视觉特征,开发出能够适应这些复杂环境的算法。

        尽管这些进展令人鼓舞,但夜间车辆检测仍面临许多挑战。例如,如何在极低光照条件下有效地检测车辆,以及如何进一步提高检测速度以满足实时应用的需求。未来的研究需要继续探索新的算法结构、优化现有模型,并利用更大更全面的数据集进行训练,以解决这些挑战。

        综上所述,目标检测领域的快速发展为夜间车辆检测提供了多种有效的技术方案。这些算法的创新点不仅在于它们各自的模型架构和训练策略,而且还在于如何将这些技术应用到实际的夜间车辆检测任务中,以解决低光照、高动态范围和复杂场景下的检测问题。随着更多的研究工作和技术进步,未来夜间车辆检测的准确性和效率有望得到进一步提升。

2.3 要解决的问题及其方案

2.3.1 要解决的问题

        在本系统中,我们面临的核心问题与提出的解决方案紧密围绕着基于YOLOv8/v7/v6/v5的深度学习模型进行夜间车辆检测,以及如何将这些技术集成到一个用户友好的网页应用中。以下是具体的问题和相应的解决方案:

  1. 夜间车辆检测的准确性和速度
    夜间车辆检测系统面临的首要挑战是如何在保证高准确度的同时实现实时处理。考虑到夜间车辆的多样性以及佩戴方式的差异,系统需要能够准确识别各种情况下的夜间车辆状态。此外,面对实时视频流处理的需求,模型的处理速度同样重要。

  2. 环境适应性和模型泛化能力
    夜间车辆检测系统需要在多种环境条件下都能保持高准确率,包括不同光照条件、背景复杂度以及人脸的部分遮挡等。因此,提高模型的泛化能力是系统设计中的一个关键考虑因素。

  3. 用户交互界面的直观性和功能性
    系统的易用性对于用户来说至关重要。一个直观、功能丰富的网页应用可以极大提升用户体验。特别是在切换不同模型文件、处理不同类型的媒体输入(图片、视频、摄像头)等方面,用户界面需要设计得既简单又功能强大。

  4. 多模型管理与性能对比
    提供多个基于不同版本的YOLO模型(v8/v7/v6/v5)进行推理预测,需要一种有效的方式来管理这些模型,并且能够让用户轻松比较不同模型的性能。

2.3.2 解决方案

  1. 采用PyTorch技术框架训练深度学习模型
    使用PyTorch进行模型的开发和训练,凭借其灵活性和强大的GPU加速功能,确保模型训练的效率和效果。

  2. 基于Streamlit的网页设计
    采用Streamlit框架开发用户界面,该框架简化了数据科学应用的开发流程,使得构建交互式Web应用变得更加直接和高效。

  3. 深度学习检测算法的网页集成
    将深度学习的检测算法与Streamlit网页应用无缝集成,允许用户轻松切换不同的模型文件进行性能比较,确保了系统的灵活性和实用性。

  4. 开发工具IDE使用PyCharm
    利用PyCharm强大的开发环境支持,提高开发效率,同时确保代码质量,便于后续的维护和扩展。

        通过采取上述方法,我们旨在开发出一个高效、准确且用户友好的夜间车辆检测系统,它能够在多种场景下准确检测夜间车辆情况,同时提供易于使用的Web应用界面,满足不同用户的需求。

2.4 博文贡献与组织结构

        本文详细介绍了一个先进的夜间车辆检测系统,旨在通过深度学习技术解决在低光照条件下对车辆进行准确检测的挑战。系统基于最新的YOLOv8/v7/v6/v5系列算法,通过对比分析不同版本的性能,为夜间车辆检测任务提供了最优解决方案。本文的主要贡献如下:

  1. 综合性文献综述:全面回顾了目标检测领域特别是夜间车辆检测相关的最新研究进展,包括算法发展、挑战及解决策略,为本研究提供了坚实的理论基础。

  2. 数据集的深度处理:详细介绍了数据集的选择、预处理和增强方法,展示了如何通过数据增强技术提高模型在夜间条件下的泛化能力和鲁棒性。

  3. 算法选择与优化:深入探讨了YOLOv8/v7/v6/v5等深度学习模型的选择理由、优化策略及其在夜间车辆检测中的应用效果,为读者提供了详细的算法比较和选择指导。

  4. 交互式Web界面设计:采用Streamlit框架设计并实现了一个美观且用户友好的网页界面,支持图片、视频和实时摄像头的车辆检测,以及动态切换不同的模型文件,展示了深度学习模型与前端交互的实现方式。

  5. 性能评估与对比:通过大量实验验证了不同YOLO模型版本在夜间车辆检测任务上的性能,提供了详尽的性能对比分析,帮助读者理解不同模型在实际应用中的效果差异。

  6. 资源共享:分享了完整的数据集处理、模型训练与推理预测代码,以及基于Streamlit的Web应用设计代码,为研究者和开发者提供了一套完备的资源包,便于复现和进一步研究。

        后续章节的组织结构如下: 绪论:介绍研究背景、目的和本文的主要贡献;算法原理:详细介绍YOLOv8/v7/v6/v5等算法的工作原理及其在夜间车辆检测中的应用;数据集处理:讨论使用的数据集及其预处理、增强方法。代码介绍:提供模型训练和预测的详细代码说明,包括环境搭建、参数配置和执行步骤。实验结果与分析:展示各版本YOLO算法在夜间车辆检测任务上的实验结果,包括准确率、速度等指标的对比分析。系统设计与实现:介绍基于Streamlit的夜间车辆检测系统的设计与实现细节。结论与未来工作:总结本文的研究成果,并讨论未来的研究方向和潜在的改进空间。


3. 数据集处理

        在夜间车辆检测系统的研究与开发中,选择和处理数据集是确保模型准确性和鲁棒性的关键步骤。本研究项目中使用的数据集共计9867张图像,这些图像被划分为训练集、验证集和测试集,分别包含7410张、1457张和1000张,涵盖了多样化的夜间交通场景。这种丰富的数据量为模型的训练提供了必要的多样性,以学习不同环境下车辆的各种特征。博主使用的类别如下:

Chinese_name = {"bicycle": "自行车", "car": "汽车", "dog": "狗", "person": "人"}

        数据集中的图像涵盖了多个目标类别,主要包括车辆,人,自行车和狗。在类别分布上,‘car’类别的实例数量远超过其他类别,这种不平衡的分布反映了实际道路交通场景中的常见情况。然而,为了避免模型在训练过程中过度适应数量较多的类别而忽视了较少的类别,我们可能需要采取特定的数据平衡技术,如过采样少数类或调整损失函数中的类别权重。

        在预处理阶段,所有图像均经过尺度归一化和色彩空间转换,以保证输入模型的数据一致性。此外,为了增强模型对复杂夜间环境的适应能力,数据集还经过了一系列的增强处理,包括随机裁剪、旋转、颜色抖动和模糊等,这些技术有效模拟了在不同夜间行车条件下可能遇到的各种情况。

        从标注框的大小和形状分布来看,大部分车辆的检测框在图像中呈现中等比例的矩形,且标注框的中心点主要集中在图像中央区域。这些特点对于训练检测模型来说十分有利,因为它意味着标准的矩形锚框可以被有效使用,而不需要过分自定义或修改。此外,由于检测框的位置在整个图像中相对均匀分布,这为模型提供了学习在各个位置检测车辆的能力,增强了模型在实际应用中的泛化性能。

        在标注质量上,我们进行了严格的人工审核,确保每个标注框都准确地反映了对应目标的位置和尺寸,为训练高质量的模型打下了坚实的基础。此外,通过细致的数据标注,模型能够学习到各种大小和形状的车辆特征,从而在实际应用中实现精准的夜间车辆检测。
        综上所述,我们的数据集通过精心的准备、预处理和增强,为夜间车辆检测模型的开发提供了强有力的支持。在接下来的章节中,我们将深入探讨如何利用这些数据来训练YOLOv8/v7/v6/v5等模型,并评估它们在夜间条件下的检测性能,以及如何通过Web应用为用户提供交云检测服务。

4. 原理与代码介绍

4.1 YOLOv8算法原理

        YOLOv8是目标检测领域的一个新进展,它构建在之前版本的YOLO(You Only Look Once)上,是一种快速且准确的一阶段目标检测算法。YOLOv8继承了UltraLytics公司在2023年发布的YOLOv5的结构,并在此基础上进行了优化和改进。

        在YOLOv8的架构中,引入了CSP(Cross Stage Partial)Bottleneck结构,以提高模型的特征提取能力和计算效率。CSP Bottleneck通过将特征分成两部分,一部分直接传递而不经过卷积操作,另一部分则经过卷积,然后再将两部分的特征进行融合。这样可以减少计算量,同时保留更丰富的特征信息,提升了模型的性能。

        YOLOv8的预测流程遵循YOLO系列的传统方式。首先,模型预测出一系列边界框,并为每个框分配一个置信度得分,表示模型对框内包含目标的信心。然后,YOLOv8使用不同的损失函数来优化模型的预测结果。其中,$B_p$是预测边界框,$B_{gt}$是真实边界框。

        YOLOv8还采用了reg_max(Regression maximum)技术,该技术通过预测边界框的一个概率分布来优化位置预测,而不是直接预测边界框的坐标。这种方法的优势在于能够为模型提供更多的位置信息,从而使位置预测更加准确。最后,YOLOv8的训练过程中还包含了一系列的数据增强技术,如自动调整图像大小、随机裁剪等,以提高模型在各种尺度和背景下目标检测的泛化能力。

4.2 模型构建

        在我们的夜间车辆检测系统中,我们从几个重要的库中导入了必要的模块。cv2是OpenCV库的一部分,负责处理图像和视频数据。torch是PyTorch的核心,一个强大的深度学习库。Detector和HeatmapGenerator用于模型的构建和输出的可视化。Chinese_name提供了从类别到中文名称的映射。YOLO类和select_device函数来自ultralytics,用于加载YOLO模型并选择合适的计算设备。

import cv2
import torch
from QtFusion.models import Detector
from datasets.label_name import Chinese_name
from ultralytics import YOLO
from ultralytics.utils.torch_utils import select_device

        这里设定了模型运行的初始化参数。如果GPU可用,我们将使用GPU来加速模型的运行;否则,我们会回退到CPU。conf设定了置信度阈值,用来判断一个检测是否有效。iou是非极大值抑制中的一个重要参数,用来处理重叠的检测框。

device = "cuda:0" if torch.cuda.is_available() else "cpu"
ini_params = {
    'device': device,
    'conf': 0.25,
    'iou': 0.5,
    'classes': None,
    'verbose': False
}

        count_classes函数接收检测结果和类别名称,返回一个计数列表,表示每个类别的检测数量。它接受检测信息和类别名称列表作为输入,并返回一个与类别名称列表相对应的计数列表。这个功能对于分析模型在不同类别上的表现非常有用。

def count_classes(det_info, class_names):
    count_dict = {name: 0 for name in class_names}
    for info in det_info:
        class_name = info['class_name']
        if class_name in count_dict:
            count_dict[class_name] += 1
    count_list = [count_dict[name] for name in class_names]
    return count_list

        YOLOv8v5Detector类封装了模型的行为,包括模型加载、图像预处理、预测和后处理。模型加载功能选择适当的设备并加载预训练的YOLO模型,以确保可以立即进行目标检测。预处理功能在当前实现中直接返回传入的图像,但为未来可能的图像转换留出了空间。预测功能是模型的核心,它接受输入图像并使用YOLO模型产生检测结果。这个过程将图像中潜在的每个目标封装为一系列预测结果,其中包括类别、边界框和置信度分数。后处理函数进一步解析YOLO模型的原始输出,将其转换成一种更加结构化和可读性强的格式。这个步骤至关重要,因为它使最终用户能够轻松理解和使用模型的预测结果。

class YOLOv8v5Detector(Detector):
    def __init__(self, params=None):
        super().__init__(params)
        self.model = None
        self.img = None
        self.names = list(Chinese_name.values())
        self.params = params if params else ini_params
	def load_model(self, model_path):
	    self.device = select_device(self.params['device'])
	    self.model = YOLO(model_path)
	    names_dict = self.model.names
	    self.names = [Chinese_name[v] if v in Chinese_name else v for v in names_dict.values()]
	    self.model(torch.zeros(1, 3, *[self.imgsz] * 2).to(self.device).type_as(next(self.model.model.parameters())))
	def preprocess(self, img):
	    self.img = img
	    return img
	
	def predict(self, img):
	    results = self.model(img, **ini_params)
	    return results
	
	def postprocess(self, pred):
	    results = []
	    for res in pred[0].boxes:
	        for box in res:
	            class_id = int(box.cls.cpu())
	            bbox = box.xyxy.cpu().squeeze().tolist()
	            bbox = [int(coord) for coord in bbox]
	            result = {
	                "class_name": self.names[class_id],
	                "bbox": bbox,
	                "score": box.conf.cpu().squeeze().item(),
	                "class_id": class_id,
	            }
	            results.append(result)
	    return results
	    
    def set_param(self, params):
        self.params.update(params)

        最后,提供了一个设置参数的方法,允许用户在运行时根据需求调整模型的置信度和IOU阈值。这意味着用户可以动态调整模型的行为,以获得更好的检测效果,例如,在精确度更重要的情况下提高置信度阈值,或者在召回率更重要时降低它。

        通过这些方法,我们可以实现从加载模型到获取检测结果的完整流程。最终,这些代码片段的整合不仅提高了检测效率,而且通过优化后的参数设置和预处理策略,进一步提升了检测的准确率。这些都是夜间车辆检测系统的技术核心。

4.3 训练代码

        在本篇博客中,我们将探讨如何使用YOLOv8模型来训练一个夜间车辆检测系统。这一过程不仅涉及到深度学习模型的加载和初始化,还包括数据集的准备以及训练参数的配置。以下表格详细介绍了YOLOv8模型训练中使用的一些重要超参数及其设置:

超参数 设置 说明
学习率(lr0 0.01 决定了模型权重调整的步长大小,在训练初期有助于快速收敛。
学习率衰减(lrf 0.01 控制训练过程中学习率的降低速度,有助于模型在训练后期细致调整。
动量(momentum 0.937 加速模型在正确方向上的学习,并减少震荡,加快收敛速度。
权重衰减(weight_decay 0.0005 防止过拟合,通过在损失函数中添加正则项减少模型复杂度。
热身训练周期(warmup_epochs 3.0 初始几个周期内以较低的学习率开始训练,逐渐增加到预定学习率。
批量大小(batch 16 每次迭代训练中输入模型的样本数,影响GPU内存使用和模型性能。
输入图像大小(imgsz 640 模型接受的输入图像的尺寸,影响模型的识别能力和计算负担。

        环境设置与模型加载:首先需要导入必要的库,以便在训练过程中使用它们的功能。

import os
import torch
import yaml
from ultralytics import YOLO  # 用于加载YOLO模型
from QtFusion.path import abs_path  # 用于获取文件的绝对路径

        这些库提供了文件路径操作、深度学习功能和模型加载的能力。特别是ultralytics库中的YOLO类,这是我们训练YOLO模型的核心工具。

        接下来,我们根据当前系统是否支持CUDA(即NVIDIA GPU加速)来设置设备变量。这一步对于加速训练过程至关重要。

device = "0" if torch.cuda.is_available() else "cpu"

        数据集准备:我们首先设置了工作线程和批量大小,这些参数会影响数据加载的速度和内存使用。这里,workers指定了用于数据加载的工作线程数量,batch则设置了每个批次的图像数量。

workers = 1  # 工作进程数
batch = 8  # 每批处理的图像数量

        为了正确地加载和处理训练数据,我们需要指定数据集配置文件的路径:

data_name = "NightVehicle"
data_path = abs_path(f'datasets/{data_name}/{data_name}.yaml', path_type='current')  # 数据集的yaml的绝对路径
unix_style_path = data_path.replace(os.sep, '/')

        这段代码构建了数据集配置文件的路径,并使用abs_path函数转换为绝对路径,以避免路径相关的错误。
        紧接着,我们对数据集配置文件进行了一系列的读取和修改操作,以确保它指向正确的数据目录:

directory_path = os.path.dirname(unix_style_path)
with open(data_path, 'r') as file:
    data = yaml.load(file, Loader=yaml.FullLoader)

if 'path' in data:
    data['path'] = directory_path
    with open(data_path, 'w') as file:
        yaml.safe_dump(data, file, sort_keys=False)

        训练模型:在数据集配置就绪后,我们加载了预训练的YOLO模型,并设置了任务类型为detect,准备开始训练。在这里,我们传递了所有必要的参数,包括图像大小imgsz,训练轮数epochs和训练任务的名称。此训练任务将执行120个时期的训练,这是一个在实践中通常需要根据实际情况调整的参数。

model = YOLO(abs_path('./weights/yolov5nu.pt', path_type='current'), task='detect')  # 加载预训练的YOLOv8模型
# model = YOLO('./weights/yolov5.yaml', task='detect').load('./weights/yolov5nu.pt')  # 加载预训练的YOLOv8模型
# Training.
results = model.train(  # 开始训练模型
    data=data_path,  # 指定训练数据的配置文件路径
    device=device,  # 自动选择进行训练
    workers=workers,  # 指定使用2个工作进程加载数据
    imgsz=640,  # 指定输入图像的大小为640x640
    epochs=120,  # 指定训练100个epoch
    batch=batch,  # 指定每个批次的大小为8
    name='train_v5_' + data_name  # 指定训练任务的名称
)
model = YOLO(abs_path('./weights/yolov8n.pt'), task='detect')  # 加载预训练的YOLOv8模型
results2 = model.train(  # 开始训练模型
    data=data_path,  # 指定训练数据的配置文件路径
    device=device,  # 自动选择进行训练
    workers=workers,  # 指定使用2个工作进程加载数据
    imgsz=640,  # 指定输入图像的大小为640x640
    epochs=120,  # 指定训练100个epoch
    batch=batch,  # 指定每个批次的大小为8
    name='train_v8_' + data_name  # 指定训练任务的名称
)

        通过上述过程,我们成功地配置并启动了夜间车辆检测模型的训练任务。YOLOv8作为一个强大的目标检测框架,为我们的训练任务提供了良好的支持,使得训练过程既高效又方便。在训练完成后,我们将得到一个针对夜间车辆检测任务优化过的模型,它将能够准确识别和分析图像中的夜间车辆,为后续的应用提供强大的技术支撑。


5. 实验结果与分析

5.1 训练曲线

        采用以上代码进行训练,得到的训练过程曲线如下,展示了模型在学习数据集时的行为,并且揭示了模型优化过程中的关键趋势。

        首先,观察训练集上的损失函数,我们看到箱体损失(box_loss)、类别损失(cls_loss)和目标损失(obj_loss)随着迭代次数的增加而稳步下降,显示出了模型在学习过程中的收敛趋势。具体来看,box_loss从初始的较高值迅速下降,说明模型很快学习到了物体的准确位置。cls_loss和obj_loss的下降同样表明模型对于类别的识别和目标的检测都在持续改进。

        在验证集上,我们观察到相似的下降趋势,这是模型泛化能力提升的直接证据。验证集的损失函数值在初始几个迭代之后较为平稳,表明模型未出现过拟合的现象,并保持了对未见数据的推广能力。此外,验证集的损失函数值整体略高于训练集,这是模型在看不见的数据上预测时的常见现象。

        接下来,我们分析模型的精确度(precision)和召回率(recall)。精确度反映了模型预测正确标签的能力,而召回率衡量了模型找到所有正样本的能力。训练过程中,精确度的波动较大,这可能是由于模型在尝试不同的参数配置以适应训练数据。召回率则随迭代次数的增加而逐步提高,最终趋于稳定,显示出模型在识别所有正样本方面的改进。

        最后,我们考察平均精确度(mAP)的两个指标:[email protected][email protected]:0.95。这两个指标分别衡量了模型在IOU(交并比)为0.5和0.5到0.95这个范围内的平均表现。在[email protected]中,我们看到模型性能较为稳定,在较高的水平上波动。而在更为严格的[email protected]:0.95指标上,模型性能随着训练逐渐提高,但增长速度放缓,这表明模型对于更精确的检测还有提升空间。

        综合来看,YOLOv8模型在夜间车辆检测任务上展示了良好的训练和泛化能力。损失函数的稳定下降,以及mAP指标的逐步提升,都指向了模型的有效性。未来的工作可以在提升模型在严格评估标准下的表现,以及进一步平衡精确度和召回率之间的关系,尤其是在不平衡的数据分布情况下。此外,进一步调优训练策略,例如动态调整学习率或使用更高级的优化算法,也有可能提高模型的性能和稳定性。通过这些细致的分析和后续的优化措施,我们能够确保模型在实际应用中达到最优性能。

5.2 混淆矩阵

        混淆矩阵是一种特别在分类问题中广泛使用的工具,它展示了模型预测与实际标签之间的关系。在我们的夜间车辆检测模型中,混淆矩阵揭示了模型在不同夜间车辆类别上的识别准确性。根据提供的混淆矩阵,我们可以对模型在夜间车辆检测任务上的性能进行深入分析。

        观察上图的混淆矩阵,我们可以看到各类别的预测正确率(主对角线上的值)以及误分类情况(非对角线上的值)。以‘car’类别为例,模型正确识别‘car’为‘car’的概率为60%,而将‘car’误判为‘background’的概率为40%,显示出在识别车辆和区分背景方面的优劣。类似地,‘person’类别的识别准确率为45%,表明模型在辨识人类目标上表现尚可,但仍有较大的误判为‘background’的情况,占比达54%。

        值得注意的是,对于‘bicycle’类别,模型表现出较大的识别挑战,只有24%的正确识别率,且有高达75%的概率将其误判为‘background’。这可能是由于数据集中自行车样本数量较少,导致模型在训练过程中未能充分学习到代表自行车的特征。

        同时,混淆矩阵显示出‘dog’和‘person’两类间的高混淆性,这暗示在夜间条件下,模型可能难以区分动物和人形目标。这种现象在真实世界的应用中可能会引发安全问题,因为在自动驾驶系统等场景中,区分行人和动物是至关重要的。

        综上所述,此混淆矩阵反映了模型在不同目标检测任务上的表现,并揭示了模型准确性的不足及潜在的改进方向。为了提高模型的整体性能,可以考虑以下策略:增加‘bicycle’类别的训练样本、引入更强大的数据增强方法、优化模型结构或参数以减少‘person’误分类为‘background’的情况、使用更复杂的特征提取技术来区分‘dog’和‘person’。通过细致的误差分析和针对性的优化,我们有望构建出一个更加准确和鲁棒的夜间车辆检测系统。

5.3 YOLOv8/v7/v6/v5对比实验

(1)实验设计
        本实验旨在评估和比较YOLOv5、YOLOv6、YOLOv7和YOLOv8几种模型在夜间车辆目标检测任务上的性能。为了实现这一目标,博主分别使用使用相同的数据集训练和测试了这四个模型,从而可以进行直接的性能比较。该数据集包含夜间车辆的图像。本文将比较分析四种模型,旨在揭示每种模型的优缺点,探讨它们在工业环境中实际应用的场景选择。

模型 图像大小 (像素) mAPval 50-95 CPU ONNX 速度 (毫秒) A100 TensorRT 速度 (毫秒) 参数数量 (百万) FLOPs (十亿)
YOLOv5nu 640 34.3 73.6 1.06 2.6 7.7
YOLOv8n 640 37.3 80.4 0.99 3.2 8.7
YOLOv6N 640 37.5 - - 4.7 11.4
YOLOv7-tiny 640 37.4 - - 6.01 13.1

(2)度量指标

  • F1-Score:F1-Score 作为衡量模型性能的重要指标,尤其在处理类别分布不均的数据集时显得尤为关键。它通过结合精确率与召回率,提供了一个单一的度量标准,能够全面评价模型的效能。精确率衡量的是模型在所有被标记为正例中真正属于正例的比例,而召回率则关注于模型能够识别出的真正正例占所有实际正例的比例。F1-Score通过两者的调和平均,确保了只有当精确率和召回率同时高时,模型的性能评估才会高,从而确保了模型对于正例的预测既准确又完整。
  • mAP(Mean Average Precision):在目标检测任务中,Mean Average Precision(mAP)是评估模型性能的重要标准。它不仅反映了模型对单个类别的识别精度,而且还考虑了所有类别的平均表现,因此提供了一个全局的性能度量。在计算mAP时,模型对于每个类别的预测被单独考虑,然后计算每个类别的平均精度(AP),最后这些AP值的平均数形成了mAP。
名称 YOLOv5nu YOLOv6n YOLOv7-tiny YOLOv8n
mAP 0.485 0.547 0.448 0.490
F1-Score 0.50 0.56 0.49 0.50

(3)实验结果分析

       
在本研究中,我们的目的是通过比较不同版本的YOLO模型在相同夜间车辆检测数据集上的性能,来评估它们在实际应用中的效能。实验设计旨在确保公平的对比,因此,除了使用统一的数据集之外,我们还在相同的硬件配置和相似的训练条件下执行了所有实验。性能评估主要基于两个关键指标:mAP(mean Average Precision)和F1-Score。mAP衡量了模型在不同置信度阈值下的精确度和召回率的平均值,而F1-Score是精确度和召回率的调和平均,两者共同描绘了模型性能的全貌。

        实验结果显示,YOLOv6n在这两个指标上都展现了最佳性能,mAP为0.547,F1-Score为0.56。这可能归因于YOLOv6n在架构设计上的优化,它可能引入了更有效的特征提取和融合策略,使得模型在低光照和复杂夜间环境中能够更准确地定位和识别车辆。

       在我们的实验结果中,YOLOv8n以0.886的mAP和0.86的F1-Score领先,这意味着在检测准确性和结果的综合质量方面,YOLOv8n展示了最优性能。其次是YOLOv5nu,以0.879的mAP和0.85的F1-Score紧随其后。而YOLOv6n和YOLOv7-tiny的性能略显不足,mAP分别为0.740和0.723,F1-Score分别为0.77和0.78。

        YOLOv5nu和YOLOv8n的性能表现相似,这表明在这两个版本之间,尽管有技术上的迭代,但在性能上的提升并不显著。这可能是因为这两个版本的改进更多集中在模型速度和效率上,而不是准确性的大幅度提升。这也反映了模型迭代不总是在所有性能指标上都带来改进。

        YOLOv7-tiny则在这四种模型中表现最差,这可能由于其“tiny”版本针对的是速度和资源使用的优化,牺牲了一部分准确性。尤其是在处理需要精细特征检测的夜间图像时,模型的简化版本可能不足以捕捉到足够的信息来准确地进行车辆检测。

        这些结果表明,即使是在相同的YOLO系列模型中,不同版本之间也存在明显的性能差异。选择合适的模型版本对于特定任务非常关键,需要根据实际应用的需求来权衡模型的准确性、速度和资源消耗。此外,实验结果也提示了未来的研究方向,例如在YOLOv7的基础上进一步优化其在复杂夜间场景下的识别能力,或在保持YOLOv6n准确性的同时,提高其运行效率。

        在未来的工作中,我们可以探索集成更先进的图像增强技术,对模型进行进一步微调,以应对低光照和动态背景带来的挑战。同时,深入分析数据集中的错误分类案例,识别模型性能瓶颈,并据此改进模型架构和训练策略,有望在不牺牲速度的前提下进一步提升模型的准确度和鲁棒性。


6. 系统设计与实现

6.1 系统架构概览

        系统架构主要包括以下几个关键组件:模型管理数据处理UI交互日志记录。每个组件都承担着系统运行中的特定职责,共同确保了系统的高效和稳定运行。

(一)模型管理

这是系统的第一步,负责对输入的图像数据进行预处理,包括图像的缩放、归一化等操作,以适应模型的输入要求。在我们的代码中,这部分功能主要通过YOLOv8v5Detector类中的preprocess方法实现。

(二)数据处理

数据处理是系统的核心部分,负责对输入的图像数据进行预处理、调用模型进行预测以及后处理预测结果。这一功能主要通过frame_process方法实现。首先,通过调整图像尺寸(cv2.resize)和进行必要的图像预处理(model.preprocess)准备好模型输入数据。然后,使用模型进行预测并获取结果。最后,通过model.postprocess对预测结果进行后处理,包括绘制检测框(drawRectBox)和生成检测信息。

(三) UI交互

我们利用Streamlit库构建了一个简洁直观的用户界面,允许用户轻松上传图片或视频文件,选择摄像头输入,以及调整模型参数等操作。Detection_UI类的setup_sidebar方法负责侧边栏的布局设计,提供了模型设置、摄像头配置、识别项目设置等多个选项供用户选择。

(四)日志记录

日志记录功能由LogTableResultLogger两个类共同完成。LogTable类负责管理检测过程中生成的所有日志数据,包括检测结果的保存、日志数据的持久化(save_to_csv)以及日志视图的更新(update_table)。ResultLogger则用于将每次检测的结果整合(concat_results),方便在UI中显示和日志文件中记录。

        通过上述设计,我们的系统能够有效地处理夜间车辆图像中的目标检测任务,为用户提供直观、实用的检测工具。我们将继续优化系统架构,引入更先进的技术,以提高检测的准确性和系统的可用性。

6.2 系统流程

        针对基于YOLOv8/v7/v6/v5的夜间车辆检测系统,下面我们将深入探讨系统的具体工作流程,并结合代码中的类和方法进行详细说明:

  1. 系统初始化(__init__

    • 系统启动时,Detection_UI类会被实例化。在这个阶段,会进行环境的准备工作,包括加载模型、设置页面布局、初始化参数等。
  2. 用户配置

    • 用户通过侧边栏(setup_sidebar方法中实现)进行配置,可以选择模型类型、调整检测参数(如置信度conf_threshold和IOU阈值iou_threshold),并选择输入源(上传的文件或摄像头)。
  3. 文件上传与摄像头选择

    • 用户选择上传文件(图片或视频)或选择摄像头作为输入源。系统通过uploaded_fileselected_camera变量处理用户的选择。
  4. 图像处理与目标检测(frame_process

    • 对于实时摄像头输入,系统不断读取帧,调用process_camera_or_file方法进行处理。
    • 对于文件上传,根据文件类型(图片或视频),分别处理。
    • 在处理过程中,会使用frame_process方法对捕获的帧进行预处理、模型推理和后处理,识别出图像中的夜间车辆佩戴情况。
  5. 结果展示与日志记录

    • 系统在主界面上通过image_placeholderimage_placeholder_res展示处理后的图像。同时,检测信息如目标类别、置信度等通过LogTable类记录,并支持以CSV格式导出(save_to_csv)。
  6. 用户交互与反馈

    • 用户可以通过侧边栏进行进一步的操作,如更改检测参数或重新选择输入源。系统根据用户操作实时更新UI显示和检测结果。
  7. 结束与清理

    • 用户操作完成后,可以通过点击UI中的导出按钮(在setupMainWindow中处理)导出检测结果日志。系统也会在结束时自动进行资源释放和清理工作。

        通过上述流程,基于YOLO的夜间车辆检测系统能够实时准确地识别出夜间车辆,提供了一个高效的解决方案来应对实际情况。系统的设计充分考虑了用户交互和实时性能,确保了既高效又易用。


代码下载链接

         如果您希望获取博客中提及的完整资源包,包含测试图片、视频、Python文件(*.py)、网页配置文件、训练数据集、代码及界面设计等,可访问博主在面包多平台的上传内容。相关的博客和视频资料提供了所有必要文件的下载链接,以便一键运行。完整资源的预览如下图所示:

        资源包中涵盖了你需要的训练测试数据集、训练测试代码、UI界面代码等完整资源,完整项目文件的下载链接可在下面的视频简介中找到➷➷➷

演示与介绍视频https://www.bilibili.com/video/BV1sC411L7Rd/
YOLOv8/v7/v6/v5项目合集下载https://mbd.pub/o/bread/mbd-ZZ2YmJpy
YOLOv8和v5项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Ykpdr
YOLOv7项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Yl5hy
YOLOv6项目完整资源下载https://mbd.pub/o/bread/mbd-ZZ2Yl51x

完整安装运行教程:

        这个项目的运行需要用到Anaconda和Pycharm两个软件,下载到资源代码后,您可以按照以下链接提供的详细安装教程操作即可运行成功,如仍有运行问题可私信博主解决:

  1. Pycharm和Anaconda的安装教程https://deepcode.blog.csdn.net/article/details/136639378

        软件安装好后需要为本项目新建Python环境、安装依赖库,并在Pycharm中设置环境,这几步采用下面的教程可选在线安装(pip install直接在线下载包)或离线依赖包(博主提供的离线包直接装)安装两种方式之一:

  1. Python环境配置教程https://deepcode.blog.csdn.net/article/details/136639396(2,3方法可选一种);
  2. 离线依赖包的安装指南https://deepcode.blog.csdn.net/article/details/136650641(2,3方法可选一种);

        如使用离线包方式安装,请下载离线依赖库,下载地址:https://pan.baidu.com/s/1uHbU9YzSqN0YP_dTHBgpFw?pwd=mt8u (提取码:mt8u)。


7. 结论与未来工作

        本文通过深入研究并实践了基于YOLOv8/v7/v6/v5的深度学习模型在夜间车辆检测领域的应用,成功开发了一个结合了这些先进算法的夜间车辆检测系统。通过对多个版本的YOLO模型进行细致的比较和优化,本研究不仅提升了夜间车辆检测的准确率和实时性,还通过Streamlit创建了一个直观、美观且易于使用的Web应用,使用户能够轻松地进行车辆检测,从而在智能交通、城市监控等实际应用中发挥重要作用。

        经过一系列实验验证,本文所提出的方法在夜间车辆检测的准确性和处理速度上都达到了令人满意的水平。同时,我们还提供了完整的数据集处理流程、模型训练和预测的代码,以及基于Streamlit的系统设计和实现细节,为后续的研究者和开发者复现和参考提供了方便。尽管取得了一定的成果,但夜间车辆检测作为一个复杂多变的任务,仍然面临着许多挑战和改进空间。在未来的工作中,我们计划从以下几个方向进行探索:

  1. 模型优化与更新:继续探索更深层次的网络结构和优化策略,如神经网络架构搜索(NAS)技术,以进一步提升模型的性能和效率。

  2. 多模态融合:考虑结合雷达、激光雷达(LiDAR)等其他传感器信息,采用多模态学习方法进行车辆检测,以更全面地理解车辆在不同环境条件下的行为。

  3. 跨域适应性:研究在不同光照条件、不同地理位置的车辆检测,通过领域自适应技术提高模型在多样化环境中的泛化能力。

  4. 用户交互体验:进一步优化系统的用户界面和交互设计,使其更加人性化、智能化,以满足更广泛用户的需求。

  5. 实际应用拓展:探索夜间车辆检测在更多实际应用场景中的应用,如智能交通管理、自动驾驶辅助系统等,以发挥其最大的社会和经济价值。

        总之,夜间车辆检测技术正处于快速发展之中,随着技术的不断进步和应用场景的不断拓展,我们相信在不久的将来,基于深度学习的夜间车辆检测将在多个领域发挥更加重要的作用。


  1. Du J. Understanding of object detection based on CNN family and YOLO[C]//Journal of Physics: Conference Series. IOP Publishing, 2018, 1004: 012029. ↩︎

  2. Zhu X, Lyu S, Wang X, et al. TPH-YOLOv5: Improved YOLOv5 based on transformer prediction head for object detection on drone-captured scenarios[C]//Proceedings of the IEEE/CVF international conference on computer vision. 2021: 2778-2788. ↩︎

  3. Sun Z, Chen B. Research on Pedestrian Detection and Recognition Based on Improved YOLOv6 Algorithm[C]//International Conference on Artificial Intelligence in China. Singapore: Springer Nature Singapore, 2022: 281-289. ↩︎

  4. Zhao H, Zhang H, Zhao Y. Yolov7-sea: Object detection of maritime uav images based on improved yolov7[C]//Proceedings of the IEEE/CVF winter conference on applications of computer vision. 2023: 233-238. ↩︎

  5. Aboah A, Wang B, Bagci U, et al. Real-time multi-class helmet violation detection using few-shot data sampling technique and yolov8[C]//Proceedings of the IEEE/CVF conference on computer vision and pattern recognition. 2023: 5349-5357. ↩︎

标签:夜间,车辆,训练,检测,模型,YOLOv8,v6,v7
From: https://www.cnblogs.com/deeppython/p/18096238

相关文章