卷积神经网络(CNN)在无人驾驶中的应用


无人驾驶的感知部分作为计算机视觉的领域范围,也不可避免地成为CNN发挥作用的舞台。本文是无人驾驶技术系列的第八篇,深入介绍CNN(卷积神经网络)在无人驾驶3D感知与物体检测中的应用。

CNN简介

卷积神经网络(Convolutional Neural Network,CNN)是一种适合使用在连续值输入信号上的深度神经网络,比如声音、图像和视频。它的历史可以回溯到1968年,Hubel和Wiesel在动物视觉皮层细胞中发现的对输入图案的方向选择性和平移不变性,这个工作为他们赢得了诺贝尔奖。时间推进到上世纪80年代,随着神经网络研究的深入,研究人员发现对图片输入做卷积操作和生物视觉中的神经元接受局部receptive field内的输入有相似性,那么在神经网络中加上卷积操作也就成了自然的事情。当前的CNN相比通常的深度神经网络(DNN),特点主要包括:

  • 一个高层的神经元只接受某些低层神经元的输入,这些低层神经元处于二维空间中的一个邻域,通常是一个矩形。这个特点受到生物神经网络中receptive field的概念启发。
  • 同一层中不同神经元的输入权重共享,这个特点可以认为是利用了视觉输入中的平移不变性,不光大幅度减少了CNN模型的参数数量,还加快了训练速度。

由于CNN在神经网络的结构上针对视觉输入本身特点做的特定设计,所以它是计算机视觉领域使用深度神经网络的不二选择。在2012年,CNN一举打破了ImageNet这个图像识别竞赛的世界纪录之后,计算机视觉领域发生了天翻地覆的变化,各种视觉任务都放弃了传统方法,启用了CNN来构建新的模型。无人驾驶的感知部分作为计算机视觉的领域范围,也不可避免地成为CNN发挥作用的舞台。

无人驾驶双目3D感知

在无人车感知中,对周围环境的3D建模是重中之重。激光雷达能提供高精度的3D点云,但密集的3D信息就需要摄像头的帮助了。人类用两只眼睛获得立体的视觉感受,同样的道理能让双目摄像头提供3D信息。假设两个摄像头间距为B,空间中一点P到两个摄像头所成图像上的偏移(disparity)为d,摄像头的焦距为f,那么我们可以计算P点到摄像头的距离为:

所以为了感知3D环境得到z,需要通过双目摄像头的两张图像I_l和I_r得到d,通常的做法都是基于局部的图片匹配:

由于单个像素的值可能不稳定,所以需要利用周围的像素和平滑性假设d(x,y)≈d(x+α,y+β)(假设α和β都较小),所以求解d变成了一个最小化问题:

这和optical flow任务想要解决的是非常类似的问题,不过是(Il,Ir)变成了(It ,It+1),所以下面将要介绍的算法,两者都适用。

MC-CNN

现在来看看Matching-Cost CNN算法,这个算法使用了一个CNN来计算上式的右侧matchingcost,MC-CNN的网络结构见图1。

图1 MC-CNN的网络结构

这个网络的输入是两个图片的一小块,输出是这两块不匹配的概率,相当于一个cost函数,当两者匹配时为0,不匹配时最大可能为1。通过对一个给定的图片位置搜索可能的d取值,找到最小的CNN输出,就得到了这一点局部的偏移估算。MC-CNN算法接下来做了如下后期处理:

  • Cross-based cost aggregation:基本思想是对邻近的像素值相似的点的偏移求平均,提高估计的稳定性和精度。
  • Semi-global matching:基本思想是邻近的点的平移应该相似,加入平滑约束并求偏移的最优值。
  • 插值和图片边界修正:提高精度,填补空白。

最终算法效果如下:

图2 MC-CNN的算法效果

MC-CNN虽然使用了CNN,但仅限于计算匹配程度,后期的平滑约束和优化都是必不可少的,那有没有可能使用CNN一步到位呢?FlowNet就是这样做的。

FlowNet

为了实现端到端的模型结构,需要用CNN实现特征提取,匹配打分和全局优化等功能。FlowNet采取了encoder-decoder框架,把一个CNN分成了收缩和扩张两个部分。

图3 encoder-decoder的框架

在收缩部分FlowNet提出了两种可能的模型结构:

  • FlowNetSimple:把两幅图片叠起来输入到一个“线性”的CNN中,输出是每个像素的偏移量。这个模型的弱点是计算量大,而且无法考虑全局的优化手段,因为每个像素的输出是独立的。
  • FlowNetCorr:先对两幅图片分别进行特征的提取,然后通过一个相关层把两个分支合并起来并继续下面的卷积层运算。这个相关层的计算和卷积层类似,只是没有了学习到的特征权重,而是由两个分支得到的隐层输出相乘求和。

图4 FlowNetSimple与FlowNetCorr

FlowNet网络收缩部分不仅减少了CNN的计算量,同时起到了在图像平面上聚合信息的作用,这也导致分辨率下降。于是在FlowNet网络扩张部分使用 “up convolution”来提高分辨率,注意这里不仅使用了上一层的低分辨率输出,还使用了网络收缩部分相同尺度的隐层输出,如图5所示。

图5 FlowNet网络扩张

FlowNet算法在常见的公开数据集上都获得了不错的效果,值得一提的是它的速度很快。

无人驾驶物体检测

物体检测技术是无人驾驶感知必不可少的部分。自从2012年CNN在图片分类问题上的突破,物体检测自然是CNN应用的下一个目标,CNN的物体检测算法层出不穷,我们挑选比较有代表性的几个算法做介绍。

Faster R-CNN

CNN在物体识别领域大行其道之前,通常做法类似于DPM(Deformable Parts Model)这样的解决方案:在图像上抽取局部特征的组合作为模板,比如基于图像的空间梯度的HOG特征;为了能够处理形变,遮挡等变化,我们建立一个“弹性”的结构,把这些“刚性”的部分组合起来;最后加上一个分类器判断物体是否出现。这样的算法一般复杂度较高,需要大量经验,而且改进和优化难度较大。CNN的到来改变了一切。

R-CNN系列算法是一个两段式的算法,它把物体识别这个问题分为:

  • 物体可能所在区域的选择:输入一张图片,由于物体在其中的位置大小有太多可能性,我们需要一个高效的方法找出它们,这里的重点是在区域个数的一定上限下,尽可能找到所有的物体,关键指标是召回率。
  • 候选区域的识别:给定了图片中的一块矩形区域,识别其中的物体并修正区域大小和长宽比,输出物体类别和更“紧”的矩形框。这里重点在识别的精度。

在了解算法的大致架构后,来看看算法的具体实现,这里主要描述R-CNN这一系列算法的最新版:Faster R-CNN,它对应上面两步分为RPN(Region Proposal Network)和Fast R-CNN,接下来分别介绍。

RPN

我们称物体可能所在区域为候选,RPN(Region Proposal Network)的功能是最高效地产生一个候选列表。如图6,RPN选择以CNN为基础,图片通过多个(比如4)卷积层进行特征提取,在最后一个卷积层输出的特征图上使用一个3x3的滚动窗口连接到一个256或者512维的全连接隐层,最后再分支到两个全连接层,一个输出物体类别,一个输出物体的位置大小。为了能够使用不同的物体大小和长宽比,在每一个位置上考虑三个尺度(128x128, 256x256, 512x512)和三个长宽比(1:1, 1:2, 2:1)一共9种组合。这样一个1000x600的图片上考虑了(1000/16) × (600/16) × 9 ≈ 20,000种位置、大小和长宽比的组合,由于使用CNN计算,这一步耗时不多。最后根据空间重叠程度去掉冗余的候选区域,一张图片大约获得2000个左右的物体可能区域。

图6 Region Proposal Network

Fast R-CNN

在候选区域分类阶段,我们使用的是基于全连接的神经网络,如图7的右侧部分:

而左侧的特征提取部分可以重用RPN中的CNN计算结果,大大节约了计算时间,能达到5-17帧每秒的速度。

图7 Fast R-CNN

MS-CNN

虽然Faster R-CNN算法大名鼎鼎,但在物体尺度变化很大的场景,比如无人驾驶,它还有提升的空间,Multi-scale CNN(MS-CNN)正是针对这个问题的尝试。CNN的层级结构由于pooling层的存在自然形成了和不同尺度的一个对应关系。那为什么不把对物体的检测放到CNN的不同层里去呢?这正是MS-CNN的想法。

在选择物体候选区域阶段,MS-CNN使用了图8的网络结构,我们看到如果把CNN网络里的卷积层看成一个大树的“主干”,那么在conv3、conv4和conv5这三个卷积层之后,这个网络都长出了“分支”,每个“分支”都连接了一个检测层,负责一定的尺度范围,这样多个“分支”一起,就能覆盖比较宽的物体尺度范围,达到我们的目的。

在候选区域识别阶段,我们让上一阶段多个检测层的输出特征图分别输入到一个子网络里,这里有几个值得注意的细节:

图8 MS-CNN

  • 第一层是“Deconvolution”,目的是为了提高特征图的分辨率,保证物体检测的准确率,特别是对尺度偏小的物体。
  • Deconvolution之后,在抽取物体特征时(绿色框),同时还抽取了物体周边的信息(蓝色的框),这些“上下文”信息对识别准确率的提高有明显帮助。

总的来说,MS-CNN和Faster R-CNN相比,优势是识别的准确度有很大提高,尤其在物体尺度变化的情况下,比如KITTI数据集里面的行人和自行车。但是Faster R-CNN还是有速度的优势。

图9 MS-CNN

SSD

虽然Faster R-CNN的速度比之前的R-CNN已有很大提高,但还达不到实时的要求。Single Shot Detector(SSD)就是一个能够实时运行,有更佳准确度的算法,最近人气很高。SSD沿用了滑动窗口的思想,通过离散化物体的位置,大小和长宽比,使用CNN高效计算了各种可能的物体情况,从而达到了高速检测物体的目的。

图10 Single Shot Detector

如图10所示,SSD使用了VGG-16网络来做底层的图片特征提取,通过取消生成候选区域,缩放图片缩放和特征图采样的步骤,一步到位判断物体位置和分类,得到了高速的物体检测算法。

在VGG网络的基础上,SSD加入了逐步变小的卷积层,这些不同尺度的卷积层分别使用3x3大小的卷积核进行物体位置偏移和分类的判断,使SSD能够检测到不同大小的物体。

结论

无人驾驶的感知部分作为计算机视觉的领域范围,也不可避免地成为CNN发挥作用的舞台。CNN在无人驾驶中的应用主要包括3D感知与物体检测。在3D感知中使用到的网络包括MC-CNN与FlowNet, 在物体检测中使用到的网络包括Faster R-CNN、 MSCNN与 SSD。本文详细介绍了各种网络的优缺点,希望对各位在选择网络时有帮助。

作者简介:

  • 吴双,原百度研究院硅谷人工智能实验室资深研究科学家,美国研发中心高级架构师。研究方向包括计算机和生物视觉,互联网广告算法和语音识别,曾在NIPS等国际会议中发表文章。
  • 王江,百度研究院硅谷深度学习实验室资深研究科学家。曾在微软和Google研究院实习,他的工作在Google和百度的图像检索系统、人脸识别系统和大规模深度学习中均得到了广泛的应用。
  • 刘少山,PerceptIn联合创始人。加州大学欧文分校计算机博士,研究方向智能感知计算、系统软件、体系结构与异构计算。现在PerceptIn主要专注于SLAM技术及其在智能硬件上的实现与优化。

卷积神经网络(CNN)在无人驾驶中的应用相关推荐

  1. keras中文文档_【DL项目实战02】图像识别分类——Keras框架+卷积神经网络CNN(使用VGGNet)

    版权声明:小博主水平有限,希望大家多多指导. 目录: [使用传统DNN] BG大龍:[DL项目实战02]图像分类--Keras框架+使用传统神经网络DNN​zhuanlan.zhihu.com [使用 ...

  2. 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)

    卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习) 分享一些公式计算张量(图像)的尺寸,以及卷积神经网络(CNN)中层参数的计算. 以AlexNet网络为例,以下是该网络的参数结构图. A ...

  3. 卷积神经网络(CNN,ConvNet)

    卷积神经网络(CNN,ConvNet) 卷积神经网络(CNN,有时被称为 ConvNet)是很吸引人的.在短时间内,变成了一种颠覆性的技术,打破了从文本.视频到语音等多个领域所有最先进的算法,远远超出 ...

  4. 卷积神经网络(CNN)的简单实现(MNIST)

    卷积神经网络(CNN)的基础介绍见http://blog.csdn.net/fengbingchun/article/details/50529500,这里主要以代码实现为主. CNN是一个多层的神经 ...

  5. 大话卷积神经网络CNN,小白也能看懂的深度学习算法教程,全程干货建议收藏!...

    来源 | 程序员管小亮 本文创作的主要目的,是对时下最火最流行的深度学习算法的基础知识做一个简介,作者看过许多教程,感觉对小白不是特别友好,尤其是在踩过好多坑之后,于是便有了写这篇文章的想法. 由于文 ...

  6. 卷积神经网络(CNN)实现CIFAR100类别分类

    卷积神经网络(CNN)实现CIFAR100类别分类 1. CIFAR100数据集介绍 这个数据集就像CIFAR-10,除了它有100个类,每个类包含600个图像.,每类各有500个训练图像和100个测 ...

  7. 卷积神经网络(CNN)简介

    卷积神经网络(CNN)简介 多层的线性网络和单层的线性网络没有区别,而且线性模型的能够解决的问题也是有限的 1. 更复杂抽象的数据 一个单隐含层有更多的神经元,就能捕捉更多的特征.而且有更多隐层,意味 ...

  8. 一文看懂卷积神经网络-CNN(基本原理+独特价值+实际应用)

    http://blog.itpub.net/29829936/viewspace-2648775/ 2019-06-25 21:31:18 卷积神经网络 – CNN 最擅长的就是图片的处理.它受到人类 ...

  9. 卷积神经网络(CNN)反向传播算法

    在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结.在阅读本文前,建议先研究DNN的反向传播算法:深度 ...

  10. 卷积神经网络(CNN)前向传播算法

    在卷积神经网络(CNN)模型结构中,我们对CNN的模型结构做了总结,这里我们就在CNN的模型基础上,看看CNN的前向传播算法是什么样子的.重点会和传统的DNN比较讨论. 1. 回顾CNN的结构 在上一 ...

最新文章

  1. StructureMap 代码分析之Widget 之Registry 分析 (1)
  2. 关于Visual C++ 2008中wprintf和wprintf_s输出中文乱码问题
  3. 动图 + 源码,演示 Java 中常用数据结构执行过程及原理
  4. ThinkPHP- 3.1
  5. Linux PWN从入门到熟练
  6. Cocos2d-x 3.x如何通过WebSocket连接服务器进行数据传输
  7. 完整的 .NET Core 目标框架的预处理器符号列表
  8. 推荐几家域名注册服务商 附个人意见
  9. 从0到1打造一款react-native App(二)Navigation+Redux
  10. 怎么用计算机excel计算矩阵,怎样用EXCEL进行矩阵计算?
  11. 遗传算法的简介与应用详细过程
  12. MySQL基础命令汇总
  13. “三只松鼠”为何一天能卖一亿元
  14. React-Native之轮播组件汇总 以及looped-carousel的介绍与使用
  15. 动态路由 华三nat 静态路由_史上最详细H3C路由器NAT典型配置案例
  16. 【show me the code】Python练习题语法笔记 1
  17. api有哪些 javasocket_Java Socket编程以及与Linux Socket API关系
  18. 盘点手机、全景相机、专业单反VR全景拍摄的优缺点
  19. 单片机多功能电子琴课设_基于单片机的电子琴设计(最终版)最新版
  20. Error during WebSocket handshake: Unexpected response code: 200 错误解决

热门文章

  1. android 之RadioButton单选控件
  2. android studio m1,Android Studio 4.0发布 为Android 11做好准备
  3. 二分法细节学习-mid
  4. VC包含目录、附加依赖项、库目录及具体设置
  5. window下Java的环境变量的配置
  6. MySQL如何向表中增加、修改字段
  7. (经典)Hibernate多对一关系映射(四)
  8. java swing面试题_Java面试题之AWT、Swing
  9. LeetCode题组:第169题-多数元素
  10. 【图像处理opencv】_Jupyter基本操作