在停车场找到一个空位是一个棘手的问题。如果传入的流量变化很大,甚至很难管理这些批次。哪个车位在这个时刻空置?什么时候需要更多车位?驾驶员是否发现很难到达特定的位置?哪辆车停在哪里?谁把车停好了?
目前使用地面安装的占用传感器网络或工作人员来确定其中一些问题的答案。传感器非常有效但需要维护,并且在单元+安装中每个节点的成本约为40-80美元。
对于工作人员来说,这是一种麻烦且容易出错的运动。即使员工在繁荣障碍和票务控制台方面得到了最好的帮助,也可以对实际入住率进行广泛的猜测。
解决该问题的一种方法是使用安全摄像机镜头来使用深度学习来实时检测停车占用率。(到最后完整代码的链接)
方法和架构
标记停车位的占用是一个两步过程。首先必须确定视野内停车位的位置。其次必须检测空间当前是否被占用。
其中一种方法是强行解决问题并手动标记所有车位。然而,每次移动,平移,缩放相机时,必须再次重复相机的新位置的繁重过程。
来自Drone图像的停车位(Priya Divedi Github)
第二种方法可能是使用停车场的白线作为车位的引导。可以使用canny过滤器和hough变换来使用和检测多边形。然而并非所有的停车场都是白色的。即使是那些已被拍摄的照片,在距离地面6米左右的摄像机镜头中,车道也会被停放的汽车遮挡。因此除非使用无人机拍摄顶部的镜头,否则这也不会有太大帮助。
可能会使用固定车本身来指示停车位。在几天的停车场镜头中,可能会发现所有的车位在某个时间段都被汽车占用。在镜头中检测固定车辆是实际停车位置的良好预测器。当车进入/离开车位时肯定会有移动。但那些噪音可以调出来。
一旦确定停车位,剩下的就是检测新车架中是否有车或不存在。这是停车位的裁剪图像中的简单分类问题。可以在接收摄像机流的桌面上实时运行。
检测停车位
需要一个物体探测器来解决问题的第一部分,它将为每个停车位提供一个界限。YOLO和MaskRCNN可以帮助我们。
YOLO是一种灵活而准确的算法,它为每个检测到的对象提供边界框以及它们的分类和可能性的估计。早期的对象检测算法,它使用不同的边界框大小多次扫描场景,并试图寻找行进的候选者。花了很长时间和计算资源。YOLO使用CNN图层使其成为一次性问题。一旦网络被训练,就可以在计算机上执行检测,即使在移动电话上也可以使用较小的网络和优化。
静物与一壶和一碗苹果Samuel Peploe 1924年
如果在风格上有所不同,YOLO确实做出了合理的估计,但有时也会错过。
MaskRCNN除了物体检测之外还是一种图像分割算法。MaskRCNN将每个像素分类为属于对象的实例。这是一项非常艰巨的任务。MaskRCNN通过对齐感兴趣区域建立在FCNN网络上。
Cityscaape数据集
在GPU上运行MaskRCNN需要大约200毫秒来处理1帧,所以它大约是Yolo速度的六分之一,可以在gpu上达到30 Fps。但另一方面,MaskRCNN需要大约20帧才能给出合理的结果,而YOLO(错过小物体)需要大约5倍。选择一个MaskRCNN更有意义,让它每小时运行超过20帧,持续两天。YOLO需要大约五倍的帧,但会错过一些车位。
专业化网络
在非常接近的物体实例的情况下,例如检测所有人在路上行进,YOLO有其弱点。它将场景划分为网格,并且可以检测每个网格的特定数量的对象。在停车场的情况下,停在前排的汽车可能会被错过。尝试专门研究网络来检测汽车。性能略有改善。
使用RESNET(或任何其他分类器)完成最终检测。也专注于汽车。使用了CNRPARK提供的数据集,因为这里有通常会在安全摄像头中找到的汽车图像。使用了FastAI的fit_one_cycle,并且能够在10个时期内在验证集上获得超过99.7%的准确率。令人惊讶的是,一旦您拥有训练有素的模型,就需要很少的数据和计算资源。
空| 来自意大利国家研究委员会(Cnr)的占用数据集
检测停车位
一旦有专门的重量,就可以完成检测停车位的实际任务。在自驾车中,需要在多个车架之间跟踪物体。在停车场检测时,需要在逐帧移动时保持对车位的跟踪。汽车将来去,他们的尺寸将改变,边界框也将改变。
从一帧到另一帧映射车位
联盟交叉(IOU)是解决此类问题的一个很好的指标。对于每个车位,检测后续图像中与前者具有最高IOU的相应车位并分配它。IOU低于阈值的车位可能是已经来到并占据停车位的新车辆。
在运行几帧之后,还需要在帧本身内合并不同的边界框,因为一些零星的条目可能导致构建。在此步骤中选择较高的IOU阈值以提供稳定的结果。
第一次蓝色检测| 红色占领| 绿色空置
删除瞬态操作
一些框架将捕获瞬态运动,例如汽车进入停车场。必须拒绝这些边界框的实例。基于一段时间内停车场的占用实例数量运行拒绝使能够控制这些零星的条目。
这将提供停车位列表:训练期间的坐标和典型占用模式。
检测车位内的占用情况
检测非常简单。将图像裁剪为上一步中边界框定义的车位。现在要做的就是对汽车是否存在进行分类。使用RESNET,它给一个合理的结果。
限制
很明显,该系统尚未达到标准。再次让它分成两部分检测车位并检测占用情况
你无法发现你无法看到的东西
树木,阴影限制了探测区域。部分遮挡(带有树冠)在某些情况下确实有效,而在其他情况下则无效。类似地面摄像机(<6m),该批次内的大多数汽车将隐藏在框架前面的几个汽车后面。只有在前面停车场空的几个框架中,才会检测到后面的地段。
对于非常小的物体,MaskRCNN和YOLO在拾取车位时很难。这可以是框架中约1-5%的停车位。然而这可以通过人类花费不到一分钟来提供正确的边界框来纠正。与辛苦的1-2小时相比,如果必须注释所有的车位。
这将带到第二部分:检测车位的状态。分类器看起来确实很好用。然而,小图像,奇怪的视角,黑暗和障碍限制了这一步骤
那么这一切在哪里加起来。停车检测不能扩展到所有用例。在大多数地下停车场,无法在地板上方9米处安装摄像头。树木,柱子,柱子等将阻碍许多地方的视野。
它有其缺点,也许现有的检测占用率的方法也是如此。如果能够将它们组合在一起,它可以创建一个更有效的系统。
什么可以延伸出来
停车票| 二维码| 空置车位
可以使用该系统将驾驶员引导到停车场的空置位置。现有的停车票可以带有QR码,然后可以使用该系统将驾驶员引导到空地。这减少了此步骤中所需的手动干预次数。
将车牌识别与占用检测相结合,可以跟踪哪辆车占用哪个车位。通过同样的措施,还可以跟踪谁停放了汽车。
地面传感器有效但成本高
与地面系统协同工作,设施管理人员可以实时了解停车库存水平。未来的扩充决定可以基于真实的历史数据。它还可以用于通过捕获停放汽车的人的快照来检测谁停放了车辆。
代码和说明
https://github.com/visualbuffer/parkingslot