要是評選人類身上最精巧的器官,那么眼睛一定會在候選名單之中。視覺能夠給我們的生活帶來非常美好的體驗:坐在海邊一座安靜的小屋門口,悠閑地看潮漲潮落,靠的是視覺;在科研機構的實驗室中,科學家們通過顯微鏡觀察細胞的各種結構,靠的是視覺;在一次商業談判中,我們通過觀察對方代表的面部表情來判斷對方的心理從而讓我方獲取更大的利潤,靠的依舊是視覺。
機器有視覺嗎?
視覺對于我們人類來說是一種非常重要的感覺,那么計算機是否也能具有視覺呢?答案是肯定的。計算機視覺簡稱CV(computer vision),在20世紀的下半葉就已經被提出。計算機的視覺器官主要是攝像頭,如同我們的眼睛一樣可以接受 圖像信號。但是如何處理與分析這些信號并產生出“認知與決策”,才是這項技術的奧秘所在。
圖像在計算機的世界里通常被表示為一系列網格狀的像素矩陣,這一表示形式是大多數圖像處理技術的基礎。我們可以通過坐標位置來確定某個像素點的位置,并通過更改該點的像素的值來更改圖像的顯示。圖像的色彩空間常用RGB表示,即 Red,Green,Blue,空間中的 RGB 分布取值范圍都在 [0, 255],呈均勻分布。同人類理解世界一樣,對于計算機來說同樣有“知識的表示形式決定了學習的難易程度”。
為了更好的表示圖像信息,還有兩種常用的顏色空間表示方法, 一是HSV: 色調 Hue,飽和度 Saturation,亮度 Value。這個空間中的顏色分布呈現為一個圓柱體。由于色調通道在不同的光照條件下變化范圍不大,而亮度通道則在不同的光照條件下變化明顯,因此可以通過調整色調通道的值來更好的選擇目標區域而避免光照條件的影響。
二是HLS:色調Hue, 亮度Lightness, 飽和度Saturation,這個標準幾乎包括了人類視力所能感知的所有顏色,是目前運用最廣的顏色系統之一。由于在大部分計算機視覺應用中,光照條件對于算法的識別能力是有影響的,后兩種顏色空間表示方法考慮了亮度信息,因此可以用于圖像的光照條件的分辨。
圖像處理主要是通過圖像增強、圖像恢復使得圖像更加清晰,從而方便人們進一步觀察和分析。例如20世紀50年代末,衛星航拍的圖像往往不夠清晰,這時候人們通過計算機的圖像增強功能來獲取更加清晰的圖像,從而幫助為專家分析提供便利。而模式識別主要是指識別出圖像中某些特定的“概念”,例如找出圖片中的一只貓,或在一張充滿漢字的圖片上找到某個特定的漢字。如何能在一個基于數學和邏輯的機器上形成某種“概念”,成為了模式識別和機器學習研究的重點與突破性的技術。
模式識別在20世紀60年代初開始就被廣泛的認可,例如當時就已經具有了能夠識別圖片中的英文字符的識別程序,雖然識別效果和現代的技術不可同日而語,但還是能夠減少一部分人工的工作量(人們不再需要將字符一個個手動輸入計算機)。盡管當時計算機視覺在二維的圖像增強和模式識別這兩個領域已有廣泛應用,但人們并不滿足于此。我們人類看到的世界是一個三維的世界,因此人們也希望計算機也能夠看見一個三維的世界? 1965年羅伯特的研究是計算機視覺研究從二維轉向三維的標志。通過一遍遍地讓計算機觀察圓錐、圓球、立方體等模型的照片,以及一遍遍地調試程序,羅伯特成功地讓計算機識別出了二維圖像中的三維結構和空間布局。這使得從二維圖像中提取三維信息成為了可能。從此,計算機視覺得到了突飛猛進的發展。
計算機視覺能幫我們做什么?
到了今天,計算機視覺在眾多領域都得到了廣泛的應用。在圖像增強方面:圖像增強已被廣泛應用于醫療、航空航天以及交通監控等方面。例如,以往X光檢測中由于一些臟器的特殊結構而使得這些器官在X光片中清晰度不夠,從而會給診斷帶來極大不便。但將圖像增強技術應用于這一領域就可以很好地解決這一問題,使得醫生對病人病情診斷更加準確。在航空航天以及工業領域中,圖像增強可以有效地去除圖像中的干擾,獲取更為清晰的圖像以供分析,在圖像增強和更先進的光學鏡頭幫助下,人們在一些軍用衛星拍攝的照片中甚至能清晰地分辨出地面上幾厘米長度的線段。在交通監控領域,圖像增強技術也帶來了巨大的便利。在晴朗的天氣中,交通攝像頭固然能夠良好運作,而在雨天、霧天或是夜晚,攝像頭取得的圖像會受到干擾,此時,圖像增強就可以在一定程度上去除這些干擾,更好地監控路面信息以維護我們的安全。
而在模式識別方面,計算機視覺的發展就更令人驚嘆,F在我們拿起手機拍照時,手機不僅能夠快速且準確地在圖片中識別出人臉的位置,并且能夠識別出人臉的表情,在微笑時自動拍照(微笑快門)。此外,相信女生們對于手機拍照中的美顏功能并不陌生,在自拍之后要用美顏把自己P得美美的。而現在的手機能夠準確識別出五官的位置,在拍照時就有針對性地對眼睛、鼻子、皮膚進行相應地美顏,從而省去了人們在拍照之后還要花時間去處理的煩惱。2015年,微軟推出了一個網站How-old.net,在這個網站一經推出就刷爆了朋友圈和微博,這個網站可以對人們上傳的圖片中的人臉進行識別,并根據相應算法預測出其年齡,雖然有時候結果不夠準確,但完全不影響人們樂此不疲地上傳照片。在我們去乘坐地鐵,火車或飛機時,我們的行李從安檢儀中快速滑過時,此時計算機就能根據X光圖像將行李箱中的物品進行識別,并通過不同的顏色清晰地呈現在安檢員的面前。
如何讓計算機理解“眼前”的世界?
在計算機視覺發展之初,其研究還僅限于“看見”。對于我們人類來說,視覺不僅僅是為了看見,而是為了對看見的事物做出反應,或是更好地理解這個世界。因此,專家們也希望能夠賦予計算機這樣的能力。一款名為“Kinect”的攝像傳感器能夠捕捉到站在攝像頭前的人以及這個人做出的動作。根據不同的動作,“Kinect”背后的計算機會做出不同的反應。這也就是人們常說的“體感游戲”。這種不需要手柄而是靠自己身體動作來操縱的游戲機在當時受到了熱烈的追捧。
另外還有一項計算機視覺技術也正逐步來到我們身邊:我們在看電影時一定都見過這樣的場景,在一個人流量巨大場所(比如機場),警察們為了追蹤一個壞人,在監控室中將壞人的頭像與監控器中的人臉進行比對,在經過短暫的比對后,壞人的人臉在監控畫面上被標了出來,這種人臉識別技術已經十分令人驚嘆,而更令人驚嘆的是,監控攝像頭鎖定了目標,一直自動跟隨著目標移動,直至壞人被警察抓住。這樣的跟蹤攝像頭其實已經出現在我們的生活中,相信很快它將開始為大家服務。
盡管這兩個例子中的計算機視覺,已經不局限于“看見”這一基礎的層面,但這兩個例子中計算機對于圖像的反應都比較簡單,它們并不需要理解他們看到的是什么,只需要根據設計好的程序,在出現特定圖像時做出特定的動作即可,對于人類來說,這幾乎是與生俱來的本領。人類隨著年齡的增長,能夠識別出圖像中的不同物體,并且通過不斷的觀察學習,在三五歲時就能夠認出一只躲在箱子后面只露出半張臉的小貓。
計算機能不能也在圖片中識別出圖片中的物體呢?有人可能會問,上面不是說了計算機能夠識別出人臉嗎?kinect不是也能夠識別出人的動作嗎?但是這都是識別一種物體(也就是人),而且僅僅是識別出人臉這一項,就要耗費科學家大量的精力去建立模型、設計算法。按照這一思路,想讓計算機識別出生活中的所有物品就需要給每個物品設計大量的模型,這幾乎是一項不可能完成的任務。
1981年諾貝爾醫學生理學獎頒發給了神經生物學家大衛·休伯爾(David Hubel)和托斯坦·維厄瑟爾(Torsten N. Wiesel)。他們發現了視覺系統信息處理機制,證明大腦的可視皮層是分級的,大腦的工作過程是一個不斷迭代、不斷抽象的過程。 視網膜在得到原始信息后,首先經由區域V1初步處理得到邊緣和方向特征信息,其次經由區域V2的進一步抽象得到輪廓和形狀特征信息,如此迭代地經由更多更高層的抽象最后得到更為精細的分類。像素是沒有抽象意義的,但人腦可以把這些像素連接成邊緣,邊緣相對像素來說就變成了比較抽象的概念;邊緣進而形成球形,球形然后到氣球,又是一個抽象的過程,大腦最終就知道看到的是一個氣球。
這個生理學的發現,促進了計算機視覺的發展。計算機專家仿照人類大腦由低層到高層逐層迭代、抽象的視覺信息處理機理,建立深度網絡模型。深度網絡每層代表可視皮層的區域,深度網絡每層上的節點代表可視皮層區域上的神經元,信息由左向右傳播,其低層的輸出為高層的輸入,逐層迭代進行傳播。
比如看到一張圖片中的摩托車,在大腦中可能就幾微秒的時間,但是經過了大量的神經元抽象迭代。對計算機來說,最開始看到的根本也不是摩托車,而是RGB圖像三個通道上不同的數字。所謂的特征或者視覺特征,就是把這些數值給綜合起來用統計或非統計的形式,把摩托車的部件或者整輛摩托車表現出來。大部分的設計圖像特征都是把一個區域內的像素級別的信息綜合表現出來,利于后面的分類學習。若輸入層為輸入數據的特征表示,則高層的特征則是低層特征的組合,從低層到高層的特征表示越來越抽象的人類視覺系統信息處理過程。
在2007年,科學家開始將人工神經網絡與計算機視覺相結合,讓計算機能夠自主學習和理解所看到的內容。他們讓計算機觀看了上億張圖片,并且告訴計算機每張圖片中每個物品的名稱(這是一項巨大的工程,167個國家和地區的約5萬名工作者耗費了近2年時間才完成這一工作)。計算機觀看并學習了如此大量的圖片之后,能夠準確地分析出一張新的照片上的大部分物體,并且能夠簡單地描述一張圖片。對于計算機視覺研究來說,這無疑是十分重大的突破。
計算機視覺中最常使用卷積神經網絡(CNN),進行圖像識別研究。卷積是在連續空間做積分計算,然后在離散空間內求和的過程。實際上在計算機視覺里面,可以把卷積當做一個抽象的過程,就是把小區域內的信息統計抽象出來。比如,對于一張愛因斯坦的照片,可以學習多個不同的卷積和函數,然后對這個區域進行統計。
卷積神經網絡學習好的卷積和會對輸入圖像進行掃描,每一個卷積和會生成一個掃描的響應圖(即feature map)。 從一個最開始的輸入圖像(RGB三個通道)可以得到256個通道的響應圖,即 256個卷積和,每個卷積和代表一種統計抽象的方式。
在卷積神經網絡中,除了卷積層,還有一種叫池化的操作。池化操作就是一個對一個小區域內求平均值或者求最大值的統計操作。在內積結果上取每一局部塊的最大值就是最大池化層的操作,由卷積層得出的每一個響應圖經過一個求最大的一個池化層,會得到比原來響應圖更小的響應圖。卷積神經網絡通過卷積層和池化層實現了圖片的特征提取。
今天的計算機視覺技術包括了諸多不同的研究方向,關注度高的一些領域有目標檢測、語義分割、運動和跟蹤、視覺問答等。其中目標檢測一直是計算機視覺中非;A且重要的一個研究方向——通過給定的輸入圖片識別圖片中的特定物體,并輸出其所屬類別及位置,根據檢測對象不同,也衍生出人臉檢測、車輛檢測等細分的檢測算法。目標檢測和識別通常是將是將“宏觀”上的物體在原圖像上框出,語義分割則是將每一個像素上進行分類,圖像中的每一個像素都有屬于自己的類別。近年來用在無人車駕駛技術中分割街景來避讓行人和車輛、醫療影像分析中輔助診斷等。 跟蹤問題研究的是在一段給定的視頻中,根據第一幀所給出被跟蹤物體的位置及尺度大小,在后續的視頻中去尋找到被跟蹤物體的位置,并在跟蹤過程中需要適應各類光照變換,運動模糊以及表觀的變化以提高檢測的精度。視覺問答是近年來十分熱門的研究方向之一,其研究目的旨在根據輸入圖像,由用戶進行提問,而算法自動根據提問內容進行回答。此問題跨越兩種數據形態,故也稱之為跨模態問題。
如今,計算機視覺的研究成果正不斷給我們的生活帶來便利。最后,我們來構想一個小場景:在一個天氣晴朗的假日,你開著車飛馳在田間小路上,車上的攝像頭和計算機正一刻不停地幫我們分析路況,判斷路上的每一種障礙物究竟是團無害的干草,還是會對行車造成威脅的石塊。當你駛過一個路口時,在你毫無察覺的前提下,路口的監控攝像頭已經掃描過了你的面部,并與數據庫中的壞人進行比對,并認定你不在壞人的名單上。在路邊,你發現了一片十分美麗的野花,于是你下車去觀賞;▽嵲谑翘利惲,你掏出手機,掃描了一下自己的臉或是指紋將手機解鎖,然后打開一個識別植物種類的APP,用手機拍下上傳,幾秒鐘之后,你就知道了這朵花的名字。之后你重新發動汽車準備啟動,車載攝像頭發現車的左后方正有個小孩騎著自行車而來,車上的顯示屏立即顯示出攝像頭觀察到的危險畫面,你因此避免了一場車禍……在這個想象的場景中有著多種計算機視覺研究成果的應用,一些已成為現實,而一些在不久的將來,也將走進我們的生活。(編輯:Yuki)