对话OpenCV创始人Gary:“亚洲社会都太重视学历和证书”
《程序员》于 2000 年创刊,其理念为技术改变世界,创新驱动中国。2021 年,全新的《程序员》 重新起航,以专业的内容为立足点,以音视频、图文专栏等丰富的多媒体形式为载体,立足当下,放眼未来,为读者带来全方位的技术和产业解读。
本文为新《程序员》第一期内容,继对话 Unix 命名者 Brian W. Kernighan 与 Vue.js 创造者尤雨溪、TiDB黄东旭等人之后,我们邀请到 OpenCV 创始人Gary Bradski,揭开谷歌自动驾驶基础机器人汽车Stanley背后不为人知的细节。
作者 | 《程序员》编辑部
出品 | CSDN(ID:CSDNnews)
相比于OpenCV创始人,Gary Bradski拥有非常多的身份,他是科学家、工程师、创业者和技术内容的作者。在计算机视觉领域,Gary Bradski可谓是一代宗师。他不仅创立了OpenCV这个时下非常流行的计算机视觉和机器学习库,还曾创立CARLA、GTSAM、Open3D、DLG等多个人工智能相关的项目。
2005年,Gary Bradski与谷歌无人驾驶之父Sebastian Thrun组队赢得了DARPA挑战赛冠军,他们大赛中开发的机器人汽车Stanley后来被放在了史密森学会-美国国家博物馆中。这次尝试,成为了谷歌自动驾驶的基础。
在接受《程序员》采访时,Gary再次谈起了这次夺冠背后不为人知的细节,同时也谈及了OpenCV未来的发展,以及他对开源、学习方法、领导方式的理解。
观点速览:
创建OpenCV的初心:我希望研究一些对整个计算机领域更具价值的方向。我发现计算机视觉需要大量的计算,而大部分实验室都在重复造轮子,有些工作甚至是学校里的研究生就能做的。为什么不能把库开放给所有人呢?这就是我创建OpenCV最核心的原因。
开源商业化:如果我要走商业化的道路,应该可以赚很多钱,但我更关心开源对社会进步的推动。但另一方面,我并不认同开源完全免费,资金支持很重要。
选择「从基础学习」还是「从0学习」:这跟学习的领域有关,你要学习化学,可能需要从0开始。但你要学习计算机,已经有很多基础的东西被开发出来了,比如编译器、线性代数求解器等,如果你要从头去写这些,肯定会写得非常烂。
看待编程学习:很多人可以在大学里通过计算机科学考试,但却无法成为一个优秀的程序员;今天学术界过度重视科研成果,我认为论文不是为了发而发,而是你真的有东西想发的时候才发。
看待编程思维:在写程序时,有些人会先对对象进行实例化,然后再运行。这种方法很初级,会造成延时。高级的方法是先运行程序,在需要的时候再去实例化对象。这些技巧是高级程序员才懂得,也是学习机器视觉必须要掌握的。
评价好领导的标准:我认为好的领导者应该是实干的,而不是单纯指挥别人。好的领导者也需要具备长远的眼光,能够去激励别人完成工作。
中国技术生态:我认为整个亚洲社会都太重视「学历」和「证书」了,但中国开发者在开源方面做得很好,为开源发展做了很多贡献。
学术价值 VS 商业价值
《程序员》:创建OpenCV的初心是什么?
Gary:当我还在Intel实验室的时候,实验室刚刚成立,希望我们能多发表论文,以奠定实验室的权威性。但以我的个性,我基本上不怎么搭理公司的规定,因为当时计算机已经发展很快了,所以我希望研究一些对整个计算机领域更具价值的方向。我发现计算机视觉需要大量的计算,而大部分实验室都在重复造轮子,有些工作甚至是学校里的研究生就能做的。于是我去了MIT实验室,发现他们自己开发了一些库,实验室内部的人都可以使用。我当时就想,为什么不能把这样的库开放给所有人呢?这就是我创建OpenCV最核心的原因。
第二,如果大家能基于一个通用、公开的基础设施来做开发,就能更清楚这套基础设施的特点和基本原理,从而可以减少很多bug。
第三,我做OpenCV是想加速AI产业的发展,尤其是智能AI(intelligent AI),这是我毕生所愿。我也希望OpenCV可以让计算机视觉从学术价值转变为商业价值。
《程序员》:能否介绍下OpenCV近期的发展与动向?
Gary:目前我主要的工作聚焦在OpenCV基金会上,主要是去拉一些资金。另外,我们在中国(深圳)也建立了团队,这个团队是我个人出资组建的。他们主要负责收集用户的需求,以及收集世界各地基于OpenCV开发的优秀项目。此外,过去我们一直没有特别好的反馈机制,目前我也在这方面做了一些改进,让开发者可以更快地获得反馈。
目前OpenCV已经有了DNN库,我们新增了一些功能,尤其是在深度学习方面,我们还优化了硬件模型,使其可以更好地在更轻量的设备上运行。在深度学习方面,用户可以自己训练模型。我们也为用户提供了一整套针对不同场景的模型,供用户自己训练模型,当然,用户也可以从现有的模型中选择一个适合自己的。
不仅如此,针对机器人的支持我们也做了优化,目前OpenCV可以支持机器人在移动中定位和建模。
《程序员》:未来你对OpenCV还有哪些规划?
Gary:有两个规划。第一,我希望能组建一个开发团队,负责修改bug和对用户的技术支持。同时,我还希望能组建一个会务团队和广告团队,因为我想规划一些新的活动。要组建这些团队需要稳定的收入,比如每年一两百万美元的收入,才能实现。
第二,我们计划做一些培训课程,通过培训的学员可以得到我们的认证。尤其是在一些发展中国家,例如印度和中国,我们希望那些经济条件有限的学员也能拥有学习机会。但这个课程并不是「学术型」的课程,而是更偏重于实践,我们可以保证通过学习的人,其水平能胜任各种产品开发。这种培训也降低了企业的招人门槛。
另外,我还有个想法,你知道FIRST的机器人大赛吗?它是面向高中生的机器人比赛。我想做个跟它不一样的机器人比赛,参与对象既可以是高中生也可以是高校的学生。他们在大赛中聚焦一些更具现实意义的东西,比如让机器人种植食物、修路、维护基础设施、或者在一旁巡逻等等。比赛周期也不限定在一天,而是长期。这样的比赛更具现实性,也更有价值。
《程序员》:在你看来,近年来机器视觉领域有哪些新的发展?
Gary:我觉得很多几何视觉(geometric vision)的东西依然对今天有用,例如SLAM。但AI和深度学习的发展也加速了机器视觉的发展,比如OpenCV目前也有运行深度网络的推理引擎,它可以在很多方面与经典计算机视觉技术结合。以我的经验来看,很多应用,都是深度学习与经典技术结合的产物。
学编程,要实践
《程序员》:OpenCV的诞生也启发了一些新的学习思路,你如何看待「从基础学习」(Learn from a baseline)和「从0学习」(learn from zero)这两种学习模式?
Gary:我认为这跟学习的领域有关,你要学习化学,可能需要从0开始学习。但你要学习计算机,已经有很多基础的东西被开发出来了,比如编译器、线性代数求解器等,如果你要从头去写这些,肯定会写得非常烂。另一方面,我也看到很多计算机专业的人连Calibration和Bundle都不知道;很多人可以在大学里通过CS(计算机科学)的考试,但却无法成为一个优秀的程序员。
我写程序时还是用的汇编语言,所以我对计算机的了解也比一般程序员深。但今天开发工具那么多,你即使不了解底层原理,也能做开发。这就像你就算不会造车,也能开车一样。归根结底,到底应该以哪种方式学习,是一个权衡的过程,需要平衡各个因素后才能决定。
但我认为造成这种迷思的原因,也跟今天学术界过度重视科研成果有关,教授和研究者们都去忙着发表论文了。要是他们有更多时间聚焦在开源项目上,他们对一个领域的理解就可以深度与广度兼得。因此,我认为论文不是为了发而发,而是你真的有东西想发的时候才发。
《程序员》:对于想要学习机器视觉的人,你有什么书籍可以推荐吗?
Gary:从来没有哪本书让我真正满足过。我现在基本是在线上学习,线上有很多教程和资料,比如我在线上学习PyTorch。但也会看一些「真正的编程书」(real programming books),我认为在这方面人们学习得还不够,尤其一些高级程序员的编程思维。比如在写程序时,有些人会先对对象进行实例化,然后再运行。这种方法很初级,会造成延时。高级的方法是先运行程序,在需要的时候再去实例化对象。这些技巧是高级程序员才懂得,也是学习机器视觉必须要掌握的。
好领导,要实干
《程序员》:你给自己的Title是首席科学官(Chief Science Officer),它与CTO有什么区别?
Gary:现在,我的工作不仅仅是首席科学官,有时也要行使CEO和CTO的职能。在我看来CEO更多是聚焦于企业管理相关的工作,例如融资、监管、社交等。而CTO更聚焦技术细节,例如选择正确的开发模型等,他要确保所有的想法正确实现。首席科学官则更多是研究最新的技术动向,它与CTO的区别是,它更多聚焦在该做什么,CTO是聚焦在该怎么做。因为CTO的工作需要极度聚焦于细节,但我现在已经不想过多聚焦于细节了,所以我选择了做首席科学官。
《程序员》:在之前的一个采访中,你曾说你是个很好的leader(领导者),你认为好的领导者应该具备怎样的素质?
Gary:这个没有定论,但我认为好的领导者应该是实干的,而不是单纯指挥别人。好的领导者也需要具备长远的眼光,能够去激励别人完成工作。我参加DARPA挑战赛的时候,卡内基·梅隆大学参赛队的leader是Red Whittaker(卡内基·梅隆大学教授,主要研究领域为机器人),他曾在海军陆战队服役,他的领导风格就是指挥型的:你做这个、你做那个,非常颐指气使。而我所在的队伍是Sebastian Thrun领导的,他的领导风格是尽量与我保持同步,因为我很努力,他甚至会害怕让我失望。在这样的团队中,会很受启发,所以我更欣赏这种领导风格。
《程序员》:既然说到了DARPA挑战赛,还有什么有趣的幕后故事可以跟我们分享吗?
Gary:当时我还在Intel实验室,我听说Sebastian Thrun要来斯坦福休假,就联系了他,问他愿不愿意以兼职的形式来我们实验室做点事情。他很爽快地答应了。后来他私下跟我说他打算到斯坦福工作,我就问他能否跟着他干,就当是收个非正式的研究生,他也很爽快地答应了。后来他跟我说他要参加DARPA挑战赛,我当时已经听说Red Whittaker也要参加,所以就很想在大赛中战胜他,证明Sebastian Thrun的领导方式比他好。这是我当时最主要的目标。
此外,我在计算机视觉方面有一些积累,也对我们的作品有很大帮助。比如,Sebastian希望通过激光来实现汽车的视觉感知,但激光只能对空间深度进行感知,效果不太理想。后来我们又尝试使用普通的摄像头,但这些摄像头很容易坏,也容易进灰尘。最后,我们使用了单目摄像头(monocamera),它能将激光对空间的感知与机器视觉结合起来,让汽车「看得」更远。我当时就预感到我们可能会拿冠军,结果果真如此。
虽然当时自动驾驶已经有人能实现了,但那次比赛证明了自动驾驶技术具有普适性,也成为了今天自动驾驶行业的开端。
One More Thing
《程序员》:你的身份很多,也在很多企业的管理名单中,你是如何运用时间的?
Gary:我并不是一个很会运营时间的人,我同时做了很多事。我是很多公司的管理成员,但有些时候是别人邀请我加入,帮他们站台以获得融资。在这种情况下我不做什么实际的事,只是帮他们站站台就好。另一些公司则相反,需要做实事。在时间管理方面,我经常告诉别人要聚焦,把一件事情做好,自己却常常做不到。但我还是会放下一部分事情,比如我在LinkedIn上有很多关注者,我就无法一一回复他们的信息。
《程序员》:近年来开源软件商业化是很热的话题,你怎么看?
Gary:我做开源软件库20年了,刚开始是凭着一腔热情。我在很多岗位都待过,也参加过很多活动。虽然我做得很好,但当时并没有商业化。其实当时也有一些商业化很成功的开源公司,如红帽,如果我要走商业化的道路,应该可以赚很多钱,但我更关心开源对社会进步的推动。
但另一方面,我并不认同开源完全免费。最初做OpenCV,只有我和另一位小伙伴,没有任何收入,运营起来非常艰难。当时我就想,要是用户每次使用能付5美分,我们就能组建一个专门的会务团队和24小时的技术支持。因此,现在我认为资金支持很重要。
我们在深圳大学建立了一个OpenCV的小团队,也在中国和全世界筹集资金。我们有很多计划,比如搞个新的OpenCV大会等,而这一切都需要资金。
《程序员》:最后,对于中国的开发者或技术生态圈,你有什么想说的?
Gary:我与很多中国开发者合作过,我认为整个亚洲社会都太重视「学历」和「证书」了。我有个合伙人,他连高中都没上过,这样的人在亚洲社会显然没有什么竞争力。但他真的很聪明,做事很有一套,也很有想法。如果让我在清华、MIT(麻省理工大学)的毕业生和他之间做个选择,我可能会选择他。
但我认为中国开发者在开源方面做得很好,为开源发展做了很多贡献。最后,如果你是个创业者,你需要在情绪管理方面足够成熟,也需要经常自我反思。开发者和有学术背景的创业者经常容易干太多事,因此要学会取舍。
要知道,有时候少就是多。
从 Unix 开发者 Brian W. Kernighan,到 OpenCV 创始人 Gary Bradski,再到 Vue.js 作者尤雨溪……新《程序员》第一期以「开发者的黄金十年」为主题,与多位国内外知名的技术领袖和新锐代表进行了深度对话,希望为中国开发者打开新时代的「机遇之窗」。 除了技术引领,我们也希望透过技术对行业进行深入洞察。因此,新《程序员》第一期也邀请到了来自快手、滴滴、贝壳找房、作业帮等知名企业的技术负责人,用案例实践为读者阐述直播、出行、居住、在线教育等多个行业变革背后的技术架构和技术引擎。
扫描下方二维码,添加小助手,即刻加入新《程序员》「读者群」,抢先一步获取杂志最新资讯,精彩内容不再错过。