計算機視覺方向博士科研學習總結 拜讀

轉載來源: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的理解,二來鍛鍊自己的代碼能力,三來造福吃瓜羣衆。

大概就能想到這麼多了,加油!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章