计算机视觉导览:如何快速上手,是否该读博?

来源:geekgazette.org

作者:Samyak Datta

编译:熊笑

  【新智元导读】Learning OpenCV 3 Application Development 一书的作者 Samyak Datta 在一次专访中解答了初学者对计算机视觉领域的一系列疑问,他的阐释在一定程度上勾勒了整个领域的鸟瞰图。

  计算机视觉、机器学习和神经网络成为了计算机科学领域最受瞩目、研究最多的课题。我们很幸运地与Samyak Datta 进行了交流,他是“Learning OpenCV 3 Application Development”一书的作者。Samyak 今年秋天将进入佐治亚理工学校的计算机科学系攻读博士学位。可以说,这个采访在一定程度上勾勒了整个领域的鸟瞰图。

  请简要介绍一下,什么是计算机视觉?计算机视觉和深度学习的关系是什么?

  在一个非常抽象的层面上,计算机视觉(CV)是教机器如何以人类的方式去“看”(实际上,这是计算机视觉领域的终极目标)。它是机器学习(ML)中的一个专业化领域。我们教计算机分析图像和视频的内容,并对其进行有意义的推论。例如,在CV算法的帮助下,可以教计算机识别图像中的物体,将图像分类(如“室内”,“风景”,“建筑物”,“汽车”等),识别照片中的人脸等等。

  正如我所说,计算机视觉(CV)是更广泛领域 ML 的专业化领域。ML 中有几类学习算法,如贝叶斯学习,变分推理,统计学习理论(good-ol'SVM)等等。近年来(2012年后),一类特定算法在人气和普及度上都出现了复苏,那就是神经网络。深度学习是加强型的神经网络!这些网络变得“更深”(即它们有更多的隐藏层),参数的数量已经爆炸到数百万,并且它们训练的机器也变得更快(GPU)。有趣的是,如果你追溯这个领域的历史,你会发现,所有的拼图都是早在 2012 年以前就由Yann LeCun,Geoff Hinton 和 Yoshua Bengio 等研究者领导的团队开发了的。自2012 年以来,由于有了更多可用的大型数据集,更快、更便宜的计算资源和其他一些因素,深度学习开始在研究领域中获得了重视。

  如何上手深度学习?

  我认为先要学习一些机器学习的相关内容。我在学习机器学习最后一年的课程上,开始接触到神经网络,帮助我熟悉了一些神经网络术语。

  除此之外,斯坦福大学的CS231课程(Andrej Karpathy)是深度学习基础的绝佳出发点。几乎所有的课程内容——作业,视频讲座,笔记等都可以在线获得。进行完这个课程后,我就直接进入了一个研究项目。后来,我大部分动手实践的知识都来自这一项目。

  如何使用深度学习的库(library)?

  大约一年半以前,有很多库可供选择(Caffe,MatConvNet,Torch7,Keras,Theano,Tensorflow),选择一个并坚持用下来并不容易。幸运的是,现在选择正在收敛,可以看到DL库目前由两个主要玩家--Tensorflow(谷歌)和PyTorch(Facebook)主宰。我主要是用Torch7工作,这是基于Lua的PyTorch 前身。我最近已经开始迁移到PyTorch 上。

  有几个关键流程是任何 DL 库功能的基础——前向传递和反向传播(梯度流)。如果你了解了你选择的库中的这两种情况,那事情就变得很简单了。

  我想,当你开始调整新库时,有一些步骤是必须的。你首先要加载和使用预先训练的网络,然后你可能会开始组装小的玩具网络,用于“Hello World”问题,如分类MNIST。接下来你可能会用自己的数据集从头开始训练更大的网络。最后,您开始尝试构建任意的网络架构和损失函数,并将一些最新最先进的论文付诸实施。

  你做了大量和OpenCV 相关的工作,给我们讲一讲,初学者应该如何使用它?

  OpenCV 是一个非常受欢迎的开源库,用于图像处理和计算机视觉应用。该库已经在C++ 中实现,您可以借助流行的编程语言,如C,C ++,Python 和Java 来使用OpenCV 的API 。它的速度非常快,内置的硬件级优化也很多。无论是工业项目还是学术项目,我都在使用OpenCV ——在生产服务器上部署基于OpenCV的应用程序,以及为我的研究项目编写OpenCV脚本。

  我认为OpenCV是初学者的优秀资源,因为它为大多数流行的图像处理、计算机视觉和机器学习程序提供了清晰、高效的实现。例如,脸部检测(使用Viola-Jones算法)是几行代码并实时运行。它有一个非常活跃的开发人员社区,并为初学者提供了一个精心编写的文档。你还可以看看我的书——Learning OpenCV 3 Application Development——它是为OpenCV / C ++ 初学者专门编写的。

  目前在学术领域和产业中,计算机视觉的发展现状如何?市场上有什么实际的产品?

  好问题!2012年左右,有开创意义的AlexNet论文成功发布之后,计算机视觉迅速崛起,将视觉深度网络应用于视觉中的所有可能的问题空间——图像分类,对象检测,语义分割,人脸识别等等。所有顶级的计算机视觉会议/期刊都被深度学习论文淹没,因为基准已被破坏,准确度大幅提高了。

  最近几年来,在DL+ Vision 的领域内,由于各种原因,关注点正在转向无监督的学习方式。首先,训练深度网络的有监督学习需要很多(人工)注释的数据,难以获得并难以扩展;第二,无监督的学习更接近于人们发展视觉学习/推理能力的方式(想想一个婴儿是如何学习视觉概念,如对象持久性,并开发出一种他/她周围世界的合理性模型);第三,它设计到了大数据集和弱标签之间的最佳点——这是DL一个优秀的特性。因此,无监督学习被推崇为将在通用人工智能(AGI)的发展中发挥关键作用。

  注意:这并不是说社区完全放弃了有监督学习的做法。最近 arXiv 上有一篇文章,探索了大型数据集(3 亿图像)对视觉任务的影响。

  另外,另一个发展趋势是生成模型,它试图逼近数据的概率分布。虽然判别学习技术等同于“智力”,但生成模型可以被认为与机器的“创造力”相当。所以,我们也看到了深度的网络架构,如GAN、转化图像的VAE 等等。

  还有一些有趣的话题,比如对单个架构进行训练来学习多个任务(一个模型解决所有问题)等等。

  在计算机视觉领域,未来几年的主要研究方向是什么?

  我恐怕没有有这样的远见和预感,我正在学习。希望我对未来做出的预测不会完全错误。

  话虽如此,我可以在作为研究员的非常短暂的时间内,通过会议上观察和收集到的内容进行一些初步的推论。历史上,如果你看到,CV 社区越来越关注视觉理解的问题。计算机视觉任务从分类开始(“有狗吗?”),到定位(“狗在哪里”)和语义分割(“哪些像素属于狗?”),直到最近的研究(“什么品种的狗?”)。CV 的发展直指涉及视觉推理的抽象/主观形式。例如,预测图像中的幽默内容或试图通过理解图像中人们的社会地位来确定图片中的哪些人(在许多人中)是重要的。

  我认为这样的研究将在业界得到认可。我个人也比较关注更多非技术性的话题,例如AI 中的伦理学以及社会/文化因素和偏见如何渗透到我们构建的算法和系统中。例如,最近有研究发现种族偏见在面部识别算法中的影响。随着人工智能成为我们生活中更亲密的一部分,我觉得这些问题亟需解决。

  计算机视觉领域如今面临的最大技术挑战是什么?

  凡是接近通用人工智能(AGI)的领域,都还有很长的路要走,这也是每个CV / ML / AI 研究员的终极梦想。

  比如说,深度学习模型的可解释性就是一个很大的挑战。在这个领域中,已经有一些文章试图阐释我们训练的网络,或图像的哪个区域是网络在做出什么样的决定,等等。

  在哲学层面上,值得注意的是,几个世纪前,牛顿和爱因斯坦会将复杂的物理现象的解释集中在一组紧凑优雅的方程式中。

  不幸的是,即使我们今天训练的最简单的深度网络也做不到这点了。赢得Kaggle比赛的模型是实际效用非常有限的深度网络。其中一个主要的挑战是要将这些模型融入到内存中,以便能够在智能手机上运行。

  在什么情况下,我应该去申读计算机视觉领域的硕士或者博士?

  选择读硕士或博士是一个重要的决定。我认为,如果你有信心要将研究作为事业(在学术界或在企业实验室中),那么选择去读博士学位就是有道理的。

  如果你想试探一下这个领域的深浅,或者你正在考虑换个专业,那么硕士有可能是正确的选择。但是,请记住,大多数硕士课程负担很重,所以,您可以投入研究的时间和精力有限。

  另外,在实验室做RA大概一年后,你也可以通过申请技术学士学位来获得有价值的研究经验。随着计算机科学研究生竞争的加剧,这正成为一个很常见的做法。

  应该如何准备申读博士的简历?

  我唯一可以提供的建议是在您感兴趣的领域把项目做好。如果您已经考虑进行研究,那么行业实习的价值就远远低于学术研究项目。

  我推荐保持良好的GitHub配置文件,并发布您所做项目的 code。一般来说,与您项目相关的代码、报告或其他手稿,如果都可以在线访问,会是一个很好的事情,原因有两个:(1)它使您的研究可以访问并因此可重复使用,(2)它迫使你不要做中等和不合标准的工作。

  原文地址:https://geekgazette.org/2017/08/samyaks-hangout/

声明:本文由入驻搜狐公众平台的作者撰写,除搜狐官方账号外,观点仅代表作者本人,不代表搜狐立场。
推荐阅读