65.9K
CodeProject 正在变化。 阅读更多。
Home

科技能取代眼睛吗?

emptyStarIconemptyStarIconemptyStarIconemptyStarIconemptyStarIcon

0/5 (0投票)

2017年4月12日

CPOL

15分钟阅读

viewsIcon

15340

基于本文涵盖的主题和引用的示例,希望您相信,尤其是那些模仿人脑和人眼的科技进步,正在快速发展,并可能很快取代人眼。

数据远不止数字

数据是我们有效传达故事的工具。数据是我们做出明智决策的工具。

伽利略对数据分析有着前所未有的深刻理解。他在 1610 年观测了昴星团。肉眼可以看到六颗明亮的星星,如果天气非常黑暗且视力极佳,最多可以看到九颗。使用望远镜,伽利略在这些六颗明亮的星星之间数出了四十多颗更暗淡的光点。在他的星团素描中,他记录了 36 颗恒星的位置,并为自古以来就已知的恒星画了轮廓。

伽利略本质上是在使用*数据点*和*数据属性*进行*数据模式分析*,将恒星*分类*为明亮和昏暗的恒星,并最终将这些明亮的恒星分类为星座。

方法相同,只是现在有了更多的数据点、更复杂的属性,以及机器引导的分类,这正是我们今天常研究的数据科学和机器学习。

图 1. 伽利略的昴星团素描。(图片来源:Octavo Corp./Warnock Library。)

数据科学热潮

顾名思义,数据科学是对数据进行研究:关于信息来源的数据,关于此信息含义和相关性的数据,以及对隐藏在此宝贵信息背后的价值进行的分析。

组织可以通过挖掘大量结构化和非结构化数据点来识别模式,从而提取高业务价值。数据分析和数据科学旨在从经验中学习。数据不仅可以帮助我们了解过去发生的事情,还可以帮助我们了解为什么会发生。在许多情况下,这些知识可以指导我们预测未来,从而有效地管理未来。

从降低成本到提高效率,再到释放新机遇、拓展业务和客户生命周期价值,恰当进行的数据科学是提高组织竞争优势的强大工具。难怪我们在全球范围内的技术和商业组织中都看到了对数据科学日益增长的兴趣。

但更好的分析需要更好的推理。更好的推理需要更好的思考,而这反过来又需要更好的工具、更好的模式识别和更好的算法。

在本文中,我们将介绍一些核心数据科学概念,然后介绍数据科学原理的应用——图像分类器,并重点关注车辆分类器,您将能够使用它来解决类似复杂度的模式识别问题。

核心概念

在深入探讨图像分类器之前,让我们先了解一些核心的数据科学概念和术语。

分类器

分类器是数据挖掘中的一种工具,它接收代表我们想要分类的事物的各种数据,并尝试预测新数据属于哪个类别。

以包含一组电子邮件的数据集为例。我们知道每封电子邮件的某些属性,例如发件人、日期、主题、内容等。使用这些属性,我们可以识别一个人收到的电子邮件的两种或多种类型(类别)。此外,通过电子邮件的这些属性,我们可以预测收到的电子邮件的类别。执行此类分类的数据科学算法称为分类器。

分类器使用这些属性自动为用户分类电子邮件。Gmail* 是一个很好的例子,它提供了自动分类功能;例如,促销、垃圾邮件、社交媒体更新或普通电子邮件。

监督学习

监督学习算法分析训练数据并生成一个推理函数,该函数可用于映射新的示例。

在这种方法中,数据模式是从*标记的训练数据*中*推断*出来的。

为了训练模型,我们将数据集和相应的正确答案馈送给模型。模型训练完成后,它就可以预测未来值。

使用多个现有数据点来定义预测未来值的简单规则;这也称为启发式或基于规则的模型。

无监督学习

数据建模的另一种方法是让数据决定该做什么。在这种方法中,大量数据点被输入到机器中,机器反过来会根据复杂的分析和模式识别技术建议潜在的信息集群。

这种通过学习大数据中的复杂决策规则来*以编程方式*做出智能决策的能力,是机器学习的主要卖点。

随着机器学习的发展,监督学习技术的预测准确性得到了极大的提高,尤其是深度学习。这些人类非监督学习技术现在产生的分类器在许多任务上的表现优于人类的预测准确性。

这些无监督模型现在被广泛应用于生活中的许多方面。它们使我们能够猜测个人对电影的评分(Netflix*),对图像进行分类(Like.com*、Facebook*),识别语音(Siri*)等等!

神经网络

神经网络是一种编程范例,其灵感来自于我们大脑和神经系统(神经元)的结构和功能,它使计算机能够从观察性数据中学习。

神经网络的目标是做出决策,从而像人脑一样解决问题。现代神经网络项目通常处理几千到几百万个神经单元和数百万个连接,这仍然比人脑的复杂性低几个数量级,并且接近蠕虫的计算能力。

神经计算机的发明者之一 Robert Hecht-Nielsen 博士在 Maureen Caudill 的《神经网络入门:第一部分》(AI Expert,1989 年 2 月)中将神经网络描述为*“一个由许多简单、高度互连的处理单元组成的计算系统,它们通过对外部输入的动态状态响应来处理信息。”*

神经网络按层组织,由大量互连的*节点*组成,这些节点包含*激活函数*。

  • 模式通过*输入层*呈现给网络。
  • 输入层连接到一个或多个*隐藏层*,其中通过*加权连接*系统进行实际处理。
  • 然后,隐藏层连接到*输出层*,在那里输出答案。

神经元

神经元是人脑的基本工作单元。它是一种专门的细胞,用于向其他神经、肌肉或腺体细胞传递信息。

在神经网络的编程世界中,这些生物神经元被模拟为称为节点或人工神经元的互连和交互组件。它们接收输入数据,对数据执行简单操作,然后选择性地将结果传递给其他神经元或节点。

人工神经元的类型可能有所不同,具体取决于模型的类型。*感知器*和*sigmoid 神经元*是两种常用的。

深度学习

神经网络可以是浅层的或深层的,具体取决于它们拥有的层数。上图显示了一个输入层、两个隐藏层和一个输出层。网络也可以有多个隐藏层。中间层可以用于构建多层抽象,就像我们用布尔电路做的那样。

深度学习是在神经网络中进行学习的一套强大的技术,当我们在其中创建多层抽象时。

例如,要构建一个用于视觉形状识别的网络,第一层的神经元可以学习识别边缘,第二层的神经元可以学习识别角度,下一层可以进一步识别复杂形状,如三角形、圆形或矩形,而另一层可以利用这些信息来识别最终对象,例如滑板或自行车。

直观地说,我们期望具有更多隐藏层的深度网络比浅层网络更强大。然而,训练深度网络可能相当具有挑战性,因为每个隐藏层的学习速度不同。例如,在称为*梯度消失问题*的现象中,早期层的神经元学习速度比后期层的神经元慢得多。因此,虽然区分三角形、正方形或圆形可能更容易,但学习区分边缘和角度可能更困难。

案例研究:图像分类器

图像识别

人脑非常强大。人眼也是如此!我们的视觉系统可以说是世界上最被低估的奇迹。

考虑这些数字

我们大多数人可以毫不费力地将这些数字识别为 8754308。然而,这种轻松是欺骗性的。我们大脑的每个半球都有一个称为 V1 的主要视觉皮层,其中包含 1.4 亿个神经元和它们之间数十亿个连接。此外,人类视觉不仅涉及一个视觉皮层,而是涉及一系列视觉皮层,它们执行的图像处理越来越复杂。此外,我们视觉系统中的这个超级计算机已经过了数亿年的训练(进化),以适应我们的视觉世界。

这个强大的图像处理器——我们的眼睛,可以区分苹果和熊,狮子和美洲虎,阅读无数标志,感知颜色,并进行各种模式识别。虽然这对我们的大脑来说似乎很容易,但实际上用计算机解决这些问题非常困难。

数据分析、数据科学和机器学习的这些进步是通过复杂的处理模型实现的。一种能够有效处理困难的视觉识别任务的模型类型称为深度*卷积神经网络*。

卷积神经网络

卷积神经网络是一种神经网络,它使用相同的神经元的多个相同副本,允许网络保持实际参数的数量较少,同时使其能够拥有表达计算量大的模型所需的数量众多的神经元。

这种架构特别适合图像分类,因为这种架构使神经网络能够快速训练。更快的训练速度有助于训练网络中较深的(多的)层,而这些层对于识别和分类图像至关重要。

应用:车辆分类器

为了构建我们的模型,我们使用了 TensorFlow*,这是一个用于使用数据流图进行数值计算的开源软件库。

训练集

构建图像分类器的第一步是构建一个训练数据集。在构建训练数据时需要考虑的一些事项包括:

  • 我们拥有的图像越多,训练模型的准确性可能就越高。至少,每种对象类型至少要有 100 张图像。
  • 注意训练偏差。如果一张图像中花园里有一棵树,另一张图像中路边有一棵树,那么训练过程可能会基于背景而不是重要的特定对象特征来做出预测,因为它会拾取图像中的共同点。因此,尽可能在各种不同的情况下拍摄图像:不同的地点、时间、来自不同的设备等。
  • 将训练数据分成细粒度和视觉上不同的类别,而不是涵盖许多不同物理形态的大类别;否则,您可能会得到没有意义的抽象对象。
  • 最后,确保所有图像都已正确标记。

以下是我们数据集中的一些示例

图 2:随机的巴士图像。

图 3:随机的汽车图像。

图 4:随机的自行车图像。

图 5:随机的摩托车图像。

为了构建我们的车辆分类器,我们从 ImageNet* 下载了大约 500 张四种不同类型的车辆——汽车、自行车、巴士和摩托车——的图像。

训练模型

接下来,我们指向我们的脚本,选择这些随机选择的图像来训练模型。

目标识别模型有时需要数周时间才能训练,因为它们可能有数千个参数。一种称为*迁移学习*的技术可以大大缩短这项工作,它通过采用预先存在的、针对一组类别(如 ImageNet)完全训练好的模型,然后使用现有权重为新类别重新训练它。

我们利用这项技术来训练我们的模型。

在此案例研究中,我们也只从头开始保留了最后一层;其他层则保持不变。我们移除了旧的顶层,并在我们的车辆照片上训练了一个新的顶层,这些照片中没有一张属于完整网络所训练的原始 ImageNet 类别。使用这些迁移技术,先前用于区分一组对象的底层现在可以用于替代识别任务,只需很少的更改。

验证模型

在我们训练(拟合)模型以适应样本图像时,我们还需要测试模型在不在样本集中的图像上的效果。毕竟,这正是我们车辆分类器的全部目标!

因此,我们将图像分成了三个不同的集合。

  1. 训练集——用于训练网络的图像,其结果用于更新模型的权重。我们通常分配 80% 的图像用于训练。
  2. 验证集——在训练模型时,这些图像用于频繁验证模型。通常,10% 的数据用于此。
  3. 测试集——不经常用作测试集,用于预测分类器的实际性能。

TensorFlow 命令

以下是我们用于 TensorFlow 迁移学习功能的命令。

先决条件

- Install bazel ( check tensorflow's github for more info )
    Ubuntu 14.04:
        - Requirements:
            sudo add-apt-repository ppa:webupd8team/java
            sudo apt-get update
            sudo apt-get install oracle-java8-installer
        - Download bazel, ( https://github.com/bazelbuild/bazel/releases )
tested on: https://github.com/bazelbuild/bazel/releases/download/0.2.0/bazel-0.2.0-jdk7-installer-linux-x86_64.sh
        - chmod +x PATH_TO_INSTALL.SH
        - ./PATH_TO_INSTALL.SH --user
        - Place bazel onto path ( exact path to store shown in the output)

注意: Bazel 帮助我们从命令行运行 TensorFlow。

训练模型

我们按如下方式准备了文件夹结构

- root_folder_name
        - class 1
            - file1
            - file2
        - class 2
            - file1
            - file2
- Clone tensorflow
- Go to root of tensorflow
- bazel build tensorflow/examples/image_retraining:retrain
- bazel-bin/tensorflow/examples/image_retraining/retrain --image_dir /path/to/root_folder_name  --output_graph /path/output_graph.pb -- output_labels /path/output_labels.txt -- bottleneck_dir /path/bottleneck

每个类别(Class1Class2)代表一个车辆类型,如汽车、巴士等。每个文件都是该类型的图像。我们在这里将 TensorFlow 模型指向了图像文件夹。

通过 Bazel 测试

bazel build tensorflow/examples/label_image:label_image && \
bazel-bin/tensorflow/examples/label_image/label_image \
--graph=/path/output_graph.pb --labels=/path/output_labels.txt \
--output_layer=final_result \
--image=/path/to/test/image

为此,我们使用了另一个名为 Label* 的 TensorFlow 程序。它是 TensorFlow 目录中的一个 C++ 程序。

结果

我们用几张图像测试了模型。附上每种类型的示例图像以及我们从该模型得到的结果。

I tensorflow/examples/label_image/main.cc:205] car (0): 0.729847
I tensorflow/examples/label_image/main.cc:205] motor bike (1): 0.140029
I tensorflow/examples/label_image/main.cc:205] bicycle (2): 0.0864567
I tensorflow/examples/label_image/main.cc:205] bus (3): 0.0436665

这意味着模型以 72% 的置信度预测这张图像为汽车。

I tensorflow/examples/label_image/main.cc:205] bus (3): 0.933695
I tensorflow/examples/label_image/main.cc:205] car (0): 0.0317426
I tensorflow/examples/label_image/main.cc:205] motor bike (1): 0.0192131
I tensorflow/examples/label_image/main.cc:205] bicycle (2): 0.0153493

正如我们所见,模型以 93% 的置信度预测这张图像为巴士;只有 1.9% 的置信度表明它可能是摩托车。

I tensorflow/examples/label_image/main.cc:205] bicycle (2): 0.999912
I tensorflow/examples/label_image/main.cc:205] car (0): 4.71345e-05
I tensorflow/examples/label_image/main.cc:205] bus (3): 2.30646e-05
I tensorflow/examples/label_image/main.cc:205] motor bike (1): 1.80958e-05

I tensorflow/examples/label_image/main.cc:205] motor bike (1): 0.979943
I tensorflow/examples/label_image/main.cc:205] bicycle (2): 0.019588
I tensorflow/examples/label_image/main.cc:205] bus (3): 0.000264289
I tensorflow/examples/label_image/main.cc:205] car (0): 0.000204627

一种新的可能性

互联网的发展使知识触手可及。社交媒体使我们能够轻松地随时随地与彼此保持联系。现在,随着机器学习现象的发展,在许多领域都涌现出一种新的*可能性*。

让我们看看一些应用于车辆的图像分类应用!

收费站

汽车自动收费已不再罕见。但您是否注意到收费桥梁上有单独的、通常很长的卡车通道?

对于汽车、SUV、卡车或其他车辆类型,收费通常是不同的。技术使得通过传感器自动检测费用成为可能。为什么不通过对收费金额进行分类来进一步扩展这种便利呢?汽车收费 5 美元,卡车收费 25 美元……全部自动化。

自动驾驶汽车

Google* 和 Uber* 正在积极研发自动驾驶汽车。想象一下,未来道路上充满了自动驾驶汽车。在有行人上路的车辆中,我们至少可以依靠我们的视觉系统来小心地绕过无人驾驶汽车或鲁莽驾驶的汽车。

但是,当眼睛中居住的超级计算机不再关注它们时,我们就需要一个车辆分类器来帮助自动驾驶汽车区分道路上的交通类型!

我们的安全

FBI、警察部门和许多安全公司今天都在保护我们和我们的国家。

即使在日常生活中,我们也会在高速公路上看到关于载有被绑架儿童或其他情况的车辆的琥珀警报。

想象一下,这项搜索是以一种完全自动化的方式进行的,就像科幻电影中建议的那样,但现在通过结合谷歌地图、基于数据科学的图像识别和车辆分类算法,这已成为一种现实的可能性。

停车

停车是一个日益严峻的问题,尤其是在城市。凭借强大的车辆分类器,我们可以想象出完全自动化且高度高效的停车系统,特定区域和楼层专门用于特定类型的车辆。跑车需要较低的高度,而运动型卡车则体积庞大。每层的门可以使用车辆检测传感器,只允许特定类型的车辆进入停车场。通过节省的几英寸空间,可以在同一空间内停放更多汽车!

结论

这些例子只是一个开始。我们期待听到您在释放数据中隐藏的力量时所做的改进和遇到的复杂性。

无论如何,基于本文涵盖的主题和引用的示例,希望您和我们一样相信,尤其是那些模仿人脑和人眼的科技进步,正在快速发展,并可能很快取代人眼。自动化将取代手动任务,尤其是在涉及可视化和分类的重复性任务方面。

然而,人脑结构和我们复杂的视觉系统仍然是我们有待揭开的谜团,随着我们不断了解更多关于它的信息。

参考文献

"第一章" Nielsen, Michael, Neural Networks and Deep Learning, 2016 年 1 月,访问日期:2016 年 10 月 23 日。

可视化和理解卷积网络” Zeiler, Matthew, and Fergus, Rob, 2013 年 11 月,访问日期:2016 年 10 月 23 日。

图像识别” TensorFlow 教程,2016 年 12 月,访问日期:2016 年 10 月 23 日。

人工神经元” Wikipedia, Wikimedia Foundation, 2016 年 10 月,访问日期:2016 年 10 月 23 日。

神经网络结构” 神经网络在射频和微波设计中的应用,IEEE.CZ。

如何为新类别重新训练 Inception 的最后一层” TensorFlow 教程,2016 年 12 月,访问日期:2016 年 10 月 30 日。

© . All rights reserved.