如何學習圖像處理(計算機視覺)的一些思考與分享

       伴隨着圖像處理技術的發展,我們每天無時無刻都在接觸着圖像處理的一切,打開相機,設置美顏程度,伴隨着快門鍵的按下,一張瘦臉磨皮的人像處理完成了。按下手機的解鎖鍵,前置攝像頭已經獲取了你的人臉圖像,並在你的臉上打上了若干個點,與數據庫的信息進行比對,一次人像比對完成了。車輛行駛到單位校園門口,你的車牌已經被切割成一個個字母、數字與漢字,隨着欄杆的擡起,又一次圖像處理完成了。伴隨着圖像處理的廣泛應用以及目前人工智能在圖像領域的應用,更多的圖像處理技術爆發式的增長,也更多的人投入到了這個領域的研究。作爲一名行業從業者,如何學好圖像處理就顯得甚爲棘手。博主作爲一名“半路出家”的圖像處理入門者,在這裏也給各位讀者分享一下一直以來的一些思考,因爲本人水平有限,不妥之處還望見諒。

1、高山平頂上,盡是採樵翁。人人各懷刀斧意,未見山花映水紅。        ——何權峯《眼界,決定你的世界》

        其實很多時候,我們都侷限在自己的小平臺裏,沾沾自喜,而忽略了你身邊技術的飛速發展,也許這種沉浸對於一些傳統行業來說,淘汰一個人的速度是十幾年甚至幾十年,但是對於計算機領域來說,這一淘汰也許就是一瞬間,這也是爲什麼企業在招聘應屆生事,一方面關注你的技能,但也非常關注你的學習能力(簡單說就是你可以什麼都不會,但你學的快不?但你願意學不?),而這種學習能力往往是需要長時間培養鍛鍊的,舉個例子:清華北大的學生永遠不愁找不到工作,而去清華北大招聘的企業也往往最不看重你的專業,因爲他們知道,這裏有着國內學習能力最強的人。說的有點遠了,回到剛剛的話題,其實給博主觸動最深的還是看到了CSDN某大神的一篇博客《阿里巴巴(菜鳥) - 算法工程師(機器學習)提前批筆試面試總結》中面試環節面試官問的一個問題:介紹CVPR2018你最感興趣一篇論文的工作?看到這裏博主猶如當頭一棒。自己也只是聽說過CVPR,當然也會留意一些媒體的報道或者是推送,但是從來都沒有認真的甚至說大致的瀏覽過每一年會議的文章內容甚至是會議目錄。而自己也“井底之蛙”般的只能感嘆自己也許將是接下來就被淘汰的那個。其實廣一點說,我們的本科生或者研究生期間,可能你的實驗室做的東西很low,亦或是你是一個“半路出家者”,或者我們的“出身”不是很好,這些都或多或少的會限制我們的眼界。但是我們自己不應該允許自己做那隻“井底之蛙”,我們更應該關注或者說擁抱我們所處這個行業最新、最前沿的技術(比如2018CVPR的最佳論文《Taskonomy: Disentangling Task Transfer Learning》);關注我們這個領域的大牛(比如做計算機視覺我們一定繞不開李飛飛教授、做相機標定一定離不開張正友教授)。眼界決定我們的視野,這也是爲什麼很多頂尖的公司在招聘的時候一定會加上如下兩條:1、所在實驗室爲國家重點實驗室或者在國內頂尖的科研機構有過實習經歷  2、在頂級會議發表過相關文章。會當凌絕頂,方能一覽衆山小!

這裏,博主附上計算機視覺領域的CCF推薦會議:計算機視覺及圖像處理領域會議,CCF推薦(A類,B類,C類),感興趣的讀者可以選取和你研究課題相關的較高水平的會議關注查看。

2、知其然與知其所以然。 ——《朱子語類》卷九《論知行》

        這裏我們要說,很多人在從事圖像處理工作的時候更多的是被動的被推着走,只知其然而不知其所以然,還是舉個例子,我們都知道,圖像處理的前期操作就是獲取圖像,而獲取圖像的一個重要途徑就是通過相機獲取圖片,相機獲取到的圖片更多程度需要去標定矯正。好了,問題來了,很多人知道,我獲取圖像了,按照“前人所述”我需要進行相機標定,設置標定板、計算內外參數...一些列工作完成了,我們也得到了“前人所述”的內外參數,那接下來呢?我們怎麼矯正呢?爲什麼要做矯正呢?不矯正對我的圖像處理過程有什麼影響呢?想必這個問題是很多讀者沒有考慮過的,博主也看了很多的博客,相機標定寫內外參矩陣的大有人在,圖像生動、推導詳盡。但說獲取這些參數只會該幹什麼的博客卻是鳳毛麟角。反觀之,我們其實很多時候也都停留在這樣的階段,就是隻知道,這個事情該這樣,但是爲什麼要這樣卻知之甚少。

3、一門科學,只有當它成功地運用數學時,才能達到真正完善的地步。  ——馬克思

        其實博主本人也是一個討厭數學且數學不好的人,但是越是從事圖像處理工作越深,越發覺得數學的重要性。數學也許就像是你的導師,你很多時候很討厭,但是卻繞不開。圖像處理時我們會發現,圖像在計算機內其實就是一個個矩陣,圖像的處理很多時候就是數學變換,比如去噪(數學上的均值或者中值處理),比如放大縮小圖像(數學上的插值和採樣)等等,這裏我們還是舉一個例子:從事圖像處理的人應該大部分都知道(最起碼聽說過)SIFT特徵點檢測算法,這裏不展開論述,我們只拿其中的一個關鍵部分來說,SIFT算法中有兩種方法,分別是:

a、使用LOG圖像(高斯拉普拉斯變換圖像):其步驟是:先將照片降採樣,得到了不同分辨率下的圖像金字塔。再對每層圖像進行高斯卷積。這樣一來,原本的圖像金字塔每層只有一張圖像,而卷積後,每層又增加了多張不同模糊程度下的照片。大概就是下圖這樣:

b、使用(DOG圖像):DOG即高斯差分。構造高斯差分圖像的步驟是:在獲得LOG圖像後,用其相鄰的圖像進行相減,得到所有圖像重新構造的金字塔就是DOG金字塔。大概就是下圖這樣子:

        好了,問題來了,這一數學上的改進,能有多大的差距呢?我們可以看到,就是這樣一個“看似簡單”的改進可以使我們的運算量小一個數量級!數學有多重要!

        也許上面的過程有一些讀者沒看明白,什麼又是高斯卷積又是圖像相減的,太麻煩,那我們再介紹一種非常“簡單”的特徵點檢測算法(FAST) ,有多“簡單”呢?這裏先放一張圖:

        爲了讓大家簡單易懂,這裏我們簡單的說原理,可能與實際不相符,簡單說,就是你要找特徵點P,那我在p周邊畫個圈,設置一個閾值,如果有若干個點大於這一閾值,我們就理解爲p是特徵點(閾值爲9就是FAST9,閾值爲11就是FAST11)。驚不驚喜,意不意外,就是這麼好理解,而且這一算法的速度快,效果也不差。其實這種方法博主更多的理解爲是一種數學上的改進。而我們縱觀衆多劃時代的文章、方法、算法,其實其本質大多爲數學方法在各個領域上應用的改進。學好數理化,走遍天下都不怕,數學,可怕卻重要! 

4、如果我能看得更遠一點的話,是因爲我站在巨人的肩膀上。  ——牛頓

        伴隨着計算機網絡的發展,開源的趨勢化(強調專利的微軟收購了Github並主動開源了衆多代碼),我們可以找到更多的資源與資料(BaiDu,Google一鍵直達),一個個的開放圖形庫和開放圖形軟件(最常見的OpenGL、OpenCV),我們有着比以往任何時候更多的資源,也有着比以往人更多的機會接觸到科技的最前沿(頂級會議大部分都是開源的,我們可以隨意下載),這裏博主特別強調,大膽的去使用這些工具,抱着書本往死裏啃,問周邊同學或老師有效,但這樣的時代終將過去,信息交互的年代,每一個人都是一個信息源(有點像衆包的概念),站在巨人肩膀上引領科技進步的人也許不是你我,但是你我可以更容易找到這個世界上的巨人在哪裏了,我們的獲取信息的渠道更多了,我們身邊的信息源更多了(比如MOOC,我們可以傾聽最好的老師講課),這裏說點題外話,推薦一部紀錄片《互聯網時代》,當時博主看的熱血沸騰!回到主題,不主動擁抱這個時代的人一定會被時代所拋棄。能活到最後的人一定不是閉門造車的,一定是那個敢於攀登,尋找巨人的人。

5、工欲善其事,必先利其器。  ——《論語·衛靈公》

這裏其實博主還是老生常談的強調你的編程能力,我們都知道,一切的圖像處理的最終實現都是程序,更是算法(硬件處理也有硬件程序、算法),而編程能力就好比士兵的槍、老師的粉筆。再好的想法如果不能付諸於一行行“冰冷”的算法最後都只能是鏡中花、水中月。而選擇哪門語言作爲你的“槍”這裏博主就不再贅述,直接放上之前寫的一篇博客的內容:

Python?JAVA?C/C++?
      其實實驗室也會有一些師弟師妹問我這個問題,我該選一門什麼語言呢?當然,我在這裏不去評論哪門語言的優劣好壞,僅僅針對每一門語言在找工作時選擇的機會跟大家做一些分享,首先,如果你需要找工作時自己能多一些機會和選擇,那麼僅僅會MATLAB或者Python可能還是遠遠不夠的,畢竟找工作時需求量最大的依舊是JAVA\C\C++相關的工程師,如果你僅僅會MATLAB或者Pyrthon,那麼你找工作時可能只能選擇算法相關類的工作,而這類工作,我們都知道,和你競爭的往往都是一些大佬,算法崗也因爲其相對的高工資和低勞動強度而成爲近兩年來淘汰人數最多的崗位之一。

      所以,這裏強烈建議如果有可能,請抽出時間選擇JAVA\C\C++其中一門語言進行系統化的學習(這裏我們只談最常見的,PHP,GO等語言博主沒有學過,也沒有具體瞭解,就不在這裏獻醜了),當然選擇JAVA你還可以轉向安卓開發,C\C++則更加偏底層一些。這一切的選擇基礎需要你綜合衡量,博主特別討厭一些鼓吹某某語言萬能無敵之類的話,舉個例子C++的確可以坐界面,但顯然,做界面C++不是最好的選擇,合適的纔是最好的,不是麼?

6、你看江面平如鏡,要看水底萬丈深。  ——諺語

        我們很多人,其實也包括博主本人都有這個問題,就是用一個東西的時候想的不夠深入,直至其表,不知其裏,還是舉個例子,我們每個人都應該知道的邊緣檢測算法,博主相信,用起來不難,網上搜一下代碼,一搜一大片,有一定程序基礎的人都可以輕鬆實現,但是深入思考,我們知道他的原理麼?這裏,博主將所有人分爲幾個等級,大家可以以邊緣檢測算法作爲作爲自己的對照,看看自己停留在哪個級別:

a、還沒入門的“行外漢”:什麼是邊緣檢測算法?不會怎麼辦?問周邊人吧!

b、已經入門的“小菜鳥”:emm,好像有印象,去網上搜一下現成的程序,改一下圖片輸入就行了!

c、有思考的“程序猿”:算法每一個參數什麼意思啊?我改一下會怎樣?

d、負責任的“熟練工”:這個算法的原理究竟是什麼樣的?怎麼就找到邊緣了?找個博客看看!

e、企業搶着要的“大牛”:算法原理我看懂了,自己手撕代碼試一下!

f、“大佬、科研工作者”:數學公式可能需要自己推一下,看能不能改進!

看看,一個簡單的邊緣檢測算法我們就可以看到不同人的不同水平,你的思維深度更多時候可以決定你的高度!

7、思考可以構成一座橋,讓我們通向新知識。 ——普朗克

      小時候爸爸媽媽就教會我們多問一問爲什麼,那時候最喜歡看的書也是《十萬個爲什麼》,但是越長大越發現自己喪失了這種質疑和思考能力,我們更多時候的想法是“哪有那麼多爲什麼!”。做項目,搞科研其實更多時候需要我們這種問問題的能力,就好比之前的例子:相機標定,爲什麼要標定?其實道理大家都懂,做到的卻太少了,包括博主本人,這裏寫出這條大家共勉!

8、亡羊補牢,猶未遲也。  ——《戰國策·楚策四》

        可能很多人看到博主寫了這麼多會覺得可能自己再某個或者某些領域的欠缺有點大,有些失落甚至灰心喪氣。其實博主需要在文章的最後和大家打打氣,我們發現了問題和漏洞只要積極去改變,就會發現事情就會朝着好的方向發展。誰能想到《三體》作者劉慈欣若干年前還在水電站工作?又有誰能想到阿里雲的頭頭是一個哲學博士呢?最後一句話贈與自己也贈與能看到這篇文章的讀者們共勉:改變,從當下開始!

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