作者:小白

来源:小白学视觉

Q

如何使用Mask-RCNN检测停车位可用性?

我最近做了一个项目,根据安全摄像头的照片来检测停车位是否可用或被占用。我的工作有局限性,我将进一步详细介绍这些局限性,但一旦这些问题得到解决,这个项目可能是一个低成本的解决方案,以优化停车位的可用性。安装这些额外的设备肯定是有潜力的。

让我详细说明我在这个项目中使用的资源。Kaggle上有一个停车场数据集,无论位置是否被占用,它都有足够的数据点来训练一个深度学习模型和xml文件,我们可以在这里访问数据集停车场数据集。对于模型,我使用了最先进的目标检测和分割Mask-RCNN模型,它的性能惊人,可以通过这个链接访问。

如我们所见,Mask-RCNN在COCO数据集模型上进行了直接即用的预训练,在目标检测和分割方面做得很好。尽管在某些情况下,它把汽车误分为火车和卡车。

Mask-RCNN对象检测和分割

我也尝试了YOLO-v3,它的性能是一样的,所以我没有进一步使用YOLO模型,但如果小伙伴正在寻找替代的模型,YOLO是一个很棒的对象检测模型,这里有链接。

YOLO模型检测停车场上的车辆

首先我使用Mask-RCNN模型来检测车位上的车辆,并给定可用车位的数量来计算空车位。我们的模型不需要所有的COCO类,所以我将类限制为汽车、卡车和摩托车。但是预先训练的COCO数据集模型在检测小物体方面做得并不好,即使我尝试调整阈值和边界框,那些被误分类为火车的汽车也没有被检测到。这里绘制的是边界框,而不是可视化方法提供的模型。

Mask-RCNN模型预测

基于数据集的预测,这样我们就有两个类来预测这个位置是被占用了还是空了。这个停车场数据集的不足之处是,只从两个角度拍摄照片,这导致训练模型时存在过拟合问题,没有很好的泛化能力。其次,每个车位的标注不完整,在训练过程中会产生异常,并且并不是所有照片上可用的车位都被标注了,这也导致了模型的性能较差。我将向小伙伴展示我的意思,下面的照片只是显示了有多少停车位被注释:

并非所有停车位都已标注

许多xml文件没有填充类:

注释文件中缺少信息

缺少信息的停车位数量可能会增加到10-15个停车位,但在运行一些代码后,我认为这可以手动修复:有太多的文件需要修复,只为了训练模型的顶层,避免这些文件比较容易。为了解析xml文件,我使用了内置的python包XML .etree.Elementtree。同样值得注意的是,边界框的坐标是以一个中心点的角度给出的,所以如果我们想要正确地解析和创建边界框,就必须进行一些调整。

函数解析xml文件,提取停车位的轮廓

由于Mask-RCNN使用掩码来训练类,采用与KangarooDetection文章类似的方式,可以在这里访问,我使用边界框来创建掩码。这篇文章实际上帮助我们理解了如何使用Mask-RCNN模型,并且机器学习掌握对于许多机器学习应用程序来说是一个很好的资源。如果小伙伴还没看过的话,可以浏览一下。主要的区别是,我们将检测两个类,而不是一个,从而创建基于占用分类的掩码,以及如何计算边界框。

函数在边界框之外创建掩码,并创建两个要检测的类

至于数据集结构,我们必须为训练和测试数据创建两个目录,每个包含图像文件夹和匹配的标签文件夹,其中每个xml文件除了扩展名不同之外,都具有相同的文件名。而其余部分实际上是遵循一般的做法来训练Mask-RCNN的顶层,小伙伴可以在Matterport GitHub上查看不同的示例代码。

我们必须创建一个类ParkingLot来加载数据集,通过解析带注释的xml文件提取边界框的轮廓。

创建停车场类

然后,我们需要指定配置类,基于我们希望模型训练的类,加载训练和测试数据集,使用“训练”模式加载模型,并开始训练。

停车配置类

模型将在每个时期后保存在日志文件夹中,以便在训练完成后,我们可以继续加载模型以评估其性能。使用Mask-RCNN实现这一点的方法是创建新的配置类,该类将限制我们的预测范围。

预测配置类

用“验证集”模式加载模型,从logs文件夹加载模型:

函数绘制检测对象的边界框

因此,如果我们加载任意随机图像,检测可用和已占用的停车位,使用我们的函数来绘制它们,结果将是:

Mask-RCNN检测可用停车位

绿色框是可用的停车位,蓝色边界框是已占用的停车位。这个模型的性能看起来是相当不错,尽管它仍然不能检测到小车/停车位。数据集中故意忽略了停在人行道旁的汽车,这样模型在训练时就不会考虑这些汽车。这是MaskRCNN可视化方法的结果:

Mask-RCNN检测可用停车位

考虑到这个结果,似乎模型的性能真的很好。但在我们的数据集中,我们只有停车场的两个角度,因为我只训练顶级模型,我只使用了数据集的一部分。所以,可以看一下另一张停车场的照片,用类似的摄像头定位,但不是这个数据集的一部分。

很明显,这个模型与我们的停车场数据集过于匹配,这意味着它在同一个数据集上表现很好,但我没有说训练,因为训练和测试照片实际上是位于停车场上不同汽车的相同照片,虽然技术上没有泄漏测试数据,但在某种意义上,他们是一样的。预先训练过的、开箱即用的Mask-RCNN在探测车辆方面的表现要好得多。

鉴于这些结论和我之前提到的局限性,为了改进模型或向前推进,下一步应该做什么?我们可以使用整个数据集从头开始训练模型,看看它的执行情况,尝试调优检测阈值。我们也可以试着去做,也许这可以成为这篇文章的第二部分。但理想情况下,更多变化的数据集是必不可少的,完整的注释是创建准确的停车位检测模型的基础。此外,为了建立不仅准确而且健壮的检测模型,考虑到正在行驶而尚未停车的汽车和擅自停放的汽车是非常重要的,这些可能是未来需要进一步研究的步骤。

新闻

波士顿动力机器人解锁跑酷技能

大赛

移动云 API 应用创新开发大赛

技术

强化学习环境库 Gym 首个社区发布版

采访

驭势科技的无人驾驶野心

分享

点收藏

点点赞

点在看

实战:使用 Mask-RCNN 的停车位检测相关推荐

  1. Mask R-CNN用于目标检测和分割代码实现

    Mask R-CNN用于目标检测和分割代码实现 Mask R-CNN for object detection and instance segmentation on Keras and Tenso ...

  2. Mask R-CNN Keras 对象检测 对象分割 像素掩码

    原文链接 Mask R-CNN Keras 对象检测 对象分割 像素掩码 在 2019年7月16日 上张贴 由 hotdog发表回复 Mask R-CNN Keras 在本教程中,您将学习如何使用 K ...

  3. TF实战:(Mask R-CNN原理介绍与代码实现)-Chapter-8

    这篇文章写的挺辛苦,不过对于Mask介绍着墨不多. 文章: TF实战:Chapter-8上(Mask R-CNN介绍与实现) ..................................... ...

  4. 实战:使用Mask-RCNN的停车位检测

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 如何使用Mask-RCNN检测停车位可用性? 空/占用停车位 我最 ...

  5. rcnn 回归_目标检测-从RCNN到Mask RCNN两步检测算法总结-火龙果软件

    编辑推荐: 本文来自于arleyzhang博客,本文主要介绍目标检测中两步检测算法的总结对比,提出了一种新的两步检测模型, Light-Head RCNN ,希望会对您的学习有所帮助. R-CNN R ...

  6. 【深度学习】实战:使用Mask-RCNN的停车位检测

    如何使用Mask-RCNN检测停车位可用性? 空/占用停车位 我最近做了一个项目,根据安全摄像头的照片来检测停车位是否可用或被占用.我的工作有局限性,我将进一步详细介绍这些局限性,但一旦这些问题得到解 ...

  7. 目标检测(或分隔)算法Mask R-CNN简介

    在博文https://blog.csdn.net/fengbingchun/article/details/87195597 中对Faster R-CNN进行了简单介绍,这里在Faster R-CNN ...

  8. 终极指南:构建用于检测汽车损坏的Mask R-CNN模型(附Python演练)

    阅读时间将近11分钟 介绍 计算机视觉领域的应用继续令人惊叹着.从检测视频中的目标到计算人群中的人数,计算机视觉似乎没有无法克服的挑战. 这篇文章的目的是建立一个自定义Mask R-CNN模型,可以检 ...

  9. 走亲访友不慌!手把手教你怎样用Mask R-CNN和Python做一个抢车位神器

    现在大家都忙着过大年,按照传统习俗,各种走亲访友.这时候的商场.饭馆也都是"人声鼎沸",毕竟走亲戚串门必不可少要带点礼品.聚餐喝茶. 热闹归热闹,这个时候最难的问题可能就是怎样从小 ...

最新文章

  1. 便捷,轻巧的Groovy数据库操作
  2. java程序math包没有_java.math包应用
  3. java 注解使用_Java 注解用法
  4. YASnippet - emacs 的代码片段管理工具
  5. 移动开发(C#、VB.NET)Smobiler开发平台——GifView控件的使用方式
  6. potainer 日志_日志系统落地:制定日志规范
  7. 【java】JDK8的HashMap
  8. Thrift原理简析
  9. 调整计算机硬盘大小,分区助手调整硬盘分区大小图文教程?
  10. 高中计算机表格制作,高中信息技术表格数据的处理教案
  11. 推荐一个不错的在线制图网站---ProcessOn
  12. DATEDIF函数:
  13. 6-2 折半查找 (15分)_数据结构实验7_羊卓的杨
  14. 项目管理 | 如何正确的向领导汇报工作?
  15. 小程序上传头像图片裁剪
  16. java 使用log4j写日志文件
  17. 2021-2026年,全球MPO光纤连接器市场复合年增长率预计为23.2%
  18. 软著申请提交审核一般时间是60-75工作日,软件著作权登记申请是可以加急的,加急是20-30工作日
  19. 将虚拟机网络适配器改为仅主机模式,Vmware弹出“仅主机模式适配器驱动程序似乎未运行”
  20. MindSpore Science科学计算行业套件——MindSpore Elec电磁仿真套件

热门文章

  1. mongDB的常用操作总结
  2. matlab2014a + win764bit + vs2013混合编程(.m转成dll供C++调用)
  3. react构建淘票票webapp,及react与vue的简单比较。
  4. 通过data:image/png;base64把图片直接写在src里
  5. asp.net 获取当前时间的格式
  6. 用VS2005打开方案出现“此安装不支持该项目类型”
  7. 修改Vista系统目录权限
  8. php取当前是pc还是手机号,利用PHP判断是手机移动端还是PC端访问的函数示例
  9. MATLAB中subplot函数使用
  10. 希望和等待:目标,欲望和意志