• 12月23日 星期一

干货 | 旷视科技俞刚:我在旷视研究院做检测

AI 科技评论按,本文首发于知乎专栏「旷视 Detection 组」(https://zhuanlan.zhihu.com/c_1065911842173468672),作者俞刚,AI 科技评论获其授权转载。以下为原文:

入职旷视研究院已经四年多,一转眼已经从单兵作战,到现在有一个 Detection 团队。一路过来有坎坷,有经历,有成长。这次希望通过分享的方式,让各位对旷视研究院(Detection 组)有更多了解,同时也把我个人的心路历程呈现出来,为后来者抛砖引玉。

求职

时间回退到五年前,已交完 PhD thesis 的我,开始准备找工作。当时导师非常 nice,给了一份保底工作,在学校里做 research fellow,这样我就有足够的时间好好找工作,但是缺乏完整的职业规划。一开始投递了一些高校教职,面试了一些学校也拿了一些 offer。偶然间应师弟邀请去旷视参观。当时公司刚从银谷搬到融科,人数不多,但氛围出奇好;环境虽没现在火热,也没有多少友商,但是能感觉到一种气息——每个人对技术的执着追求。没做多少犹豫,我就跟老婆一起搬来了北京。

起步

刚来时,雄心勃勃想大干一场,却低估了很多事情的难度。前前后后揽了不少活,但是没有干出什么成绩。2015 年的时候,旷视研究院已经希望做一些零售商超方面的工作,没有什么行业背景,没有什么项目经历,感觉自己把产品想象得太简单。这段时间的一个总结是:算法不等于产品,有产品也不等于能落地解决客户问题。当然,那时候的算法非常粗糙,还是基于传统方法,感觉充其量只是一个受限场景的 demo。经过反思,觉得需要先把算法真正做扎实。

于是,在 2015 年的时候,我第一次接触了深度学习,虽然当时深度学习已经爆发了。2015 年在旷视研究院的那段时间是非常幸福的,停下来,好好思考一下,其实可以学习到很多东西。基于深度学习,Detection 组开始做的第一个任务就是行人检测,最开始使用 fast rcnn,后来慢慢切换到 faster rcnn。同时 Detection 组开始基于行人检测做人体骨架算法。另外,为了更精细的定位人体框,Detection 组又做了一些分割算法。所有这些算法的研究构成了 Detection 组的雏形。但是那时,我忽视了一个非常重要的方面——团队培养。

带人

旷视研究院前几年的生源质量其实非常好,实习生都是有非常好的背景。比如我最早的两个实习生,一个实习生拿了 ACM world final 的金牌(第二名),另外一个去了 MIT 读博。后来很多实习生都是 OI 金牌之类的。当然,这些其实跟我没什么关系,我并没有带人的经验。很多同学在团队里付出了很多努力,但是实际收益很小。当时自己可能是有些失落的,我开始反思,如何才能真正培养同学,如何才能增加团队的战斗力。我花了很多时间跟实习同学一起去琢磨各种 paper, 研究各种细节,讨论各种实验结果。从那个时候开始,Detection 组真正成长出来了一批非常强而且可靠的同学。那批同学现在已经成为我们组的骨干,很多人已经自己带起了一个小团队。同时,Detection 组招人的要求也在不断完善。从只看基础能力,到后来会关注一些软性能力,比如 motivation,价值观等等。一个让我有深刻反思的例子是一个同学推荐了两个 OI 同学,一个是 OI 金牌,另外一个 OI 银牌但是有非常强的规划和 motivation。我没有经过多少思考就选择那个 OI 金牌的同学。后来那个 OI 银牌的同学快速成长起来,同时做出了非常多优秀的工作。价值观在小团队野蛮生长期可能并不是很突出的问题,但是当团队变大后,这个问题的严重性会暴露出来。

产品

那个时候 Detection 组人不多,但是大家士气都很好,研究算法工作已有起色,有了比较好的刷点经验。但是当时的问题在于,Detection 组渐渐离产品越来越远。我们所做的东西希望能用在实际产品中,但是算法成熟度不高,所以离实际落地距离还是非常的远。2016 年暑期,公司迎来了孙剑老师的加入,这对于 Detection 组以及我个人来讲都是有非常大的帮助。经过一段时间的梳理,Detection 组正式接手了所有的检测工作,包括产品中用到的人脸检测。这一步对于打通技术完整检测技术链条是非常重要的,因为我们同时做检测产品的研发,同时做检测基础算法的预研,让我们真正 end-to-end 在优化过程。比如产品中的难点可以转化为研究问题去帮忙探索,这样可以确保研究方向是实用导向的。另外一方面,很多研究方面的经验可以快速 transfer 到产品中使用。

经过一段时间,我跟另一个同事重新搭起了一套新的检测算法,相比上一版算法有非常明显的提升,无论是速度跟精度。当然,因为是糙出来的,所以有非常多不合理的细节。经过一步步完善以及更多同学的努力,到今天,Detection 组的算法有了非常本质的提升。总结一下,一个产品用的算法可能需要做好各个细节:训练集的持续增加,科学细分的 benchmark,合理的数据格式以及高效的 data provider,统一的 codebase 以及完善的文档,定期的发版计划,以及 badcase 的追踪和维护。当然,在那个时候,很多细节做的都不好。除了上述细节之外,还有一个我没做好的维度是团队的工程化建设,工具链的建立。这个问题一直被忽略,或者以比较低的优先级在进行着,导致长期来讲 Detection 组的效率比较低,研究员花了非常多的时间在处理数据,流程等工作,而这些工作其实可以自动化的。另外,因为本身没有很好的工程基础,所以 Detection 组一般只负责算法模块的实现,没有完整 Pipeline 架构层的能力,这可能会导致算法能力无法很好的发挥出来。当然,目前我们对这方面的建设是非常重视的,同时也我们会花很多时间来提高团队的产品能力和效率。

科研

随着团队的成熟,一些现有同学的成长以及强有力的新同学加入,目前产品层的算法 Detection 组也梳理的比较顺利。但是基础研究上面走的有点累。具体来讲,Detection 组一直走在复现的路上,比如有一个新的算法,复现一下,刚复现完,可能新的算法又出来了。这让我深深意识到之前基础算法工作中的短板,如果只是 follow 别人,那永远不可能超越。从那时起,Detection 组主攻几个点,在多个同学的努力下,渐渐有了自己的算法工作,比如从最早期的 RFCN++,Large Kernel Matters,到后来的 MegDet, DetNet 等。大家慢慢找到了方向,找到了自信。

Detection 组开始参加一些比赛,比如 2017 年 ICCV 的 COCO 以及 2018 年 ECCV 的 COCO 比赛。因为早期的积累,加上多团队的合作分工,我们对于结果还是非常有信心的。这里可以提两个细节。2017 年时,我们从来没有参加过 COCO 比赛,也没有太多经验,但是我们心态非常好。有一次对话过程中,孙剑老师问我们,希望能跑到单模型多少结果,当大家犹豫时,有一个同学脱口说了 49。我们一致认为他在吹牛,因为当时我们的点可能只有 46。但是在比赛前,他确实做到了。在 2018 年的比赛过程中,我们的一个感受就是 tough,每天 sync 过程中,一般会同步之前的实验结果,但往往一天天的实验都是不涨点的,虽然每次大家都会觉得有点失落,但是大家的斗志始终非常旺盛,一直尝试各种想法,哪怕可能只有 0.1 的涨点,大家都很非常兴奋。从那段时间的反思过程中,我觉得团队中需要有一些「软性」能力,对胜利的渴望,对问题的坚持和执着是非常重要的。

另外,在研究过程中,我从孙剑老师身上学到的一个非常重要的点,就是专注。这个词虽然说起来很简单,但是我自己一直做得不好。很多时候,我们对于研究的态度是希望到处开花,各个领域皆有涉及,然后每个领域都能分一杯羹。但是真正的研究工作可能需要花大量的精力和时间去深挖一个点,这必然需要放弃掉一些其他的东西。从 2019 年开始,Detection 组的研究范围重新定义,停掉了一些任务,同时把精力聚焦在几个重要的点上。希望这些改变能让 Detection 组真正带来一些「大招」,而不是简单的小打小闹。

招聘

2017 年下半年到现在,因为业务等需要,Detection 组需要招聘更多的同学。因为一开始不重视招聘,导致 2017 年校招犯了一个非常严重的失误,直接导致 2018 年甚至是 2019 年的人力短缺,所以这一年过得非常累,因为可能一个人需要同时补很多洞。2018 年我复盘了自己招聘过程中的问题,重新理解了招聘。招聘首先不是为了解决现在的问题,而是为了以后做准备,一定要未雨绸缪。另外,很重要的是,招聘不单是 HR 的工作,更是每个 leader 的工作。那时候,每周都会拿出很多时间去面试,去沟通同学,对于很多候选同学来讲,其实我们自己去沟通会比 HR 更能让同学们了解旷视研究院的情况以及他可能的工作。同时间,另外一个经验是招聘需要发动全员一起行动。首先如果只有自己一个人去操心招聘,这样精力肯定不够,所以 Detection 组会发动每一个同学去招聘,让每个同学理解招聘的重要性以及学会如何去招人。同时,我们也会通过一些宣传,让大家了解我们,愿意加入我们。

管理

因为短时间内很多新同学的加入,我渐渐的意识到 Detection 组在变大,之前的一些管理方式可能已经不是很适用了。因为我对于管理其实是个小白,虽然开始尝试读一些书,学习一些课程,但是感觉处理起来还是比较简单粗暴。其实算法团队的管理跟很多传统工程的管理还是有区别的。不能太教条,这样会影响团队成员的积极性和创造性。我们需要的可能是赋能,让团队提高效率,而不是制造障碍和瓶颈。我的一些尝试是首先是做好基础建设,特别是组内的工具链,codebase, 文档,论坛,tech-talk 分享等。只有具备高效自动化的工具才能真正解放每一个同学,把时间花在刀刃上面。另外,Detection 组内的信息共享,科学的培训体系对于每一个同学的成长都是非常必要的。另外一层就是培养一些 Leader,包括可以替换自己的同学。每个团队大了后,一定需要有同学成长起立,来帮忙负责做一些管理。同时每个 Leader 本身也需要有一些二号位,来做补位等。即使是我自己,也希望能培养一些同学完成工作。这样可能团队才是最健康的状态。另外一方面 Detection 组会制定一些流程,一些计划来帮助团队提升。因为工作久了,可能会有一些惯性,很多时候我们希望能有一些新的想法,新的思路来提升大家战斗力。当然我们发现要推广这些新的流程可能会花很多时间,很多精力,所以目前的经验是不会频繁的推广新的流程,每个新流程都需要在一些 sub-team 小团队中先做验证。总结一下,我们希望能提供一个很好的平台,把优秀的同学聚在一起,一起去干出一番成绩,同时也希望新来的同学基于我们平台快速成长。

团队稳定后,另外一个可能突出的问题是我们做的是算法,正如文章前面写的,算法不等于产品,所以 Detection 组开始学习一些产品方面的知识。Detection 组内每周会有一次产品相关的分享讨论,主要是讨论算法如何在产品中发挥更大的价值等等。因为只有更好的产品意识才能把算法真正落地。同时我们也可能希望能跟「客户」做更多的沟通交流,了解具体的需求以及讨论可能性。很多时候,算法,工程,产品,商务,客户是两两之间沟通的,中间每次传递都有可能信息的丢失和理解的偏差。正如神经网络一样,Detection 组可能希望的是拉通,end-to-end 的优化,同时最好有一些类似 residual 的 shortcut 来更好的传递信息。从价值观角度来讲,旷视研究院希望用算法解决客户问题,给客户创造价值。而不是为了算法的落地而落地。

建议

上面给出了一些我个人的一些经历。同时基于这些年我看到的很多同学,我希望给出一些我自己零碎的建议。这些建议是对职业生涯中的三种不同阶段给出的。

假设你是学生:

  • 一定要提前做好规划,无论是工作还是继续深造。假设有问题,多跟老师,师兄,师姐等沟通,了解更多信息来做判断。任何决定可以适度犹豫,但是不要太纠结。

  • 基本功非常重要比如工程能力,比如数学基础等等。

  • 在导师允许的前提下,多出来实习,看看外面的世界,同时多认识一些同学。

假设你刚入职工作:

  • 平台很重要,跟一些很强的同学一起共事可能是一件非常有意思的事情。

  • 不要挑活,要相信付出是一定有收获的。

  • 自驱力很重要,一定要主动去学习。

假设你已经开始带团队:

  • 一定要有共赢的思想。大家一同有收益而不是「一将功成万骨枯」。真正关心了解每个团队成员的需求,多沟通,多倾听每个人的意见,建议良好的反馈机制,发挥出每个人的最大价值。

  • 增强基础建设,流程建设,确保组织以更高效的方式运作。

  • 方向的把控很重要,避免「战胜了所有对手,但是输给了这个时代」这种窘态。

说了很多,还是希望让大家对旷视研究院以及 Detection 组有一定的了解,也希望我的分享能让大家避免我踩过的坑,有更多同学加入我们,一起去探索一个超越人类的检测算法,扩宽认识边界,真正让计算机视觉技术推动人类的进步和发展。如果有兴趣加入我们欢迎投递简历给 Detection 组负责人俞刚:[email protected]. 同时我们会在 Valse2019 有展台,欢迎大家来交流。

作者介绍

俞刚,旷视研究院 Detection 组负责人。2014 年博士毕业于新加坡南洋理工大学,加入旷视。主要负责检测,分割,跟踪,骨架,动作行为等方面的研究以及算法落地工作。俞刚博士带队参加 2017 COCO+Places 挑战赛获得检测第一名,人体姿态估计第一名;接着,带队参加 2018 COCO+Mapillary 挑战赛,获四项第一。

个人主页:http://www.skicyyu.org/

点击阅读原文,查看 CVPR 小组,了解 CVPR 2019 的最新动态

上一篇新闻

区块链一周大事记:首部区块链系教材首次入选2022大学秋季教材

下一篇新闻

希腊最新开放边境,中国游客可以来了

评论

订阅每日新闻

订阅每日新闻以免错过最新最热门的新加坡新闻。