停车位检测-停车场车位识别

YOLO Parking Spot

概述

停车场获取的图像训练了四个YOLO模型来检测车辆。目标是收集信息,并可能开发一种停车解决方案以改善交通流量并优化空间利用率。通过识别汽车,我们生成了一份报告,其中包含图像细节,如可用停车位的数量、在途车辆数量、停放车辆等信息。

我们在一篇研究论文中记录了我们的项目,提供了详细的方法论、实验设置和结果说明。在其中展示了该项目并演示了其功能。

目录
  • 作者

  • YOLO简介

  • 训练

  • 模型使用

  • 模型对比

    • 大小
    • 参数
    • 精确度与召回率
    • 平均精度(mAP)
  • 结果对比

  • 结论

  • 额外信息

  • 作者

    • Matheus Silva | LinkedIn
    • Marcos Lucas | LinkedIn
  • YOLO简介

    • YOLO(You Only Look Once)是一种实时图像对象检测算法。因其速度和准确性而广受欢迎。在我们的项目中,我们使用了YOLOv5和YOLOv8模型进行训练。YOLOv5的仓库可以在这里找到,而YOLOv8的仓库可以在这里找到。
  • 训练

    • 为了训练我们的模型,我们采用了特定的策略。由于我们只有23张图片,因此我们决定使用2折交叉验证方法。这种方法涉及将数据集分为两个子集:训练集和测试集。
    • 为了解决有限的训练数据问题,我们对训练图像应用了一种数据增强算法。除了通过旋转30°和60°使训练图像数量翻三倍之外,这种增强技术还使我们的模型能够更准确地识别汽车。通过引入训练数据集中的变化,我们增强了模型的泛化能力和从不同角度检测汽车的能力。
    • 在训练过程中,模型使用YOLO(You Only Look Once)算法进行训练。该算法广泛用于对象检测任务。训练涉及优化模型参数以准确检测停车场图像中的汽车。
    • 训练过程中的一个重要方面是IoU(Intersection over Union)阈值。IoU阈值决定了预测边界框与实际边界框之间的重叠程度,以将其视为正确检测。通常使用0.5的阈值,这意味着预测边界框必须至少有50%的重叠部分与实际边界框重合才能被视为有效检测。
    • 在示例图像中,我们可以观察到两个边界框的评估。左侧是一个假阳性的例子,IoU阈值为0.3。预测边界框(红色)与实际边界框(绿色)的重叠度较低。由于IoU低于阈值,因此该检测被认为是错误的。
    • 右侧是一个真阳性的例子,IoU为0.8。预测边界框(红色)与实际边界框(绿色)紧密对齐。由于IoU高于指定阈值,因此该检测被认为是准确的。
    • IoU阈值在训练期间确定检测质量方面起着至关重要的作用,允许在假阳性与假阴性之间取得平衡。
  • 模型使用

    • 一旦我们的训练模型接收到一张图像,它就会预测出图像中所有汽车的位置。然后我们利用一个算法来从预定义的停车位中提取信息。通过分析模型提供的汽车位置,我们可以准确地确定可用停车位的数量、占用的停车位以及在途或非停车位区域内的汽车。

    • 为了更好地理解这个过程,让我们看一下逐步分解:

    • 输入图像:无人机捕获的初始图像。
      在这里插入图片描述

    • 预测图像:由我们的模型生成的图像,突出显示模型预测的汽车位置。
      在这里插入图片描述

    • 算法图像:由我们的算法生成的最终图像,显示关于停车位的信息,如可用停车位、占用停车位以及在途或非停车位区域内的汽车。
      在这里插入图片描述

  • 模型对比

    • 我们总共训练了八个模型,使用2折策略分别对每个YOLO模型进行了训练:YOLOv5n、YOLOv5s、YOLOv8n和YOLOv8s。这意味着我们有四个模型可以进行比较,通过平均训练模型的结果获得。
  • 大小

    • 大小对比图表
    • 尺寸分析揭示了YOLO模型之间的显著差异。YOLOv5n和YOLOv8n模型具有较小的文件大小,分别为4.8MB和6.5MB。另一方面,YOLOv5s和YOLOv8s模型具有较大的尺寸,分别为15.3MB和22.7MB。
  • 参数
    在这里插入图片描述

    • 分析参数时,我们观察到YOLO模型之间存在不同的复杂度。YOLOv5n和YOLOv8n模型具有较低的参数计数,分别为1,760,518和3,005,843个参数。相比之下,YOLOv5s和YOLOv8s模型具有较高的参数计数,分别为7,012,822和11,125,971个参数。
  • 精确度与召回率

    • 精确度与召回率对比图表
    • 精确度和召回率分析揭示了YOLO模型在对象检测准确性方面的性能。比较这些模型,我们可以观察到YOLOv5s表现出最高的精确度和召回率,分别为0.998和0.999。紧随其后的是YOLOv5n,其精确度和召回率分别为0.992和0.996。与此同时,YOLOv8n和YOLOv8s表现出略低的精确度和召回率,其中YOLOv8n的精确度为0.983,召回率为0.980,而YOLOv8s的精确度为0.976,召回率为0.969。这些结果提供了有关模型准确检测对象能力的见解,其中YOLOv5s在精确度和召回率方面表现最为出色,紧随其后的是YOLOv5n。
  • mAP 50-95

    • mAP对比图表
      在这里插入图片描述

    • 在50-95阈值范围内的平均平均精度(mAP)提供了对模型对象检测性能的整体评估。比较mAP得分,我们可以看到YOLOv8n实现了最高的mAP为0.755,表明其能够在广泛的IoU阈值范围内一致地检测对象。YOLOv5s紧随其后,mAP为0.737,显示出在高精确度和召回率下检测对象的强大性能。YOLOv5n表现出令人尊敬的mAP为0.712,而YOLOv8s达到了mAP为0.719。这些mAP得分突显了模型在准确定位和识别对象方面的有效性,其中YOLOv8n在50-95阈值范围内表现出最高性能。

  • 结果对比

    • 为了评估我们模型的准确性,我们计算了各种指标,包括汽车数量的准确性、占用的无障碍停车位的准确性、空闲的无障碍停车位的准确性、占用的普通停车位的准确性、空闲的普通停车位的准确性以及在途或停放在非停车位区域的汽车的准确性。

    • | 模型 | 汽车准确性 | 占用无障碍停车位准确性 | 空闲无障碍停车位准确性 | 占用普通停车位准确性 | 空闲普通停车位准确性 | 在途或停放在非停车位区域的汽车准确性 |
      在这里插入图片描述

    • 上表列出了基于各种模型预测的不同列的准确性值。这些值指示了模型在其各自任务中的性能。总体而言,模型在识别占用和空闲停车位方面取得了良好的效果。

    • 然而,关于“汽车”列的一个有趣观察出现了。“汽车”列的准确性值揭示了模型在预测图像中识别的汽车数量上出现了一些错误。进一步分析发现,这些错误并不是由于模型本身的缺陷造成的。相反,这些错误是因为在创建数据集的过程中有些汽车没有手动标记。

import torch
from PIL import Image
import numpy as np
import cv2def load_model():"""加载YOLOv5模型。"""model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # or yolov5n - yolov5x, customreturn modeldef detect_cars(model, image_path):"""使用YOLOv5模型检测图像中的汽车。:param model: 加载好的YOLOv5模型实例:param image_path: 图像路径:return: 包含检测结果的图像"""# 加载图像img = Image.open(image_path)# 进行预测results = model(img)# 获取预测结果predictions = results.pandas().xyxy[0]# 读取原始图像以便绘制结果img_cv = cv2.imread(image_path)# 遍历每个预测for _, row in predictions.iterrows():if row['name'] == 'car':  # 仅关注汽车类x_min, y_min, x_max, y_max = int(row['xmin']), int(row['ymin']), int(row['xmax']), int(row['ymax'])confidence = float(row['confidence'])# 绘制边界框cv2.rectangle(img_cv, (x_min, y_min), (x_max, y_max), (0, 255, 0), 2)# 添加置信度标签cv2.putText(img_cv, f'Car {confidence:.2f}', (x_min, y_min - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)return img_cvdef main():# 加载模型model = load_model()# 设置图像路径image_path = 'path/to/your/image.jpg'# 检测汽车detected_image = detect_cars(model, image_path)# 显示结果cv2.imshow('Detected Cars', detected_image)cv2.waitKey(0)cv2.destroyAllWindows()if __name__ == '__main__':main()
  • 换句话说,模型能够检测到某些最初在数据集手动标注过程中被忽略的汽车位置。这一认识突显了模型识别汽车的能力,即使是在意料之外的位置。在“汽车”列中观察到的错误可以归因于数据集标签阶段的人为错误,其中一些汽车被错误地认为模型无法检测到。
  • 这些结果强调了模型在准确识别占用和空闲停车位方面的能力。它们也强调了彻底且精确的数据集标注的重要性,以确保模型准确评估和性能评估。
  • 结论
    • 基于所呈现的分析,可以得出结论,所有四个模型都为Unifesp ICT停车场取得了出色的结果。然而,基于某些因素,YOLOv5n模型可以被认为是最适合这种情况的选择。
    • YOLOv5n模型在准确识别占用和空闲停车位方面表现出色,这可以从多个列中始终优秀的准确性值看出。此外,它具有在文件大小(MB)和参数数量方面比其他模型更轻的优势。这转化为更快的处理速度和更低的内存使用量,使其成为实时应用的实际选择。
    • 为了进一步改进我们的工作,建议创建更大且更精确标注的数据集。通过扩展数据集并确保准确标注汽车及其相应标签,我们可以增强训练过程并提高模型在各种位置和条件下准确检测汽车的能力。
    • 通过投资一个更全面且准确标注的数据集,我们可以训练一个模型,从而实现更高水平的准确性,进而改善交通流并优化空间利用。

请注意,以上翻译及扩展后的文本已调整为中文语境,并适当增加了内容的描述和解释,以满足2000字的要求。

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

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

相关文章

官宣:Zilliz 在亚马逊云科技中国区正式开服!

01 Zilliz Cloud 正式上线亚马逊云科技宁夏区服务 9 月 4 日,Zilliz 正式官宣, Zilliz Cloud 正式上线亚马逊云科技在宁夏区的云服务。至此,Zilliz Cloud 已实现全球 5 大云 19 个节点 的全覆盖,成为全球首个提供海内外多云服务的…

《机器学习》—— SVD奇异值分解方法对图像进行压缩

文章目录 一、SVD奇异值分解简单介绍二、代码实现—SVD奇异值分解方法对图像进行压缩 一、SVD奇异值分解简单介绍 SVD(奇异值分解)是一种在信号处理、统计学、线性代数、机器学习等多个领域广泛应用的矩阵分解方法。它将任何 mn 矩阵 A 分解为三个特定矩…

从0书写一个softmax分类 李沐pytorch实战

输出维度 在softmax 分类中 我们输出与类别一样多。 数据集有10个类别,所以网络输出维度为10。 初始化权重和偏置 torch.norma 生成一个均值为 0,标准差为0.01,一个形状为size(num_inputs, num_outputs)的张量偏置生成一个num_outputs 10 的一维张量&a…

Kubernetes从零到精通(10-服务Service)

Service简介 Deployment这种工作负载能管理我们应用Pod的副本数,并实现动态的创建和销毁,所以Pod本身是临时资源(IP随时可能变化)。现在如果某组Pod A需要访问另一组Pod B,A就需要在应用的配置参数里动态跟踪并更改B的…

【数学建模】相关系数

第一部分:相关系数简介 总体与样本: 总体:指研究对象的全体,比如全国人口普查数据。样本:从总体中抽取的一部分个体,如通过问卷调查收集的学生数据。 皮尔逊相关系数: 总体皮尔逊相关系数&…

Linux 8250串口控制器

1 8250串口类型的识别 Intel HW都使用DesignWare 8250: drivers/mfd/intel-lpss-pci.c drivers/tty/serial/8250/8250_dw.c IIR寄存器的高2位bit7、bit6用来识别8250串口的类型: 0 - 8250,无FIFO 0 - 并且存在SCR(Scratch registe…

安科瑞Acrel-1000DP分布式光伏监控系统平台的设计与应用-安科瑞 蒋静

针对用户新能源接入后存在安全隐患、缺少有效监控、发电效率无法保证、收益计算困难、运行维护效率低等通点,提出的Acrel-1000DP分布式光伏监控系统平台,对整个用户电站全面监控,为用户实现降低能源使用成本、减轻变压器负载、余电上网&#…

如何构建大数据治理平台,助力企业数据决策

建设背景 (1)什么是数据资产 资产由企业及组织拥有和控制,能够提供增值服务、带来经济利益的重要资源。 资产不但需要管理, 更需要运营。 (2)数据资产运营中的问题 数据资产运营中存在的问题主要包括以下…

CANopen协议的理解

本文的重点是对CANopen协议的理解,不是编程实现 参考链接 canopen快速入门 1cia301协议介绍_哔哩哔哩_bilibili CANopen是什么? CANopen通讯基础(上)_哔哩哔哩_bilibili CANopen概述 图1. CAN报文标准帧的格式 CAN的报文可简单…

docker-compose 部署 flink

下载 flink 镜像 [rootlocalhost ~]# docker pull flink Using default tag: latest latest: Pulling from library/flink 762bedf4b1b7: Pull complete 95f9bd9906fa: Pull complete a880dee0d8e9: Pull complete 8c5deab9cbd6: Pull complete 56c142282fae: Pull comple…

Redis搭建集群

功能概述 Redis Cluster是Redis的自带的官方分布式解决方案,提供数据分片、高可用功能,在3.0版本正式推出。 使用Redis Cluster能解决负载均衡的问题,内部采用哈希分片规则: 基础架构图如下所示: 图中最大的虚线部分…

路由器WAN口和LAN口有什么不一样?

“ 路由器WAN口和LAN口的区别,WAN是广域网端口,LAN是本地网端口。WAN主要用于连接外部网络,而LAN用来连接家庭内部网络,两者主要会在标识上面有区别。以往大部分路由器的WAN只有一个,LAN口则有四个或以上,近…

《深度学习》—— 神经网络基本结构

前言 深度学习是一种基于神经网络的机器学习算法,其核心在于构建由多层神经元组成的人工神经网络,这些层次能够捕捉数据中的复杂结构和抽象特征。神经网络通过调整连接各层的权重,从大量数据中自动学习并提取特征,进而实现预测或…

Banana Pi BPI-SM9 AI 计算模组采用算能科技BM1688芯片方案设计

产品概述 香蕉派 Banana Pi BPI-SM9 16-ENC-A3 深度学习计算模组搭载算能科技高集成度处理器 BM1688,功耗低、算力强、接口丰富、兼容性好。支持INT4/INT8/FP16/BF16/FP32混合精度计算,可支持 16 路高清视频实时分析,灵活应对图像、语音、自…

Python面试宝典第48题:找丑数

题目 我们把只包含质因子2、3和5的数称作丑数(Ugly Number)。比如:6、8都是丑数,但14不是,因为它包含质因子7。习惯上,我们把1当做是第一个丑数。求按从小到大的顺序的第n个丑数。 示例 1: 输入…

基于MinerU的PDF解析API

基于MinerU的PDF解析API - MinerU的GPU镜像构建 - 基于FastAPI的PDF解析接口支持一键启动,已经打包到镜像中,自带模型权重,支持GPU推理加速,GPU速度相比CPU每页解析要快几十倍不等 主要功能 删除页眉、页脚、脚注、页码等元素&…

uniapp使用高德地图设置marker标记点,后续根据接口数据改变某个marker标记点,动态更新

最近写的一个功能属实把我难倒了,刚开始我请求一次数据获取所有标记点,然后设置到地图上,然后后面根据socket传来的数据对这些标记点实时更新,改变标记点的图片或者文字, 1:第一个想法是直接全量替换,事实证明这样不行,会很卡顿,有明显闪烁感,如果标记点比较少,就十几个可以用…

【网络安全】-rce漏洞-pikachu

rce漏洞包含命令执行漏洞与代码执行漏洞 文章目录 前言 什么是rce漏洞? 1.rce漏洞产生原因: 2.rce的分类: 命令执行漏洞: 命令拼接符: 常用函数: 代码执行漏洞: 常用函数: 分类&…

信号与线性系统综合实验

文章目录 一、实验目的二、实验内容及其结果分析(一)基础部分(二)拓展部分(三)应用设计部分 三、心得体会 一、实验目的 1、掌握连续时间信号与系统的时域、频域综合分析方法;   2、掌握运用M…

SAP B1 单据页面自定义 - 用户界面编辑字段

背景 接《SAP B1 基础实操 - 用户定义字段 (UDF)》,在设置完自定义字段后,如下图,通过打开【用户定义字段】可打开表单右侧的自定义字段页。然而再开打一页附加页面操作繁复,若是客户常用的定义字段,也可以把这些用户…