請問研究生入門機器視覺C++應該自學到什麼水平?
小白研究生剛剛入門機器視覺,開始自學C++,再入門opencv,開始看看數字圖像處理,請問C++應該自學到什麼程度,這樣的學習路線正確嗎,麻煩各位大神指點,拜託拜託啦!!!
這個問題想必很多人都曾遇到過的,再過段時間,題主或許又會去糾結基礎演算法與機器視覺演算法之間該如何去權衡?這一類問題其實最終都會歸結到兩點,一是題主對自己的定位,是更加側重工程還是更加側重學術,二是時間。
通用階段:
第一階段,快速入門c++。首先不管你c++基礎如何,花一周左右的時間快速入門,編程語言這東西前期不宜陷太深,特別是c++,後面遇到具體工程問題的時候你會大量閱讀代碼的,那個時候才是提升編程能力的關鍵時期。第二階段,結合opencv 的參考教程寫各種demo。這個時期很有趣,因為你會遇到各種好玩的演算法demo,但是同樣要快,最多兩周,即使不懂原理也不要緊。
第三階段,看數字圖像處理的書,你會發現之前跑過的demo里有很多基礎操作這裡面都會有提及,然後你可以再回過頭去看那些demo,收穫應該不少。
第四階段,結合具體問題熟悉消化前面的知識。這個時候老闆應該會給你安排一些任務了吧,拿到問題後不要盲目開干,充分利用google,csdn,
github,搜索相關博客跟代碼,博客可以幫你整理思路,代碼則直接給你實現。這個階段很關鍵,你不僅會看到圖像處理演算法是如何使用的,還能大量閱讀代碼,我建議你看到以前沒遇到過的c++用法時及時翻書弄懂,看到自己感覺很elegant的代碼的時候要及時總結和重現,這對提升c++很有幫助。再往後就要根據你自己的抉擇了,如果你想偏工程一點,並且是真的對編程感興趣,我建議你開始上Linux ,玩cmake git markdown 甚至是vim emacs。哈哈,折騰,其樂無窮!然後把演算法基礎打牢。
如果你想偏學術一點,我建議你在機器視覺甚至是CV,DL里選擇一個具體的方向,然後看大量paper併兼顧數學基礎,走著走著你就會開始想轉博了......
其實上面兩個方向也並不衝突,學術大牛很多都是編碼高手,真正衝突的是沒時間!(打臉了)
就說這麼多了,手機打字真是累,所以,一起加油吧騷年!
你是學機器視覺,不是做碼農,C++只是工具,就像廚師的刀和理髮師的剪刀,這把刀越快,你的操作空間越大,但是如果你別的刀用的好,也不用特別在意這把刀,不是每一個機器視覺的大師都會做電腦系統。有人說什麼白板編程的,我不贊成。演算法思路的掌握有時比實際書寫更重要。手機沒電了,後補。
主要看今後的需求,不同的目標有不同的編碼要求。一般地編碼水平越高,今後的靈活性就越大,但訓練編程需要花大量時間,提高機器學習的研究水平也要花很多時間,人的時間和精力是有限的,取一個合適的平衡點才是最重要的。具體看個人特點和目標了,很難有統一標準。補充一下:考慮到題主的大概情況是視覺+cpp,建議在學完視覺的同時,把所有剩餘時間都投入到cpp的提高上,最好結合視覺項目應用cpp,這樣兩不誤。而問到水平應該達到如何,說實話,如果沒有很好的編程基礎,研究生三年在學專業知識、完成論文之餘的學習,根本入不了cpp的門,只能學多少算多少。其實用python,然後調用cpp庫是最好的捷徑,cpp不需要多少入門,只需看得懂代碼的大概意思就行了。
看你想幹嘛。
如果只是搞演算法,做做實驗,用Matlab是個不錯的選擇,因為相對C++比較簡單,可以快速實現一些簡單演算法。缺點是Matlab代碼跑得慢,尤其在一些循環上面,當然,用一些向量化的方法可以加速。
如果想開發工程,一般都不用Matlab,用OpenCV是不錯的,C++的好處就是代碼運行得快,但是C++相對較難開發。如果你想快速入門機器視覺,圖像處理,用Opencv的Python介面也是不錯的,代碼量少,可以快速運行程序看看結果。當然,想學得深入就要看看一些經典的相關論文,比如SIFT特徵.HOG特徵結合SVM分類器做行人檢測,混合高斯背景建模,這些演算法在OpenCV里雖然只是短短几行代碼調用,實際的底層演算法卻蘊涵挺多的圖像處理,機器學習理論。隨便找本c++的書看看面向對象就夠了,主要在演算法,opencv不難讀的。如果要加上qt的話,學的東西可能要多一點了。
個人經歷:我也是入門階段,使用的工具書是經典的C++ Primer(之前有一定基礎),緊啃慢啃看了前面的16章。現在看一些參考書(如高博視覺SLAM十四講,Opencv2計算機視覺編程攻略)對裡面的一些簡單介面類的設計,functor的設計和使用,模板編程還是可以看懂的。所以建議c++ Primer閱讀前16章,不但是不錯的教輔書,更是百科書。仔細看完後入門水平是肯定具備的。
學C++也就為了用opencv吧,那就不用學很深,看完21天精通那類書基本就可以了。除了C++,你可能還要用到Python,MATLAB,Halcon,CUDA,JAVA還有與之相關的各種庫。慢慢學吧,少年。
推薦閱讀:
※機器視覺新手應該如何學習?
※有哪些學習openCV的網站或書籍?
※只掌握 C 基礎可以直接學 C++ 嗎?
※如何評價ILSVRC2015?
※如何理解CNN在CV與NLP領域運用的聯繫與區別?
TAG:計算機視覺 |