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

news2024/11/20 6:27:07

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 cv2

def load_model():
    """
    加载YOLOv5模型。
    """
    model = torch.hub.load('ultralytics/yolov5', 'yolov5s')  # or yolov5n - yolov5x, custom
    return model

def 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_cv

def 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.coloradmin.cn/o/2132418.html

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

相关文章

Ai+若依(智能售货机运营管理系统---帝可得)--工单管理【08篇---0005:工单管理】

工单管理 需求说明 工单是一种专业名词,是指用于记录、处理、跟踪一项工作的完成情况。 管理人员登录后台系统选择创建工单,在工单类型里选择合适的工单类型,在设备编号里输入正确的设备编号。 工作人员在运营管理App可以看到分配给自己的工单,根据实际情况选择接收工单并…

复现PointNext代码

一、首先第一步,我们就需要下载代码:guochengqian/PointNeXt: [NeurIPS22] PointNeXt: Revisiting PointNet with Improved Training and Scaling Strategies (github.com) 二、然后下载好了之后,然后最关键的一点,这个点进去也要…

【LeetCode每日一题】2024年9月第二周(上)

2024.9.9 中等 难度评分 1333 链接:2181. 合并零之间的节点 (1)题目描述: (2)示例 (3)分析 整体来说,描述还算清晰的题目,找到0节点所框定的区域&#xff0c…

起重机检测系统源码分享

起重机检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer Visio…

@Valid @NotBlank @NotEmpty @NotNull不生效问题

Spring Boot2.3版本将不再内部依赖validator了 所以导致校验的注解不生效 解决方案&#xff1a;加入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId> </dependency&…

C++提高--模板(类模板/函数模板)

模板的概念 函数模板(将类型参数化) 函数模板语法 两个函数逻辑非常相似 #define _CRT_SECURE_NO_WARNINGS #include<iostream> using namespace std; // 模板// 交换两个数 void swapInt(int& a, int& b) {int temp a;a b;b temp; } void swapDouble(doubl…

力扣121-买卖股票的最佳时机(Java详细题解)

题目链接&#xff1a;121. 买卖股票的最佳时机 - 力扣&#xff08;LeetCode&#xff09; 前情提要&#xff1a; 因为本人最近都来刷dp类的题目所以该题就默认用dp方法来做。 dp五部曲。 1.确定dp数组和i下标的含义。 2.确定递推公式。 3.dp初始化。 4.确定dp的遍历顺序。…

踩最深的坑,教会自己找到需求

目录 引言 1. 寻找合适的需求 2. 海外市场选择 3. 线下热点判断 4. 线上关注度分析 5. 当前竞争分析 6. 未来潜力分析 引言 在经历了刻骨铭心的合伙创业经历后&#xff0c;我意识到是时候该独立出海了。 捡起早已深埋在心里的创业想法&#xff0c;开始独自创业。 这次…

用“女神的一群舔狗”的例子深入理解线程池

假如有一个妹子&#xff08;肤白貌美身材好&#xff09; 同一时间只能谈一个对象&#xff0c;但是新鲜感过去之后就没什么意思了&#xff0c;就想换个对象&#xff0c;但是更换对象的操作效率比较低&#xff0c;需要做到&#xff1a; 1. 想办法和现有对象分手 2.吸引到下一个舔…

高低压配电系统中电弧光的危害有多大?

摘要 故障电弧是一种常见的电气故障现象&#xff0c;尤其在配电系统中&#xff0c;可能对设备安全和电力供应造成严重影响。本文旨在探讨故障电弧对配电系统的危害&#xff0c;并提出相应的预防措施&#xff0c;以增强系统的可靠性和安全性。通过对故障电弧的形成机制、危害分…

软件设计师试题

1、以下关于RISC&#xff08;精简指令集计算机&#xff09;特点的叙述中&#xff0c;错误的是&#xff08; B &#xff09;。 A.对存储器操作进行限制&#xff0c;使控制简单化 B.指令种类多&#xff0c;指令功能强 C.设置大量通用寄存器 D.选取使用频率较高的一些指令&…

利用Python快速提取字体子集

来自&#xff1a;Python大数据分析 费弗里 在我们日常进行数据可视化、web应用开发等场景中&#xff0c;经常会用到一些特殊的非系统自带字体&#xff0c;尤其是中文字体&#xff0c;由于包含的字符数量众多&#xff0c;因此体积一般都比较大&#xff0c;这在进行数据可视化读取…

C++当中的继承

在C当中继承是一个非常重要的语法。我们可以使用继承快速的进行代码的复用以及对代码进行扩展操作。首先我们来进行学习继承的基本语法。 &#xff08;一&#xff09;继承的语法方式 还记得我们之前学习的访问限定符吗&#xff1f;就是class里面的private&#xff0c;public&am…

直播间没有自然流,如何突破?

如果你的直播间完全没有自然流量&#xff0c;不用担心&#xff0c;有四种方法可以解决这个问题。 第一种方法是延长直播时长。如今的账号系统与以前不同&#xff0c;现在自然流量非常珍贵。以前&#xff0c;新账号即使没有数据&#xff0c;平台也会给一些流量&#xff0c;但现在…

校园管理新篇章:Spring Boot系统实现策略

第3章 系统分析 3.1 需求分析 校园管理系统主要是为了提高用户的工作效率和更方便快捷的满足用户&#xff0c;更好存储所有数据信息及快速方便的检索功能&#xff0c;对系统的各个模块是通过许多今天的发达系统做出合理的分析来确定考虑用户的可操作性&#xff0c;遵循开发的系…

jmeter设置全局token

1、创建setup线程&#xff0c;获取token的接口在所有线程中优先执行&#xff0c;确保后续线程可以拿到token 2、添加配置原件-Http信息头管理器&#xff0c;添加取样器-http请求 配置好接口路径&#xff0c;端口&#xff0c;前端传参数据&#xff0c;调试一下&#xff0c;保证获…

2024社群空间站全自动付费进群系统九块九进群源码

多种玩法&#xff1a;付费VIP玩法、同城行业群裂变玩法、全民K歌群裂变玩法、拼多多群玩法、VIP领取百度网盘资料玩法、单群付费玩法;

WTL580-电子锁微波雷达应用解决方案,5.8GHz精准人体感知,触发高效交互新体验

一、简介 随着智能电子门锁普及&#xff0c;电子门锁的市场也随着打开&#xff0c;安装智能化电子门锁也为大势所趋。现我司推出基于WTL580微波雷达的电子锁应用方案&#xff0c;通过检测门锁周围是有活动人体存在来激活门锁。我司WTL580微波雷达方案采用5.8GHz微米波雷达传感器…

mac系统安装最新(截止2024.9.13)Oracle JDK操作记录

文章目录 下载JDK22配置环境变量验证环境变量是否生效整体命令如下 下载JDK22 打开最新版Oracle JDK下载地址 选择想要安装的JDK版本&#xff0c;然后选择适合兼容Mac机器的版本&#xff08;Intel/arm&#xff09;&#xff0c;建议直接下载安装程序&#xff0c;可视化安装 默…

栈的定义和基本操作的实现

写代码&#xff1a;定义顺序存储的栈&#xff08;数组实现&#xff09;&#xff0c;数据元素是 int 型 写代码&#xff1a;基于上述定义&#xff0c;实现“出栈、入栈、判空、判满”四个基本操作 写代码&#xff1a;定义链式存储的栈&#xff08;单链表实现&#xff09; 写代…