文 / 阿里淘系 - 白羅
什麼是計算機視覺 (Computer Vision)?與計算機圖形學 (Computer Graphics)以及影象處理(Image Process)有什麼區別?
用一句話來概括,計算機視覺(CV)是一門讓計算機從影象中提取有用資訊並加以分析的科學。利用CV提取出的資訊後續可以用於輔助一些決策或者任務,比如醫學影象分析、工程測量、自動駕駛、機器人學等等。
兩個時常會被放在一起討論具有混淆性的概念是計算機圖形學(CG)與影象處理,它們之間的區別其實也是非常簡單,CV和CG在其實是一個方向相反的過程:CV是計算機從影象中提煉有用的資訊,而CG透過使用數學模型和計算機演算法來生成影象。而影象處理的輸入和產出都是影象,只不過產出的影象在某些特徵上被強化或者提取出來了。(三者的流程圖如下)
從上述定義我們也可以看出來,CV並不是類似谷歌街景, Google Glass, Pokeymon Go (AR), deep fake等一些聽起來與之有所聯絡的應用所使用的核心技術(也許某一環節會用到CV,但不是核心技術)。而CV真正高強度應用的場景是無人駕駛, OCR, 安檢時對包裹的智慧篩查, 醫學成像分析, 機器人視覺, 軍事上透過影象對目標的篩查定位等等需要計算機分析影象以提煉資訊的場景。
計算機視覺與人眼的對比
人眼的視覺簡單來說是一種對三維世界的二維投影(受到視角變換的影響),可見的波長在400-800奈米之間,色域可以被RGB系統概括。而三分之一的人腦都與人眼中的視網膜、視神經相連或間接相關。
計算機視覺的成像儀器並不像人眼那麼單一,相比於人眼的可見光頻域,計算機視覺甚至不侷限於電磁波的領域(例如B超成像)。關於成像的維度,傳統相機為二維影象,雷達等為2.5D影象(多出的半個維度是距離),核磁共振等為3D影象(由大量二維影象在Z軸上疊加形成第三個維度)。
計算機視覺鏈路概覽
如果我們嘗試對CV的流程分步驟進行一個抽象化的總結,可以得到兩條非常經典的鏈路。在傳統的CV手段中,我們很少會直接將二維影象(甚至更高維度的影象)展平到一維,然後直接輸入到傳統的機器學習模型(比如決策樹家族、SVM、KNN、MLP等等)當中,通常我們會對原始影象做一次特徵提取,將一些更資料化的特徵作為機器學習的輸入,讓模型更準確高效地運轉。而近年來,深度學習的崛起很大程度上顛覆了人們對這一經驗規律的認知,CNN及其衍生模型(ResNet等)、GAN、已經兩年年火熱的自監督式學習(如對比學習)在很多情景下已經可以取代手工特徵提取,一個非常經典的例子,過去的圍棋AI中,工程師會提取每塊棋的氣、雙方所圍空的位置大小等等資訊作為模型的輸入,但是隨著AlphaGo系列的橫空出世,手工提取特徵被證明在這一情景下遠不如讓深度學習模型的卷積及池化層自行提取來得準確高效。
深度學習是否只是炒作下曇花一現的泡沫幻影?
在過去幾年中,很多懷著對深度學習憧憬的工程師在大熱潮投入了這個領域,但可能到現在發現它並沒有如預期般的那樣神乎其技。冷靜下來的人們開始反思,深度學習是否被過度炒作了?要闡述這個問題,可以從Gartner曲線 (Gartner Hype Cycle)談起。縱觀一項技術的生命週期,往往可以被分為五個階段:1. 初創的攀升期 2. 泡沫膨脹的巔峰期 3. 泡沫幻滅的低谷期 4. 邁向成熟的光明期 5. 在生產中落地的高原期。
下面幾張圖為Gartner官方對近期一些比較火熱的前沿技術的統計結果。如圖所示,在近五年內,深度學習(箭頭標出的)正在從2016年的期待值的泡沫巔峰逐步走向幻滅低谷期,可以預期的是,深度學習接下來會伴隨著質疑和悲觀預期經歷很長一段時間的蟄伏期,直至邁向成熟。
影象數字化
空間取樣、量化、與連通性策略是將影象做數字化表達過程中涉及到的重要概念。 空間取樣: 描述單位空間內的樣本數量。
量化: 將每個畫素點在色彩通道內的亮度按照區間從連續分佈轉化為離散分佈的過程。
四連通與八連通: 畫素點計算領域的劃分標準。四連通即是畫素四條邊相連的區域,八連通比四連通多四個角。
距離: 歐式距離 (Euclidean) - 兩點之間的直線距離 曼哈頓距離 (City Block) - 沿著方格線行走的兩點間距(即僅水平和豎直四個方向移動) 切比雪夫距離距離 (Chess Board) - 沿著方格線及對角行走的兩點間距(即水平、豎直、以及對角八個方向移動)
區域連通性演算法
一張圖片中往往有前景(foreground)和背景(background),在我們判斷圖中哪些畫素點連成一個區塊之前,我們需要確定前景和背景的連通性策略:通常有背景四連通、前景八連通與背景八連通、前景四連通這兩種。為什麼不採用背景前景都是四連通或者八連通的策略呢?如下圖所示:
背景如果和前景保持相同的連通性策略會導致上圖中前景和背景完全連通或者完全破碎的極端局面。
遞迴演算法 (Recursive Algorithm)
作為一種計算畫素連通區域的基礎思路,遞迴法的策略非常簡單:遍歷影象中所有的畫素點,遇到未標記區域編號的點即遞迴用當前的區域編號標記與之相連的所有畫素點。
順序標記法 (Sequential Method)
儘管遞迴策略能夠解決問題,但是對資源損耗過大,這裡有一種進階的方法可以運用與畫素區域連通性問題:
- 遍歷影象中所有的點,如果與之相鄰的點已被標記編號,則對改畫素點做相同的賦值。(對於一個四連通前景有兩個已經遍歷的相鄰點,對於一個八連通前景有四個已經遍歷的相鄰點)如果沒有相鄰點被標記編號,則在之前的編號上加一。這裡存在一種特殊情況,圖中紅色箭頭指向的畫素同時存在多個編號不等的相鄰點,此時我們需要標記編號2和3是等價的。
- 第二次遍歷影象中所有的點,合併所有先前被標記為等價的編號。