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

640?wx_fmt=jpeg

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

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

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

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

640?wx_fmt=jpeg

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

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

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

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