点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

如何使用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文件夹加载模型:

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

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

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

Mask-RCNN检测可用停车位

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

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

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

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。

下载2:Python视觉实战项目52讲

在「小白学视觉」公众号后台回复:Python视觉实战项目即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。

下载3:OpenCV实战项目20讲

在「小白学视觉」公众号后台回复:OpenCV实战项目20讲即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。

交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~

实战:使用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. rcnn 回归_目标检测-从RCNN到Mask RCNN两步检测算法总结-火龙果软件

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

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

    作者:小白 来源:小白学视觉 Q 如何使用Mask-RCNN检测停车位可用性? 我最近做了一个项目,根据安全摄像头的照片来检测停车位是否可用或被占用.我的工作有局限性,我将进一步详细介绍这些局限性,但 ...

  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. React编写一个简易的评论区组件
  2. android界面怎么优化字符串,android应用性能优化
  3. Photoshop CC2018软件安装资料及教程
  4. Python基础 基本数据类型
  5. improve php,解析提高PHP执行效率
  6. [COGS 622] [NOIP2011] 玛雅游戏 模拟
  7. Lockdoor Framework:一套自带大量网络安全资源的渗透测试框架
  8. C语言课后习题(15)
  9. 五人合伙最佳股份分配_【干货要点】再谈“类直营”——百果园的店长合伙人...
  10. Spring-boot模块化编程
  11. 持续集成:什么应该自动化?
  12. Linux入门及安装教程
  13. 未来教育计算机一级ms百度云,未来教育全国计算机二级VFP
  14. 解决Windows无法加载中文(中国)-王码五笔输入法(任何输入法都行) 键盘的布局的方法...
  15. 苹果App Store商店中国区如何改为美国区
  16. 戴尔计算机进入安全模式后黑屏,电脑进入省电模式黑屏怎么恢复
  17. linux如何使用磁盘阵列卡,Linux的RAID磁盘阵列与阵列卡
  18. 五、SPR 单一职责
  19. Pycharm 实现本地与服务器代码同步
  20. scratch词语接龙 电子学会图形化编程scratch等级考试四级真题和答案解析2021-6

热门文章

  1. 刷新记录,算法开源!字节跳动获人体姿态估计竞赛双冠 | CVPR 2019
  2. 如何为回归问题选择最合适的机器学习方法?
  3. 2018 AI产业投融资分析:热钱涌向何处,谁的“寒冬”将至?
  4. 11月11日截止报名!快来参加顶尖极客汇聚的“AI Challenger 全球AI挑战赛”!
  5. 亚马逊科学家Nikko Ström:将人工智能助理日常化的梦想照进现实
  6. Uber自动驾驶汽车被赶出了亚利桑那,近300人被裁
  7. 首届“AIIA杯”人工智能巡回赛起航,5大赛区邀你来战
  8. 为什么不推荐使用uuid或者雪花id作为主键?
  9. Unsafe工具类的一些实用技巧,通往JVM底层的钥匙
  10. synchronized 的超多干货!