基於FPGA的機器視覺,如何系統地學習?

有哪些學習方向和路線?如何入門、深入和提高?

已具備語言和工具基礎,怎樣專研這個方向?


瀉藥。

說說個人經歷吧。剛畢業那會兒是是做圖像處理以及視頻編碼演算法的,碰到一個好師傅,給演算法/軟體打下了一個比較好的基礎。講真,對演算法沒有一個很好的理解,是寫不出很好的HDL實現的。

幹了兩年,瓶頸,離職。不喜歡北京的天氣,換城市,順帶休息了一段時間。

換工作前,我就想好要換行業了。休息期間,也曾了解過幾家新興的對FPGA有需求的公司,不過還是沒太大興趣,無非就是介面/存儲相關等,過於枯燥。

憑著之前打下的底子,順利拿下這邊互聯網公司的offer,視頻編碼演算法優化方向。幹了數月,才明白所謂的軟體搬磚的含義。遂有了換方向的想法。

偶然機會。來到了現在的公司,主打深度學習視覺演算法。原以為是做FPGA的,結果進來之後做的是ARM/x86/GPU優化。找誰說理去。。。不過也得虧這段優化經驗,我開始對計算機體系結構/演算法/代碼優化有了更深入的理解。也就是在今年,從零開始完成了一套基於FPGA soc的深度學習解決方案(IP+driver+SDK+compiler),即將推出ADAS相關解決方案。

從我這邊經歷來看,其實並沒有刻意去準備什麼。視頻編碼演算法優化機會來了,我做好了演算法,同時研究了編碼演算法;性能優化機會來了,我研究了ARM/x86/GPU的底層架構,做好了優化。現在,深度學習來了。。。第一版成果已完成,希望更上一層樓。

希望這個答案沒有偏題 :)


結合自己經歷簡單說一下看法。

之前在國內應該算最強的通信FPGA團隊工作了5年,視覺方向又做了4年。現在在機器人公司負責機器視覺和神經網路方向的高性能計算團隊。有志從事該方向的同學,歡迎大家聯繫我。

系統性的學習,一定要從系統出發。

FPGA在很多機器視覺系統里,只是用來加速一些計算量大的「核心」部分,看似掌握了核心,但是和軟體/演算法相比,在熟悉系統上,有天然劣勢。

對系統的理解,需要刻意練習,只有掌握了系統,才能做好FPGA based vision。

了解系統,從下往上和從上往下都是可以的。

從下往上適合本來就比較基礎的同學,沒條件一開始就直接了解各種上層演算法和功能,那可以從自己做的單點技術出發,不斷向外擴展了解,一直了解到整個系統。

舉例來說,如果給你的工作是讓你用fpga加速特徵點(角點)檢測,這是不少機器視覺系統的最基礎演算法。

也許你可以問這些問題:

1.數據是怎麼進入我的模塊的?

2.我的前級模塊是做什麼的?

3.數據的輸入源頭是什麼?攝像頭?它有什麼特點?它是CMOS,CCD,它是單目還是雙目立體?它是rolling shutter還是global shutter?多問為什麼

4.我處理完之後數據給誰了?接下來是運動跟蹤,還是特徵描述還是立體匹配?

5. 我做的模塊是如何影響系統功能的?還有哪些同類的或者適合配合使用的演算法,為什麼用這個呢?

從上往下適合已經有些經驗的同學,從一個系統架構師的角度來理解。從上層的系統功能入手,把每個功能的演算法原理有個大致了解。幾乎沒有哪個機器視覺系統是純FPGA的,了解整個功能的演算法原理後,要進行軟硬體劃分。弄清楚哪些部分該放在軟體處理,哪些放在FPGA處理,軟硬體如何交互。

然後才是具體到FPGA內部架構的設計,要實現哪些演算法,它們的連接方式,它們被要求的處理性能,以及最後的實現等等。

做完這些,就可以說系統性的了解了基於FPGA的機器視覺了。


先佔坑,等幾個月後我東西搞出來了,我再系統的回答這個問題。


這個題目太大了,首先機器視覺的領域就非常廣泛,並且和多個學科交叉(仿生學/心理學/計算機/電子/光學/圖像處理/模式識別/人工智慧 etc.),從機器視覺選點讀博士都可以來幾十個不重樣的,到底那個領域,在讀就要結合你的學校老師資源,研究所要結合帶頭人大方向,工作就要結合你公司的市場產品領域。

再基於FPGA, 那至少是傾向於理論研究,應用(如具體軍事,航空航天,2B ,2C)等等你至少給個方向吧?

你這是找人寫書呢


不知道你的知識層次和架構。

不知道你用的哪家的晶元,綜合工具以及涉及過的方案或方向


推薦閱讀:

我想實現一個基於機器學習的較穩定手勢識別,識別6個手勢,分別是伸出0,1,2,3,4,5根手指。我打算只根據手的形狀來識別手勢。用哪種機器學習演算法比較好?應該如何準備測試集,應準備多大的測試集?
機器視覺的相機標定到底是什麼?
無人機怎樣進行視覺定位?
本科生,數字圖像處理方向,希望從事視覺檢測工作,本科能否勝任這些工作?

TAG:現場可編輯邏輯門陣列FPGA | 機器視覺 |