计算机视觉方向博士科研学习总结 拜读

转载来源:https://blog.csdn.net/gdengden/article/details/80365518

2016.11~2017.3


时间倒回到大二上,那会就想做一点跟数学和计算机相关的东西,就入了计算机视觉( CV )的坑。

•最开始是重新学了一遍线代,毕竟 ML 里面,还是以数学为基础的。大一学的线代是皮毛,根本不够看,SVD ,PCA 在干嘛根本不清楚。补课是必须的。

•我也看了吴恩达在 coursera 上面的视频,其实那个视频呢~很简单的基本概念,但是很重要,因为有助于你形成机器学习大概是做些什么东西。

•为了用一些框架,不得不去自学 Linux 。玩了一点点点 OpenCV

•同时我还在刷 CS231n ,写了 CS231n 的 code对于我而言作用很大。至少把Numpy的坑踩得七七八八了。也明白了一个深度学习框架究竟在做什么。

其实看完这些东西,已经基本入了门了。但入门的话,其实大家如果和我做的差不多的话应该都入了。更重要的是要在某一个点上面钻研。

说起大概就是以下几个东西比较主要

•C++  Python  Matlab  LaTex  Linux 这种编程的是必须要会的东西

•Pytorch  Tensorflow  Caffe  MXNet 这些深度学习框架至少要会一个

•数学需要的知识有很多 微积分 线性代数 概率论 实变函数 泛函分析 拓扑学 测度论 凸优化 信息论 等等,虽然数学这些东西你一开始入门不需要掌握,但如果想做很深入很深入的理论研究,总是得花时间慢慢补起来的。(我现在就受限于此,很多特别深入的东西没法搞懂...)



2017.4~2017.5


由于 ML&CV 这种东西吧,其实领域很大,你不可能做到样样精通,涉猎可以,但必须要有自己深入的点,想做学术想做研究更应该是如此。我第一个选定的东西是 GAN ,最开始看的代码是网上开源的 DCGAN 的 tensorflow 代码。强烈建议你们一开始入完门看多几次源代码,收获很大。那段时间我一直在拼命看论文,去知乎/ CSDN 上面找 GAN 的推荐论文,其实论文质量有好有坏,在最开始入门的时候,看那种有人做过的论文笔记的,有助于快速上手。 做研究初期就应该这样子,不是说一上来就去看一大堆高深莫测的最新论文,重要的是找对论文和会看论文。我在这期间看论文的速度其实是越来越快。


看什么论文呢?

我的建议是先看领域里面的经典论文,这些往往是后面论文的基础,而且这种论文特别容易在 CSDN ,知乎等等找得到对应的笔记(别人把关键信息提炼了出来)。当然,不能盲听盲从,你往后会发现这些笔记里面其实有很多错误,但对于一开始的你而言,我觉得这是上手最快的方法。

然后看去年今年的顶会论文,这些论文往往思路比较新颖,而且也是当今的研究方向。如果最开始的你不知道怎么找顶会,那继续去看各种博客,他们一般会有一些比较粗略的总结,再把标题复制出来自己详细读。(顶会列表我在后面给出了)

arxiv.org 上面的论文基本上是最新的,我不赞同刚入门的人去看这个,毕竟很难辨别好坏,但是你在知乎上面看到的那些如何评价 XX 论文,以及 reddit 上面那些讨论,基本上都是arxiv 预印本上面的最新。如果你真的觉得自己可以跟得上最新的论文了,我推荐去看爱可可爱生活这个微博,这是北邮一个老师的,经常会推送一些最新的论文。


怎么看论文呢?

•论文拿到手先看 abstract

•然后看论文里面那些 figure 和 table

•接着 introduction 和 conclusion

•最后再去看implement detail和experiment

•有时候一篇论文在作者的个人主页有一个 project homepage,在里面有一些 demo 和  slides,这些东西是可以能够帮你快速抓住论文的重点节约大量时间的

•可能最开始看论文的速度不够快,不要灰心,慢慢来,多看一点论文你就能抓住重点了。

•我们一篇论文看完摘要和图之后,大概就知道是不是我们想要的东西了。所以如果不喜欢,或者很快就get到作者的点,或者觉得这篇论文没有亮点,那我觉得这篇论文的阅读应该就此打住了。

idea怎么来呢?

•最开始自己是想不出发论文的 idea 的,但在论文看多之后,其义自见,你会对一个问题有着自己独特的深入的理解。

•这个时候你可能会有一些 idea 了,你会发现什么东西别人没做过,什么东西可能可以做一下,什么东西可能可以 work ,这都是个积累的过程。

•不要去随便提出一个 idea ,最好还是深思熟虑以下,你在 purpose 之前最好能够明白为什么这个东西可以 work 。我知道这不是一件十分容易的事,但我们必须要有这种的态度,认真对待自己的每一次尝试。

•其实在这种不断自我否定自我肯定的过程中,你会得到成长。可能会出现你的 idea 被别人抢先发表的情况,可能做研究陷入僵局,可能某一个 BUG 出了半天没解决,可能 idea 一直没有好的实验结果,我都体会过。但重要的是思考 idea 实验 diea 的过程和总结。


2017.11-Present


后面呢准备了一个半月的期末,后面一段时间也在学点英语把。大概是 2017.11 重新回到战场,这段时间内我看论文的速度有了明显提高,一天精读3篇略读5篇,很快就能 follow 上最新的论文(这里不是指顶会,我指的是 arxiv )。产 idea的速度也很快,但是实现出来的速度还是太慢了。 我后面做的东西是 style transfer 和 edge detection 还有 metric learning 的东西,其实这些东西都不简单,paper 阅读量很大。需要足够的 self-motivated 才能够处理得好。


找准自己想要钻研的问题,然后持续的看论文,想idea,实现想法!不断迭代!



一些常见的人工智能领域顶会


机器学习:ICML,NIPS,ECML,AISTATS,UAI 人工智能:AAAI,IJCAI 计算机视觉:CVPR,ICCV,ECCV 数据挖掘:KDD,ICDM 自然语言处理:ACL,ENMLP,NAACL 信息检索:SIGIR

其实我也列不全,分类也不一定正确,在 arxiv.org上面也有很多优秀论文,github 上面也有不少不错的开源项目



总结


数学和英语都很重要

机器学习的基础以及你对应的领域的基础也很重要,不然会成为你今后看论文的绊脚石

要学会选论文,看论文

开源代码要多看,深度学习框架要会一个

网上资源很丰富,要会利用,可以节省时间

做研究一定要有耐心

有事没事可以做个project玩玩,这种东西可以提高你的综合素质,也可以复现别人的论文

如果是就业导向的,一般都要求你基础算法扎实而且有很强的工程能力以及调过复杂的系统,最好发过顶会论文或者打比赛有了很好的成绩

我个人的话,因为我是做研究导向的,我其实觉得有一个合适的导师带着十分重要,如果真的有很强的 self-motivated 的能力的话,应该往顶会看齐,不要以为本科生不能投,投了中不了顶会,中的了顶会的大把本科生在。关键在于你有没有这份心,在这个过程中收获了什么。像我自己,我目前也没有投过和中过顶会,但你在准备的过程中,就能有所提高。 还有就是增强工程能力的方法就是复现别人的论文和结果,或者自己做一些小项目,要有针对性的去提高自己。找准了方向就往里钻研,掌握一套分析问题的方法,最经常的做法就是把结果可视化,找准一个合适的 loss function 等等等等。


计算机视觉方向博士如何做好科研?

本人刚刚保研结束,计算机视觉方向直博,对计算机视觉很感兴趣,想踏踏实实研究一番。基本掌握pyhton和c++等编程语言,不精通;对于深度学习的框架也只是有些了解,基础比较薄弱。目前有这样几个困惑:(1)如何提升自己的硬功夫,即面向科研工作时候的coding、paper reading等 (2)如何对计算机视觉这一领域有good idea,当前研究热点,新的思路可以有哪些渠道获得(3)博士可分为哪些阶段,即哪一阶段需要做哪些准备。

392 人赞同了该回答

我基友邀请我了就回答一下,仅仅只做参考

(1)无他,唯手熟尔,就是多读多写。论文就是越读越快的,我还是本科生的时候我导师告诉我刚入门时候要精读十篇好文章,我现在指导师弟师妹也是给他们挑好几篇文章让他们反复精读,起初水平不够的时候看论文很慢,经常抓不住重点都很正常不用急躁。读多了自然就越来越快了,后期看个摘要,看个插图甚至看个题目都明白大致内容了。关于coding就是多写,多去模仿,非计算机科班出身的我刚读博的时候代码很差,现在也不算好,但是这几年在学习别人的代码后也在慢慢提高,所以现在对于刚进实验室的师弟师妹我都对他们的代码有点要求,至少要做到模块化和复用性,现在github开源这么多有很多好的代码可以去模仿学习,跑跑开源代码多去写写,非常忌惮一个现象就是不动手去写,总是只跑开源代码,跑一个换一个框架,没有开源就什么也不会了,要动手自己去复现一些程序。

(2)good idea,这个我一直认可我导师的观点。我导师说有时候创新点不是整天天马行空想出来的,而是在你看了很多文章做了很多实验之后自然而然产生的,我的感觉也是这样,当你看了很多文章之后,你会发现解决A问题的思路可能在B问题上能够得到启发,当你做了很多实验之后你才能发现论文里隐藏的瑕疵点或者在某些场景下不适用,发现了问题很自然的就能想到一些解决的ideas。

(3)博士可能分为入门啥也不懂,入门了开始焦虑,有点感悟开始有成果,打通任督二脉成果井喷阶段,当然这个问题太主观也不知道准不准确。刚直博的时候可能还带着一些本科生的稚气,总是想有老师教你,喜欢读教材,重视上课和考试分数,不喜欢看论文,其实博士研究和本科素质教育差距很多,博士研究讲究专而精,本科教育是广而泛,所以很多本科生的方式不适合博士研究了,比如有些课程对你研究一点用都没有,(逃课这种事情我没有说,概不负责。。。),这个阶段可能就是啥也不懂啥都想学的阶段。之后你可能有点入门了,也有自己的课题了,你会发现读博比你想象中的难多了,本科时候你可能是学院里的佼佼者,满腔自信,但是你已经变成了学术界最弱的菜鸡,一篇论文里密密麻麻的公式满脑的不懂,第一篇论文迟迟出不来,你开始焦虑了,是否自己能够毕业。之后你经过很长一段时间的煎熬,你终于跟踪上了课题领域的前沿,终于有了一篇paper发表了,也学习了如何写论文,如何和reviewer交流。你已经把握住了领域的前沿,了解了过去的工作,心态也开始轻松了,现在满脑子的骚操作,这时候应该已经是博士中后期,写论文得心应手,看了大量论文知道什么样的工作能发表什么水平的paper,知道不同的工作有不同的讲故事手段,那么成果也会迎来井喷。

以上回答了题主的三个问题,后面是我的一些个人看法。

(4)现在做视觉的人太多,全世界最聪明的一批人都在做cv dl ai,所以发表一篇好paper真的不简单,你的idea别的学术老油条们很容易就能想到,做的还比你漂亮,所以横向比较那些做理论方面的博士同学可能成果比你早比你多,一定要沉得下心保持自信持续努力,厚积而薄发。

(5)博士我认为还是要open一点,闭门造车一个人搞还是太难,多去接触接触大牛们的工作,多去听听别人的分享,并且也勇于分享自己的见解与工作,多与别人交流讨论,是有帮助的,多于一个博士而言,除了做出好的工作以外,writing 和presentation 的功力也非常重要,如何精确简洁的用文字描述你的工作,如何面对不同类型的听众来做一个合适的报告,都是很重要的技能,这些平时多思考,多学习,多尝试都能慢慢提高。

(6)努力与专注,做科研并不有趣,需要你自己内心对科研真心的喜欢,会自主的去关注最新的工作,会为自己做出的工作有自豪感,能够从研究工作找到乐趣,保持每天都努力,完成这场博士学位的马拉松。

(7)对于视觉而言,arxiv的cvpr版块是每天都必须关注的,cvpr iccv eccv三大顶会,pami ijcv等顶刊的论文必须熟知,iclr npis aaai等次相关的顶会也要关注。tf pytorch keras mxnet caffe等框架至少熟用一个,也要关注这些框架的更新动态。新智元,机器之心,paperweekly,ai研习社等等工作号也都可以关注,每天都会发布领域最新动态。旷视科技,商汤,微软亚研院,图森,依图,腾讯优图等等企业也都可以去申请实习,里面真的大牛太多,资源太好,会学到很多东西。

(8)愿你做有用的科研,做最好的工作。这里我非诚喜欢胡国圣老师在朋友圈发的三句话,希望他不要打我
413 人赞同了该回答

跟楼主走过一样的时期,一些拙见:
1,首先一定有motivation,不论外面的资本再疯狂,也要守住初心,抗拒诱惑,坚守自己的热望,每天醒来的时候因为有那么多的新的discoveries在晚上睡觉的时候出现而感到开心,这是一个最好的时代;
2,可以花一点时间夯实自己的基础,Bishop的《Pattern Recognitions and Machine Learning》以及Ian Goodfellow的《Deep Learning》可以试图先看一遍(如果不是有一定经验,第一遍看完大多数有点似懂非懂 and That’s ok,看不懂就略过,去看论文的时候不懂得再回来看… 跟背GRE单词套路差不多),准备好把这两本经典在你PhD的不同时期,反复的看,每次看都会有惊喜(至少我是这样)能读英文就读英文版;另外吴老师的课也是很优秀的,cousera跟百度云,能省你几百刀lol
3,编程基础,Python/lua/matlab/C++ 现在是最流行的几种语言,作为科研人员,python当然是强烈的推荐了,因为快,因为publications开源的代码大多也是Python,或者像Yolo基于作者自己写的darknet这种也很快会有python版本出来,life is short, use python.
4,框架,OpenCV不用说了,你离不开它…… 关于深度学习框架,yangqing老师说得好,框架都是框架,不管是symbolic的还是imperative的,底层都是跑的一样的东西,关键是能出活。我自己的一点经验,使用过Caffe/Tensorflow/Caffe2/Pytorch 之后觉得 目前为止Pytorch真的是我个人觉得最最适合科研人员的一个框架,十行就能写一个CNN,若是tensorflow,光graph 跟 session就很verbose,(你可以感受下,tensorflow:github.com/KleinYuan/cn,pytorch:github.com/KleinYuan/ca), 外加很多好的算法pytorch都有对应的开源代码,production环境转换成caffe2也是相当easy。当然Tensorflow的好处也有很多,比如tensorboard visualize更友好,提供了很多的API,可以各种操作tensor,google cloud版本tensorflow性能更是极大提升单机版的性能,然后TensorRT3 也开始支持tensorflow,社区用户群强大,例如伯克利cs294 就是用tensorflow作为教学语言(更新:tensorflow今天终于出了eager模式,可以像pytorch一样愉快的debug 跟 hit&run了,不过tfe跟tf api现在兼容性还有待观望跟提升)。


当然了,全部框架都会是最好的lol,如果可以,为什么不呢?

5,学术追踪,找一个iOS或者Android的RSS订阅app,订阅arXiv上stat.ML/cs.AI/cs.CV 确保你每天能看到最新的paper(平均每天50-100篇不等),不感兴趣的可以看个title就略过, 感兴趣的看看abstract,然后mark 晚上download下来放到Mendeley里,你可以跟你导师(如果他会这么做)一起在Mendeley上协作(comments是可以sync的),另外微信公众号机器之心,新智元,AI科技评论之类的也可以关注
6,交流,一定要找到一个group跟你一起相互交流brainstorm,闭门造车很低效率
7,多写代码,没事的时候把自己喜欢的paper 用自己喜欢的框架 implement 下,一来锻炼自己对paper的理解,二来锻炼自己的代码能力,三来造福吃瓜群众。

大概就能想到这么多了,加油!

你可能感兴趣的:(Scientific,Research,Method,人工智能,计算机视觉,科研)