Py学习  »  机器学习算法

使用深度学习来理解道路场景

AI研习社 • 5 年前 • 291 次点击  

本文为AI研习社编译的技术博客,原标题 Road scene understanding using Deep Learning,作者为 Bogdan Djukic。

翻译 | 王祎    校对 | 陶玉龙     整理 |余杭


将语义分割的最终输出应用到道路识别场景中


  场景理解

语义分割是深度学习的方法之一,通过语义分割,我们可以对图片中的每一个像素赋予含义,即将像素划分到一个预先设定的类中。从上边的 GIF 图可以看出,我们在语义切分的过程中将像素分为两类(分别是道路和非道路),其中我们将识别为道路的部分标上了颜色。

通过语义分割的方法,我们可以根据特定的需求来将场景进行切分。通过这一点,汽车可以识别出当前场景下哪一块是可行驶区域,这一点对无人驾驶汽车来说尤为重要。


  工作原理

语义分割的方法之一就是使用全卷积网络(FCN),一篇来自于伯克利大学的论文很好地阐释了其原理和架构。我们接下来的实现就会基于这篇论文来展开。

传统的卷积网络是由卷积层和几个全连接层组合而成的。这类架构对于分类问题来说很有用(诸如:这是一条路吗?),但是对于需要在图片中定位道路这种问题(诸如:路在哪里?),我们就需要一个新的网络来维护这些特殊信息。这就是 FCN 产生的由来,也向人们传达了语义分割最先进的成果。


  如何构建 FCN

要构建 FCN,有以下三个要点:

  1. 将全连接层都替换为1x1卷积层

  2. 通过颠倒卷积层的顺序引入上采样

  3. 添加跳跃连接

接下来让我们详细地看看应该如何实现上述步骤。

我们的FCN架构包含两个部分:编码器和解码器

FCN 架构

对于编码器的构建,我们利用已在 ImageNet 数据集上预训练的 VGG16 模型进行编码,我们将 VGG16 模型上的全连接层全部用卷积来替代。编码器将图片中的特征抽取出来,并且把它应用在解码器中。

构建完编码器后,下一步就是构建解码器,解码器是通过转置卷积层,对编码器末层进行上采样来实现的。卷积转置本质上来说就是反向卷积

FCN架构是由预训练模型、全连接层替换和卷积转置构成的架构

在最后,我们会在某些特定的层之间添加跳跃层,其中这些特定层需要能够允许网络使用不同的像素大小。跳跃层在降低信息流失的同时也保证了网络可以很好地纵观整个图片。由于传统的卷积网络往往会聚焦于图片中的某一部分,因此添加跳跃层能够很好地提升切分效果。

FCN 中的跳跃连接

由于跳跃层的添加可能会极大地影响到模型的大小,因此添加的时候要谨慎一点。


  最终成果

利用 FCN 进行道路理解被作为 Udacity Self Driving nano degree program 项目的一部分而得以实现。其中我使用 Python 和 TensorFlow 构建并训练了模型。我的模型训练是在 NVIDIA 1080Ti 上进行的,训练 30 遍花了不到 1 个小时的时间。输出如下图:

  结论

相关代码可以参见我的 GitHub 主页:

bdjukic/CarND-Semantic-Segmentation
Contribute to CarND-Semantic-Segmentation development by creating an account on GitHub.github.com

原文链接:

https://towardsdatascience.com/road-scene-understating-using-deep-learning-c3610f6b1c4


点击文末【阅读原文】即可观看更多精彩内容:

在树莓派上实现人脸识别 

CV 届的金鸡百花奖:盘点我心中的 CVPR 2018 创意 TOP10

FAIR 最新视觉论文集锦:FPN,RetinaNet,Mask 和 Mask-X RCNN(含代码实现)


等你来译:

我是如何在 Python 内使用深度学习实现 Iphone X 的 FaceID的

用深度学习技术,让你的眼睛可以控制电脑

针对 3D 计算机视觉的简介


想知道关于计算机视觉更多知识?

欢迎点击“阅读原文”

或者移步 AI 研习社社区~


今天看啥 - 高品质阅读平台
本文地址:http://www.jintiankansha.me/t/f2icOvmDAU
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/22458
 
291 次点击