车位检测算法-Context-Based Parking Slot Detection With a Realistic Dataset

本文主要是介绍车位检测算法-Context-Based Parking Slot Detection With a Realistic Dataset,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

停车位检测算法总结

Context-Based Parking Slot Detection With a Realistic Dataset

摘要

这篇文章提出了一种基于上下文的两阶段的停车位检测方法,其灵感来自于人类司机寻找停车位的过程。由两个深度网络模块组成:一个停车位的上下文识别器停车位检测器。识别器识别停车环境,包含车位类型、角度和车位的可用性;车位检测器通过多个基于类型的具有旋转anchor box和旋转非最大抑制的微调检测器来定位停车位的确切位置。此外,作者还发布了一个真实的停车位数据集,其中包含22817张停车位图像,车位类型和环境比较丰富。还提出了一种新的停车位检测评估指标,反映车辆是否可以停在检测到的停车位内。
github
代码环境搭建测试:to do!
本文提出的数据集地址:https://aistudio.baidu.com/aistudio/datasetdetail/146884

一、方法

在这里插入图片描述
从上图可以看出,整个模型由一个分类回归模型(基于 mobienet V2) + 检测模型组成(基于 yolov 3)

A. Overvier

总体方案如图所示。将车辆左右两侧的鱼眼相机捕获的图像转换为鸟瞰视图图像,并作为输入,这里没有用到多个鱼眼相机拼接的俯视图,而是只用到单个相机,给出的观点是拼接会造成计算量的增加而且拼接会造成一定的图像失真。停车位的检测使用一个两阶段的深度学习模型,由一个**停车上下文识别器(PCR)和一个停车位检测器(PSD)**组成。

在PCR中,估计了类型和方向,这是停车位的粗略信息,
类型 :平行、垂直、倾斜、非停车位
方向 :一个角度值(−90和90度之间的角值)
但是对每一张图片只预测一个类型各一个角度值
In most cases, since the adjacent parking slots will have the same orientation and type, the PCR outputs one parking slot type and one angular value per input image containing multiple slots.

在PSD中,根据PCR提供的检测信息,估计停车位的准确坐标。作者解释从直观的角度来看,方法类似于人类操作者驾驶和停车的过程。司机粗略地寻找一个停车的地方,然后估计出停车位的确切位置,是有那么点道理。
在PSD中有三个检测器,根据PCR推断的停车位类型,只有一个可以进行检测。首先使用所有类型的数据来训练一个检测器,然后将其复制到三个检测器中。最后,这三个检测器中的每一个都用特定类型的数据进行微调。当图像被归类为非停车位时,PSD不会被激活,因为在该空间中没有停车位。

B. PARKING CONTEXT RECOGNIZER

当应用于实际的停车系统时,PCR始终工作识别车辆附近是否存在停车位。在实际情况下,当没有停车时,无需估计停车位的准确位置。因此,只有当PCR识别到周围空间是可用的停车类型时,PCR才能为PSD提供类型和角度,以估计停车位的确切位置。这样,PCR作为一种过滤器,可以减少停车系统中的计算量。使用MobileNetV2作为backbone。
在这里插入图片描述

输入的图像为 64×192 的RGB图像。主干网络后接两个分支;一个用于类型分类,另一个用于方向角度回归。

  • 分类分支
    分类分支由两个全连接的层组成:一个128个神经元和ReLU激活的隐藏层和一个4个输出单元的Softmax激活层。分类分支中的4个输出单元分别表示其中一种停车位类型:平行、垂直、倾斜和非停车位。
  • 回归分支
    回归分支由两个全连接的层组成:一个128个神经元和relu激活的隐藏层和一个具有 Sigmoid激活的输出单元层。输出单元产生停车位的角度,GT值怎么算呢(是根据停车位的分隔线计算出来的)使直线垂直于车辆行驶方向的角度为0度,将顺时针方向旋转的直线的角度设置为正角,而将逆时针方向旋转的直线的角度设置为负角。因此,该角度的值在−90和+90度之间的范围内,它被归一化到0到1之间的范围。
    其实就是一个目标检测问题,box 的角点可以计算出角度值。labelme 就可以标注吧
    在这里插入图片描述
  • PCR LOSS
    在这里插入图片描述
    式中, P ^ c \hat P_c P^c为分类分支的第c个输出值, θ ^ \hat{\theta} θ^为回归分支的输出值,而 P c P_c Pc θ \theta θ分别为停车位类型和方向的真值。 λ \lambda λ是平衡多任务损失的参数

C. PARKING SLOT DETECTOR

PSD
PSD是基于YOLOv3的结构构建的,并估计了紧密包含停车位的四边形的四个顶点的坐标。常见的目标检测器,包括YOLOv3,可以估计宽度、高度和中心坐标,因为它们的目标是找到一个包围目标的水平边界框。停车场是四边形,但有时不是矩形的,可以旋转或一些区域可能被截断。本文的车位检测器即使在上述情况下,也要估计停车位的四个顶点的坐标,以准确地描述停车位的位置。本文检测器的输出设计如图3a所示。在(b)中,黑色虚线表示旋转的锚框,蓝色实线表示停车位。
在这里插入图片描述
在普通的目标检测器中,水平边界框使用水平锚框进行估计。相比之下,本文通过旋转锚框来更准确地检测旋转后的停车位。锚框的旋转角度用PCR估计的结果,用 θ ^ \hat{\theta} θ^表示。旋转后的锚框分别用 ( b x 、 b y ) (b_x、b_y) (bxby) ( b x i 、 b y i ) (b_{xi}、b_{yi}) (bxibyi)表示,它们分别表示停车位的中心点坐标和第i个顶点的坐标。
这些坐标的计算方法为:
在这里插入图片描述
其中, t x 、 t y t_x、t_y txty为估计停车位中心坐标; x i 、 y i x_i、y_i xiyi为估计停车位顶点坐标; c x 、 c y c_x、c_y cxcy为网格的坐标; A w 、 A h A_w、A_h AwAh分别为锚框的宽度和高度。这些符号如图3b所示。通过旋转锚框,各种停车位的外观变得相似,如图4所示。
三种类型的停车场都使用了Fine-tuned,当停车类型被归类为非停车位时,检测器不工作。每个检测器对每种停车位类型都有独特的权重,只有当相应的停车位类型被PCR激活时才可以操作。

rNMS
在这里插入图片描述

评估指标

IoU是目标检测最普遍的评价指标,但是不太适用于停车位检测问题。即使预测的停车位具有相同的IoU值,车辆在停车位上的停放也可能不同,如图6所示。
在这里插入图片描述

为了缓解这个问题,提出了一个新的评估指标,称为停车分数,它反映了车辆是否可以停在停车位内。
一个停车位的停车分数 S S S是通过将两个分数相乘来计算的:面积分数 S A r e a S_{Area} SArea(估计停车位面积的准确性)和位置分数 S L o c S_Loc SLoc(估计位置的准确性)。利用gt的停车位G和预测的停车位P的 坐标来估计这两个分数。
在这里插入图片描述
这两个区域大小越接近,分数就越接近值1。位置分数用来衡量P的面积在G的面积内,计算为
在这里插入图片描述
where P 1 P^1 P1 is a scale-downed location of P P P so that P 1 ⊂ G P^1 ⊂ G P1G。如果 P P P完全包含在 G G G中,则 S L o c S_{Loc} SLoc的最大值为1。如果停车分数 S S S超过阈值,则判定预测为真,否则为假。然后根据真判断和错误判断计算整个测试集的精度、召回率和平均精度。
在这里插入图片描述

实验

MobileNetV2、YOLOv3 architecture using darknet-53 as the backbone.
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

总结

本文的方法虽然是一个二阶段的方法,但是整体架构和使用的模型比较简单,从实验效果看也不错,用的MobileNetV2、和基础的YOLOv3,感觉有很大的改进空间。

这篇关于车位检测算法-Context-Based Parking Slot Detection With a Realistic Dataset的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/241407

相关文章

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

SpringBoot实现MD5加盐算法的示例代码

《SpringBoot实现MD5加盐算法的示例代码》加盐算法是一种用于增强密码安全性的技术,本文主要介绍了SpringBoot实现MD5加盐算法的示例代码,文中通过示例代码介绍的非常详细,对大家的学习... 目录一、什么是加盐算法二、如何实现加盐算法2.1 加盐算法代码实现2.2 注册页面中进行密码加盐2.

Java时间轮调度算法的代码实现

《Java时间轮调度算法的代码实现》时间轮是一种高效的定时调度算法,主要用于管理延时任务或周期性任务,它通过一个环形数组(时间轮)和指针来实现,将大量定时任务分摊到固定的时间槽中,极大地降低了时间复杂... 目录1、简述2、时间轮的原理3. 时间轮的实现步骤3.1 定义时间槽3.2 定义时间轮3.3 使用时

如何通过Golang的container/list实现LRU缓存算法

《如何通过Golang的container/list实现LRU缓存算法》文章介绍了Go语言中container/list包实现的双向链表,并探讨了如何使用链表实现LRU缓存,LRU缓存通过维护一个双向... 目录力扣:146. LRU 缓存主要结构 List 和 Element常用方法1. 初始化链表2.

golang字符串匹配算法解读

《golang字符串匹配算法解读》文章介绍了字符串匹配算法的原理,特别是Knuth-Morris-Pratt(KMP)算法,该算法通过构建模式串的前缀表来减少匹配时的不必要的字符比较,从而提高效率,在... 目录简介KMP实现代码总结简介字符串匹配算法主要用于在一个较长的文本串中查找一个较短的字符串(称为

通俗易懂的Java常见限流算法具体实现

《通俗易懂的Java常见限流算法具体实现》:本文主要介绍Java常见限流算法具体实现的相关资料,包括漏桶算法、令牌桶算法、Nginx限流和Redis+Lua限流的实现原理和具体步骤,并比较了它们的... 目录一、漏桶算法1.漏桶算法的思想和原理2.具体实现二、令牌桶算法1.令牌桶算法流程:2.具体实现2.1

Python如何实现PDF隐私信息检测

《Python如何实现PDF隐私信息检测》随着越来越多的个人信息以电子形式存储和传输,确保这些信息的安全至关重要,本文将介绍如何使用Python检测PDF文件中的隐私信息,需要的可以参考下... 目录项目背景技术栈代码解析功能说明运行结php果在当今,数据隐私保护变得尤为重要。随着越来越多的个人信息以电子形

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Python中的随机森林算法与实战

《Python中的随机森林算法与实战》本文详细介绍了随机森林算法,包括其原理、实现步骤、分类和回归案例,并讨论了其优点和缺点,通过面向对象编程实现了一个简单的随机森林模型,并应用于鸢尾花分类和波士顿房... 目录1、随机森林算法概述2、随机森林的原理3、实现步骤4、分类案例:使用随机森林预测鸢尾花品种4.1