梦里茶
首发于梦里茶
我的研究生这三年

我的研究生这三年

之前在知乎发过实习和秋招的面经,许多同学私信我,表达了他们初入研究生期间的迷茫,希望了解我研究生期间的成长路线。虽然说没有适合每个人的方法,因为每个人的特点和所处的环境都不一样,但有个参考总是好的,所以我在这悄悄把自己研究生三年的经历写一下,前面可能会写的详细一点,希望能对这些同学有所帮助。

大四上学期(2016.1~2016.3)

大三暑假的时候去QQ邮箱实习,一直实习到了2015年12月,回到学校正是2016年的元旦,跟现在差不多的季节,开始跟导师讨论毕业设计的思路,并动手实现。

主线任务:毕设

毕业设计做的是一个多模态行人检索系统里的Java后端,跟班里两个同学做的前端和硬件采集端合为一个大的系统。导师刚评上副教授,带的研究生只有两个人(后来又多了一个计创的师弟),虽然还有很多本科生,但是对我们的指导时间很多,是那种实干型的导师,会一边帮你理思路一边给你准备资源。

拿到几个大华的摄像头、NVR和SDK之后,在B3五楼会议室里调C代码读写数据,并且从Servlet裸写Java后端(虽然实习写Android把Java写得很熟了,但是当时不熟悉Java后端框架,所以就直接Servlet)。写了差不多两个星期就写完了。然后开始写论文初稿,到一月底,毕设就基本完工,虽然后边又各种调整,但基本的工作在这个时候都做完了。在这个Java后端里,把在QQ邮箱实习的时候熏陶的设计模式全都实践了一把,感觉写的挺优雅,但是好像有点过度封装,不过也还好,这个系统就一直沿用下来。

在后边研究生几年里这个系统又被部署到超算虚拟机上,经过离线化等等变更。合作的两个同学毕业后他们的Hadoop后端和JS前端,路由器硬件都变成我维护了(:з」∠)不过因为没有特别大的改动所以还能Hold得住,一直到现在还在运行着。

支线任务1:自学

写完之后就回家放寒假,因为有大把时间,所以开始刷GitHub,熟悉Git,Markdown,Gitbook,期间翻译了一个当时Github上Star上万的工程,大概讲的是程序员的自我修养之类的东西,收货了几百个Star,后来因为在邮箱期间遇到的Webview问题没彻底解决,心存执念,又开始翻译Chromium的文档,因为当时国内也没有Chromium的中文文档,所以就动手翻译,也从中学到了许多架构设计方面的东西,虽然因为内容太多没有最终翻译完。

同学送的章鱼猫,因为知道我老是刷GitHub

支线任务2:物资管理系统

毕设这套系统更偏向工程,还没有一些计算机视觉的东西,当时导师就跟我讨论就想是不是可以往这方面发展做点研究,于是开始学Python,因为我之前在学校学工办勤工助学,实习的时候就跑路了,准备大四下回去在挣一点生活费,毕竟奖学金只够学费,吃饭还是得自己想办法,所以就用Python+Django写了一个物资管理系统,当做回归的见面礼,顺便也是试手Python。这套系统从2016年3月一直用到2018年12月,因为之后我要毕业不在学校,办公室那边的同学维护不了,所以及时过渡到了以前的Excel工作模式。我感觉这套系统做得还挺好看的,实践了一把当时比较推崇的Material Design。

支线任务3:羽毛球

每周1个半小时的羽毛球,一直打到现在,学校的体育馆还是可以的。

大四下学期(2016.3-2016.9)

主线任务1:毕设

这学期主线任务还是改毕设啦,改格式很烦(:з」∠)

主线任务2:入门机器学习

导师之前其实也不做机器学习,我也是自己摸索,当时TensorFlow,Caffe各种框架百花齐放,因为之前做Android比较喜欢Google,所以在TensorFlow还只是0.8版本的时候开始自学,看的是Google在Udacity上发的教程,一边学一边整理笔记,放到GitHub上又刷了几百个Star。差不多5月的时候,导师也开始跟我们讨论当前机器学习的一些进展和研究方向,因为发现调参很麻烦,所以想做一个自动调参的东西,用神经网络来给神经网络调参,然而当时我只有CPU,整天在Acer笔记本上呼呼呼地跑实验,一直到暑假快结束了实验效果也不好。后来发现Google用N多块GPU做出了AutoML…后来差不多到研一导师才开始重视设备,所以这段时间更多的只是学TensorFlow和机器学习的一些基础知识,也开始学会了做实验,当然因为没有设备这个方向在开学之后还是放弃了。

支线任务1:校园活动管理系统

因为回到了学工办,受到当时双创的影响,被那边的老师抓去组了一个小小的创业团队,准备写一个校园活动管理系统。所以大四下也花了一些时间在这件事情上,带着不同学院的几个同学一起做东西,又写Python又写JS,虽然最后也没搞成,但还是挺有意思的一段时光,遇到许多不错的小伙伴。

支线任务2:博客

大概是到这个时候博客才开始放到Gitbook上,大多数是一些琐碎的知识,后来也渐渐把论文解读和一些工程实践也放进去,还在一直写着。

研一上(2016.9-2017.2)

主线任务1:上课

研究生的课大部分没什么卵用,我觉得我学到最大的技能就是读论文,做PPT还有汇报…当然还是有几门有用的课的:

  • 视觉计算:传统图像处理的各种套路
  • 模式识别:机器学习基础
  • 最优化计算:机器学习数学基础,还顺便学了一波LaTeX

主线任务2:行人重识别入门,确定研究方向

遭遇了自动调参任务的失败之后,10月老师开始让我调整方向,感觉导师在方向上的把握一直都很敏锐而正确。老师希望我还是关注回毕设做的视频行人检索任务上,于是开始看顶会上的各种行人重识别论文,不知道为啥当时老师follow郑宇大佬的工作,关注多模态,所以我们整个实验室大方向是多模态数据融合,我是行人重识别这个小方向,在毕设的系统里,发现基于Wi-Fi的时空信息能够有效筛选行人之后,也想在行人重识别数据集上做相关的研究。

一开始看论文其实没什么经验,看到公式基本都觉得不懂,学了最优化计算之后才感觉看懂了,此外还有一个机遇是老师带着我们去了一趟南京大学参加MLA,听了各路大佬的论文解读和方向指引,期间也看了大量的论文,开始对机器学习这个领域有一个整体的把握,之后看论文就得心应手了。

在南京大学捡的梧桐叶,夹到西瓜书里

回到研究上,看论文之后再去调研数据集,才能知道从哪里下手。可视化是一个很重要的手段,一边各种数据分析加可视化,一边跟导师讨论(老师经常半夜十一二点跟我QQ讨论进展)我们才将目标剥离为无监督时空+视觉这个干净的方向,差不多就到11月了;在这个学期主要是尝试构造时空模型,并想办法和视觉模型做融合。当时Re-id还没有那么多方便的Baseline,我用的是郑哲东的MATLAB baseline,用了MatConvNet这个框架,也是走了一点弯路,一边准备考试一边做实验,差不多到要寒假才把视觉模型的训练和测试都理顺跑通。寒假期间开始把时空模型和视觉模型结合起来,有了一点初步成果,这部分是用Python写的,所以这期间一直在Python和MATLAB之间反复横跳。

这个期间实验室通过阳光采购(流程真的很复杂,现在好了一点)买了一台三卡机,三张TITANX,总算有显卡可以用了…代码也开始放到服务器上跑,这个方向设备真的还是很重要的,我觉得至少要有一张11G的卡吧…

支线任务:PS

因为在学工办兼职,需要做一些海报之类的,本科的时候在学院的宣传部做过,就扛起了学工办所有的海报设计…虽然水平不高,但至少能用。

2016年就这样过去啦:

研一下(2017.3-2017.8)

主线任务:推进实验进展

放假回来还是继续做多模态融合,思路还是从实验里找,各种可视化,摸索出可以建模噪音这样的思路。差不多5月的时候实验基本能保证有效了,导师想投NIPS,开始写了一点点论文初稿,但是因为时间太赶,实验还不完备,就拖着没投,继续完善实验,进一步想用Learning to Rank来改进模型,从调研到选路线到推实验。期间因为支线任务1学了Keras,所以把代码都改成了Keras实现,代码写起来非常清爽,也都整合到Python里了,并且用各种技巧把视觉模型baseline复现到郑哲东他们TOMM的水平,暑假也一直在调Learning to Rank,直到效果满意。

支线任务:百度宠物狗分类比赛

发现了这样一个比赛,然后加了比赛群,听各路大佬吹牛(里边有很多大佬在知乎哈哈),学到了很多套路的东西,包括调参技巧,刷分技巧之类的。这些东西虽然不是必须的,但有了之后会事半功倍。同时也学了Keras,加了Keras群,先试水宠物狗分类,把Keras套路用回ReID。虽然这个比赛没刷上去,但开阔了视野,我们不仅有实验室,同学这样的来自学校的力量,还有来自社区的力量可以汲取。

研二上(2017.9-2018.2)

主线任务:CVPR论文

9月把实验都整理好,老师开始写论文,我也一边写实验的部分,虽然后来基本上还是都被导师重写了,毕竟老师写起来确实比我写的好很多。我们各种画图,各种修改。直到十月底投出去,老师还在学院楼睡了一晚,真的很辛苦。好像是到1月的时候CVPR review,然后写Rebuttal,应reviewer要求补了很多实验来rebuttal。过完春节,某天好像听说出结果了,然后发现已经AC了。

摄于CVPR2018截稿当天

支线任务1:树莓派系统

因为老师想要以后把工作重点放在行人重识别上,所以需要搭一套实验平台,包括采数据的终端和存数据,检索的后端。以前那套系统基于Hadoop太笨重了,所以我重新写了一套系统。买了一堆树莓派、摄像头和无线网卡,在树莓派上跑行人检测,把数据存到MongoDB,用Spring boot来写后端。感觉写工程开始变得很容易,Spring boot也就简单看了几天视频教程就用起来了。只要把一些难点攻克了,之后写起来就很流畅。这个事情做了一个月,然后交给几个大二的本科生接手了,但师弟们之前只学C++和数据结构和算法,不太推得动,有烂尾的趋势,估计我研三下还得把这个东西自己拿过来推进。

支线任务2:动物计数横向

跟一个创业公司合作,做一个数牛的项目,主要还是用树莓派和目标检测那堆东西,加一点物理知识做计数,做出来效果还行。技术上难度不大,但是跟甲方讨论还是一件挺费时间的事情,需要及时推进和协调。

支线任务3:目标检测

寒假期间看了目标检测方面的经典论文,为下学期找实习做准备,虽然我是做行人重识别,但是重点其实还是在多模态上,对计算机视觉方面的东西还是停留在课程里学的东西上,以及Re-id一些论文。其实应该把分割和人脸方面的一些论文也都看一看的。


2017年就这样过去啦:

研二下(2018.3-2018.8)

主线任务1:论文

首先是把CVPR的论文整理成camera ready,然后是继续改进,想得到进一步的提升去投期刊。试了很多技巧,感觉创新点够了,但是效果还是没太大提升,所以一直没投出去。

主线任务2:实习面试

投了几家公司的实习,面试,一边刷牛客网上的题,因为我不是专业的ACMer,而且也有别的任务要做,没法把题都刷完,所以刷题只是找找感觉,基础知识也只是看蓝皮书和西瓜书,大部分面试都是裸考。好在还是找到实习了,具体经历在知乎上答过:传送门

主线任务3:鹅厂实习

到AI Lab实习主要还是研究类的工作,感觉在这期间填补了之前在CV上欠缺的一些认识,发现原来网络结构啥的可以玩出这么多的花。具体不便多说,保密哈。

算上本科的时候拿的一些企鹅公仔,集齐了7个,试图召唤Pony但是没有成功

主线任务4:秋招

传送门

支线任务1:实验室基础设施建设

跟师弟一起搭了实验室的Git平台,还有网站和博客,所以2018年在GitHub上提交的代码可能少一点点。

研三上(2018.9-2019.1)

主线任务1:期刊论文

读了18年的一些顶会论文,获得了启发,找到有效的提升方法,现在实验做完了,效果很好,希望能在春节前把论文投出去。BTW,回来之后实验室又采购了两台GPU服务器,实验室目前有3张TITANX和12张1080ti,还有若干1060,师弟们都转Reid了,卡要多一点才够用。

实验室新鲜的炼丹炉

主线任务2:毕业论文

SCUT总能时不时坑你一把,去年论文是研三下才送审,今年就变成1月送审了,于是生死时速开始写论文,现在写好了,等导师给修改意见就准备去查重送审了。

2018年就这样过去啦


研三下(2019.2-2019.4)

待续


小结

稍微写几点体会吧:

  • 读研期间有一个好的导师真的很幸运
  • 编程基础很重要,有一定基础才能快速把想法推进实施
  • 要尽快确定一个还有研究空间的方向,前期要多读论文,多总结,开阔视野
  • CV方向至少要有一块卡,实验室没有的话,尽量自己买一块吧
  • 确定方向之后多做实验,多做分析,多跟他人尤其是导师沟通
  • 工作的事情是水到渠成的,在学校能出成果最重要,尽量在研二上把论文投出去
  • 现在环境比我们当时好了很多,框架成熟,baseline开源代码到处都有,大多数实验室也都意识到设备重要性,所以都有设备了,但是竞争也更激烈了,大家要加油呀
编辑于 2019-03-06

文章被以下专栏收录