如何用点云对车辆和行人进行识别分类?这是MIT学生的总结

简介:
本文来自AI新媒体量子位(QbitAI)

57e615afe1bb774802a357ac94b479aa7aef45af

本文作者是MIT的大二学生Michael Gump(阿甘),内容为他在无人车公司Voyage的工作总结。本文还得到Voyage首席执行官Oliver Cameron的推荐。

作为一名计算机专业的学生,我一直对机器学习特别是强化学习很感兴趣,特别喜欢琢磨OpenAI的相关研究。去年冬天,我还参加了一门无人车的课程,从这个时候开始,自动驾驶汽车这个领域一直让我感到特别兴奋。

三个月前,我加入了Voyage的深度学习实习项目。Voyage是一家从Udacity剥离出来的初创公司,致力于研发自动驾驶出租车。

在学校里能学到很多知识,但并不能让你了解真实的世界。在Voyage实习的这段期间,不但帮我弥补了教育中的缺失,而且我真的有机会接触到最酷的产品。在这里,我准备把我这段时间的收获分享给大家。

我的工作

这个夏天的实习中,我一直在研究计算机视觉相关的几个问题,阅读了很多论文并且训练了不少模型。大部分时候,我一直都是用公开数据集,对激光雷达(LiDAR)数据进行分类识别。数据集地址如下:

http://www.cvlibs.net/datasets/kitti/index.php

http://cs.stanford.edu/people/teichman/stc/

当人类观察世界的时候,可以自动的感知深度,并且能够识别出道路上是一辆车还是一个行人。怎么能让无人车也做到这一点?过去几个月我的大部分工作,就是想办法让Voyage的自动驾驶出租车对车辆和行人进行分类。

我使用的工具是三维视图(LiDAR点云)+深度学习。

962444909120748c0687dc7a1df9b0118f144aad

 这个分类器模型正确的把汽车标为绿色,行人标为红色

物体分类识别

对于一辆无人车来说,它需要采集原始的传感器信息(例如点云),然后还得搞清楚到底看到了什么。这其中最重要的是如下两个问题。

  • 距离:离我撞上这个物体还有多远
  • 类别:我看到的究竟是个什么

解决这个问题,既可以设计传感器直接获取相关信息,也可以从现有的传感器中提取所需信息。对于距离这个问题,激光雷达是现在最好的传感器。除非特别“勇敢”,一般搞无人车不会绕过这个关键的设备。

然而对于分类(识别车辆、行人)这个问题,并不能通过传感器直接获知结果,需要我们研发算法来实现,这也就是我这个夏天的主要工作。

88d7527985a82194eab6761401bc28ff421bd557

 黑白图像是LiDAR数据,然后增加分类信息(绿色代表行人,蓝色代表车辆)

从人类的视角来看,这些都是很简单的问题。但请注意,人类已经有数百万年的发展进化历史。怎么才能在短时间内让无人车也具备同样的能力?如果你不是外行就该知道,这个问题的答案是:CNN,卷积神经网络。

在很多难题上CNN都给出了惊人的结果,只需要一些微调,这个神经网络就能很好的用来处理LiDAR数据。

然而,一个深层卷积网络可能不是我们最好的选择。我们系统的一个关键要求,是必须要以很高的帧率运行。也就说我们需要构建一个实时运行的系统,因此必须得选择一个可以快速得到良好效果的解决方案。

虽然CNN可以识别图像中的复杂模式,但通常速度很慢。所以这个夏天我花了大部分时间来寻找一个替代方案。其中一个替代方案是手动挑选与物体类别高度相关的物理特征信息,也就是对我们的模型进行一些特征工程。

在这个过程中,我的导师教会了我一件事:实验、实验、实验。

我的成果

这个夏天我的收获之一,就是学会使用一个很棒的快速可视化工具。在Vispy的帮助下,我对大量的点云进行了有序的可视化,然后在类似真实世界的环境中对模型进行调试。我这次实习的另一个收获是,直接从模型的损失曲线中很难看出问题。

(Vispy地址:http://vispy.org/

我用了PyTorch来训练和验证我的模型。我之前对PyTorch不熟,但现在它成为我最喜欢的深度学习框架。虽然PyTorch没有TensorFlow那么多的特性,但是更容易上手。

(插播一个量子位之前的报道:《PyTorch还是TensorFlow?》)

我搭建的模型之一,是一个编码解码器(Encoder-Decoder)网络,能够对多个通道的输入数据进行分类预测。从这些嘈杂的预测中,我们可以推断出面前物体的真实类别。这种模型非常强大,可以对某些传感器和处理错误免疫。

例如,依靠对象大小和形状进行分类的模型很容易出现检测错误。而编码解码器模型可以通过识别场景中的模式并直接转变为预测来回避这样的问题。

1e1e89d27be7996fd0d0d6e9f14b2c2e737bf4b6

c59b6b3c3cade189770370f20a530c5c7b30c0ed

 工作中的编码器-解码器模型。模型还很粗糙。

我上述工作参考了以下的论文:

《Multi-View 3D Object Detection Network for Autonomous Driving》

https://arxiv.org/abs/1611.07759

《LIDAR-based 3D Object Perception》

https://pdfs.semanticscholar.org/2c45/03c72ba7f53f3385859bd5e6311c58e73905.pdf

本文作者:问耕
原文发布时间:2017-08-25
相关文章
|
程序员 测试技术
程序员的“Bug之旅”:为何无法一次性写出完美代码?
程序员在软件开发过程中难以一次性写出完美代码,需要不断修改和调试,即“改Bug”,这是由多个因素共同作用的结果。技术层面的复杂性、管理和流程上的不足以及个人能力和认知的局限性都是导致这一现象的重要原因。然而,这并不意味着无法避免或改进。通过加强需求管理、建立有效的版本控制和测试机制、推动团队知识共享以及鼓励代码审查和自我反思等措施,可以降低改Bug的频率和成本,提高软件开发的效率和质量。辩证地看待这一问题,既要理解其存在的合理性,也要积极寻求改进之道,以实现更好的产品和服务。
625 2
|
1月前
|
人工智能 搜索推荐 Linux
OpenClaw(Clawdbot)阿里云+本地部署,零成本搭建私人AI管家+多平台接入每天省8小时
很多人在用ChatGPT时都会陷入两难:功能强大但需要付费、翻墙,还不能直接连接微信等常用平台,更无法实现定时提醒、自动执行代码等个性化需求。而OpenClaw(曾用名Clawdbot、Moltbot)的出现,彻底解决了这些痛点——它是一款开源AI智能体框架,相当于给AI装上了“实体”,能连接微信、Discord等平台,支持联网搜索、代码执行、定时任务,只要有一台服务器,就能24小时免费为你工作。
554 1
|
Python
【python自动化】Playwright基础教程(五)事件操作②悬停&输入&清除精讲
【python自动化】Playwright基础教程(五)事件操作②悬停&输入&清除精讲
661 0
|
4月前
|
IDE Java 开发工具
JetBrains IntelliJ IDEA 2025.3 发布 - 领先的 Java 和 Kotlin IDE
JetBrains IntelliJ IDEA 2025.3 (macOS, Linux, Windows) - 领先的 Java 和 Kotlin IDE
512 0
|
存储 编解码 开发工具
拉取RTSP流后的几个去向探讨(播放|转RTMP|轻量级RTSP服务|本地录制|GB28181)
本文汇总了大牛直播SDK在Android平台上拉取RTSP流后的多种应用方向,包括本地播放、转推至RTMP服务器、轻量级RTSP服务、GB28181平台及录像等功能。提供了详细的实现方法与示例代码,旨在帮助开发者高效利用RTSP流数据,实现低延迟、稳定且灵活的应用场景。
703 1
|
存储 机器学习/深度学习 缓存
APM-Elastic Stack 实战手册
应用程序性能管理(Application Performance Management)简称 APM。主要功能为监视和管理软件应用程序性能和可用性。
3435 0
APM-Elastic Stack 实战手册
|
编解码
Open3D Voxelization 体素化
Open3D Voxelization 体素化
663 1
|
搜索推荐 算法 UED
基于Python的推荐系统算法实现与评估
本文介绍了推荐系统的基本概念和主流算法,包括基于内容的推荐、协同过滤以及混合推荐。通过Python代码示例展示了如何实现基于内容的推荐和简化版用户-用户协同过滤,并讨论了推荐系统性能评估指标,如预测精度和覆盖率。文章强调推荐系统设计的迭代优化过程,指出实际应用中需考虑数据稀疏性、冷启动等问题。【6月更文挑战第11天】
2482 3
|
设计模式 算法 编译器
【C++ 泛型编程 入门篇】C++ 元编程 :模板结构体的的使用教程
【C++ 泛型编程 入门篇】C++ 元编程 :模板结构体的的使用教程
848 1