ARCore之路-计算机视觉之机器学习(一)

版权声明:David Wang原创ARCore文章,仅供学习研究之用,不得用于任何商业目的,未经授权不得转载! https://blog.csdn.net/yolon3000/article/details/84349150

  在前面的章节中,我们看到了我们的设备如何在ARCore的帮助下,跟踪用户,了解用户的世界,并叠加虚拟的物体到真实世界中。ARCore使用设备的传感器和摄像头作为输入,不断更新对环境的理解,营造出了良好的虚拟现实混合的效果。但是,我们也提及到,如果我们仅仅停留在这一层面,将无法形成大规模的应用,因为我们没有能解决计算机视觉方面的问题。在5年前,这似乎都是一项不可能完成的任务。但是随着人工智能(AI,Artificial Intelligence)技术的发展,特别是深度学习(Deep Learning)技术的发展,计算机视觉技术也迎来了新的纪元,Google公司的Tensorflow、Facebook的Pytorch等等,许多公司已经开始开放机器学习源代码,并提供他们的工具,大大的方便了我们的学习。我们接下来将利用当前最先进的AI技术来助力AR应用。接下来我们将学习:

  • 机器学习(Machine Learning, ML)
  • 深度强化学习(Deep reinforcement learning)
  • 神经网络(Neural Network)
  • ML-Agents
DavidWang原创

一、机器学习

  机器学习是一门非常先进的学科,需要多年的学习才能运用自如。我们将学习一些基本的技术,读者可以通过更多的学习或实现自己的解决方案来扩展这些技术。
  机器学习是一个广泛用于人工智能和相关计算机预测分析模型的术语。机器学习(Ml)是人工智能的一个领域,它使用统计技术使计算机系统能够从数据中“学习”(例如,逐步提高在特定任务上的性能),而无需显式编程。机器学习这个名字是1959年阿瑟·塞缪尔(Arthur Samuel)发明的。机器学习探索了能够从数据中学习并对数据做出预测的算法的研究和构造,这种算法通过进行数据驱动的预测或决策来克服严格的静态程序指令。通过建立样本输入模型,机器学习被应用于一系列计算任务中,在这些任务中,设计和编程性能良好的显式算法是非常困难或不可行的;例如,应用程序包括电子邮件过滤、网络入侵者的检测和计算机视觉。这里的机器显然是指计算机或其他设备,而学习倾向于表示一种算法或模型,该算法或模型将随着时间的推移而进化或学习。然而,在许多机器学习模型中,情况往往并非如此。因此,就我们的目的而言,我们将使用更广泛的机器学习术语来指任何可以训练以识别AR中环境或环境部分的工具或算法,从而使我们,即开发人员,能够更好地识别环境或环境的一部分。
  机器学习是一个很大的领域,而且还在不断的扩展中,对我们而言,我们更关注的是以下具体问题:

  • 目标检测(Target detection)
      目标检测一直是AR应用程序的主要跟踪和参考点。在摄像机获取的图像中作目标检测也是最基本的需求。

  • 图像识别(Image recognition)
      图像识别就是对当前摄像机获取的图像信息与数据库中的图像信息进行对比识别。

  • 物体识别(Object detection)
      能够从点云数据中检测到3D中的物体对象,这并不是一件容易的事,但正处于高速发展中。

  • 人脸识别(Face detection)
      在图像中检测人脸已经得到了大规模的应用,在许多应用程序中已经产生了很大的影响。

  • 人形检测(Person detection)
      在图像中探测静态或者动态的人形。

  • 手势检测(Hand/Gesture detection)
      手势检测指在设备的摄像头前检测到用户的手部动作或手势。与触摸手势完全不一样。手势检测是进行AR手势操作的基础。

  • 姿态检测(Pose detection on object)
      与目标检测相关,指检测目标的位置和方向。

  • 光源识别(Light source detection)
      能够根据真实环境的光照信息,在场景中重建的灯光,使虚拟对象的渲染更加逼真。

  • 环境识别(Environment detection)
      对用户环境进行检测与理解,在测绘建筑物或其他没有全球定位系统的地点有很大的应用,这适用于大多数室内空间。

  这些问题中的每一个都可能需要不同的工具和技术来解决。在机器学习中,模型的大小和性能上的差异可能是至关重要的。这里我们重点要提一下OpenCV,这是一个成熟的底层API,用于Android,商业版本已经移植到Unity,尽管如此,使用它仍然需要更底层的知识;Google TensorFlow,目前Tensorflow还处于起步发展阶段,但很快就成了CNN的平台标准,为方便C#调用,也已经有TensorFlowSharp。使用它也需要底层知识与更高级的理念。

二、深度强化学习

  传统的预测模型,如线性回归,并不能很好的支持扩展,因为它们总是需要使用所有可用的点或数据来计算整个解决方案。这些类型的技术或模型没有记忆、学习和改进的能力,它们通常被归类为受监督的模型。这导致了更高级的学习模型(称为强化学习(ReforcementLearning,RL)的发展。事实上,深度学习和深度强化学习技术在性能和精度上比统计方法高出几个数量级。深度强化学习将深度学习的感知能力和强化学习的决策能力相结合,可以直接根据输入的图像进行控制,是一种更接近人类思维方式的人工智能方法。由于卷积神经网络对图像处理拥有天然的优势,将卷积神经网络与强化学习结合处理图像数据的感知决策任务目前是最热门的研究方向。

  深度增强学习是将深度学习与增强学习结合起来从而实现从Perception感知到Action动作的端对端学习的一种全新的算法。简单的说,就是和人类一样,输入感知信息比如视觉,然后通过深度神经网络,直接输出动作,中间没有hand-crafted工作。深度增强学习具备使机器人实现完全自主的学习一种甚至多种技能的潜力。

  虽然将深度学习和增强学习结合的想法在几年前就有人尝试,但真正成功的开端是DeepMind在NIPS 2013上发表的Playing Atari with Deep Reinforcement Learning一文,之后DeepMind在Nature上发表了改进版的DQN文章,引起了广泛的关注。而Hinton,Bengio及Lecun三位专家在Nature上发表的Deep Learning 综述一文最后也将Deep Reinforcement Learning作为未来Deep Learning的发展方向。

DavidWang原创

三、神经网络

  人工神经网络(Artificial Neural Networks,简写为ANNs)也简称为神经网络(NNs)或称作连接模型(Connection Model),它是一种模仿动物神经网络行为特征,进行分布式并行信息处理的算法数学模型。这种网络依靠系统的复杂程度,通过调整内部大量节点之间相互连接的关系,从而达到处理信息的目的。简单的说,人工神经网络是一种应用类似于大脑神经突触联接的结构进行信息处理的数学模型。
  人工神经网络的计算模型灵感来自动物的中枢神经系统(尤其是脑),并且被用于估计或可以依赖于大量的输入和一般的未知近似函数。人工神经网络通常呈现为相互连接的“神经元”,它可以从输入的计算值,并且能够机器学习以及模式识别由于它们的自适应性质的系统。例如,用于手写体识别的神经网络是由一组可能被输入图像的像素激活的输入神经元来限定。然后经过加权,并通过一个函数转化,模拟信号在神经元之间的传递。重复此过程,直到最后,输出神经元被激活,从而决定了哪些字符被读取。像其他的从数据-神经网络认识到的机器学习系统方法已被用来解决各种各样的很难用普通的以规则为基础的编程解决的任务,包括计算机视觉和语音识别。人工神经网络的最大优势是他们能够被用作一个任意函数逼近的机制,从观测到的数据进行“学习”。
  神经网络是通过对人脑的基本单元——神经元的建模和联接,探索模拟人脑神经系统功能的模型,并使用代码编写的一种具有学习、联想、记忆和模式识别等智能信息处理功能的模型。神经网络的一个重要特性是它能够从环境中学习,并把学习的结果分布存储于网络的突触连接中。神经网络的学习是一个过程,在其所处环境的激励下,相继给网络输入一些样本模式,并按照一定的规则(学习算法)调整网络各层的权值矩阵,待网络各层权值都收敛到一定值,学习过程结束。然后我们就可以用生成的神经网络来对真实数据做处理。

四、ML-Agents

  Unity Machine Learning Agents (ML-Agents) 是一款开源的 Unity 插件, 能够让我们在真实环境或者模拟环境中训练智能 agent。可以使用 强化学习(Reinforcement learning)、模仿学习(Imitation learning)、神经进化(Neuroevolution)或其他机器学习方法, 通过简单易用的 Python API进行控制,对 Agent 进行训练。ML-Agents还提供目前最新的机器学习实现方式(基于 TensorFlow),让开发者训练用于 2D、3D 和 VR/AR 的智能 agent。 这些经过训练的 agent 可用于多种目的, 包括控制 NPC 行为(采用各种设置, 例如多个 agent 和对抗)、对游戏内部版本进行自动化测试、以及评估不同游戏设计决策的预发布版本。ML-Agents 为机器学习提供了一个集中的平台, 使得我们得以在 Unity 的环境中测试 AI 的最新进展。

   ML-Agents 是一个 Unity 插件,它包含三个高级组件:

  • 学习环境 - 包括 Unity 场景或者AR场景。
  • Python API - 包含用于训练(学习某个行为或 policy)的 所有机器学习算法。与学习环境不同,Python API 不是 Unity 的一部分,而是位于外部 并通过 External Communicator 与 Unity 进行通信。
  • External Communicator - 它将 Unity 环境与 Python API 连接起来。它位于 Unity 环境中。
DavidWang原创

参考文献

1、Machine learning Machine learning
2、神经网络 神经网络

猜你喜欢

转载自blog.csdn.net/yolon3000/article/details/84349150