上??萍拣^的“機器人世界”展區,有一個引人注目的展項:機場服務機器人。一個機器手臂被安裝在行李傳送帶中央,不同顏色的行李散布在傳送帶上。當游客選擇了某一種顏色的行李后,機器手臂抬起前臂,左右擺動進行觀察。通過安裝在前臂上的兩個攝像頭的幫助,機器人識別并選定目標,同時驅動機器手臂將目標提起。
自從機場服務機器人投入展覽后,一直是該展區的熱門展項,駐足圍觀的游客絡繹不絕。對機器人的表現,游客也是褒貶不一。有些游客對機器人的精彩表演連連稱贊;有些人認為機器人反應遲緩、顯得笨重,相比人類的表現,令人失望。
識別這些行李對于機器人來說是不是很困難?機器人在視覺方面能否做得更好,能否識別更復雜的對象?它們的目力能否超過人類?它們究竟能看到什么?
這些問題將我們引向了一個新興的熱門領域:計算機視覺。計算機視覺是人工智能的子學科,而人工智能則是仿生學的一種。人工智能旨在模仿人(有時也包括其他動物)的行為和思維,而計算機視覺將模仿的對象集中在了人眼上,即模仿人“看”的行為。換言之,計算機視覺是一門利用攝影機和計算機代替人眼進行圖像獲取、目標識別、跟蹤、測量、理解和處理的學科。作為一門交叉學科,計算機視覺與許多學科有重要聯系:機器學習、神經生物學、認知科學、信號處理(圖像處理)等。在后面的介紹中,這些學科間的聯系將變得更加清晰。
眼睛是人體獲取外界信息最重要的傳感器。它高速、準確、信息量大,為人的決策和行為提供了豐富的信息。同樣,計算機視覺系統作為人工智能體的一個感知器,也常常為決策提供了最重要的信息。那么,一個理想的計算機視覺系統究竟完成了什么任務,又給智能體提供了怎樣的信息呢?
讓我們來舉一個簡單的例子。你走進一家咖啡店,發現你的好友彼得坐在角落里,雙手托著下巴,一臉的不愉快。于是,你決定走過去安慰一下。假如完成該任務的不是人類而是機器人,則要由其計算機視覺系統獲取圖像,然后對該圖像進行處理,并得到以下信息:1.這是好友彼得;2.他看上去很沮喪。這兩條信息被傳遞給決策器,后者隨即做出了走過去安慰的計劃,計劃則最終被四肢等效應器執行。
對人來說,這個過程再簡單、自然不過,但對于計算機視覺系統來說,卻是個相當復雜的過程。對該圖像進行處理的過程中,計算機分別完成了三個層次的任務:初級視覺、中級視覺和高級視覺。這樣的分類方式不僅和視覺任務的復雜程度有關,也和人類在完成這些任務時所涉及到的視神經和腦神經部位有關。在以下的篇幅中我們將介紹一些分別屬于這三個層次的典型的計算機視覺任務。
初級視覺
現代數字成像技術使計算機視覺成為可能。利用CCD或CMOS等感光元件,可獲得數字化的圖像。一般來說,對像素進行處理的任務即屬于初級視覺。在挖掘出圖像中包含的信息時,首先需要對圖像進行一些處理,以便能夠執行更高級的任務。圖像的主體和背景之間、同一表面上不同的材質和顏色之間等都會形成邊界,從圖像中提取出邊、角、點等特征能幫助計算機理解圖像,并利用濾波的方式進行邊界特征提取。像濾波這樣的信號處理方法在初級視覺中被廣泛應用,除了特征提取外,還有降噪、平滑等。
圖像上各種顏色的像素并不是隨機分布的,它們一般都在圖像上形成一定含義的組合。比如,草地是由綠色的像素拼合成的,而天空是由大量的藍色像素組成的。找到這樣的具有相同屬性的像素形成的像素塊稱為分割。當然,提取邊界可以幫助分割圖像,但是簡單地把所有的邊界分割出的區域都作為具有相同屬性的像素塊是否正確呢?這正是圖像分割最具有挑戰性的。比如一副斑馬圖片,計算機如何知道斑馬的嘴不是背景的一部分呢?這就涉及到了圖像的語義。在給圖像進行初級分割后,更精確的分割任務就要交給中級或高級視覺了。
人類有兩只眼睛,同樣,機器人也可以通過安裝兩個經過標定的攝像頭來實現雙目視覺,從而實現測距,即分辨物體在三維空間中的位置。上文的例子中,雙目視覺可以依據透視原則和遮擋的關系來幫助視覺系統確定彼得所坐的位置,比如在第二張桌子和第三張桌子之間。
中級視覺
中級視覺是建立在初級視覺的計算結果上的。在執行中級視覺任務時,不僅使用了實時的初級視覺計算結果,還結合了一定的視覺經驗。舉個簡單的例子,平時生活中我們所看到的,被桌上的杯子遮擋的部分也是桌子的一部分;上文斑馬深色的口鼻部并非背景的一部分,而是斑馬的一部分。事實上,這些結合經驗的視覺任務可以首先被應用到分割任務中。中級視覺中的分割不再是僅僅依靠顏色將圖像分為若干個像素塊,而是產生更有意義、更精確的分割,這樣的分割不是僅靠邊界提取就能夠實現的。分割算法不計其數,常用的有類聚的方法、基于特征向量的方法、基于圖論的方法、期望最大化、概率的方法(貝葉斯方法)等。
在經驗的幫助下,視覺系統可以通過擬合的方式來解釋甚至糾正圖像中的變形或缺失。比如,根據經驗桌子的邊一般是直的,則視覺系統在提取到桌子的部分邊緣或拐點后,就可以用直線來擬合被遮擋而缺失的部分,或因攝像頭的棱鏡引起的失真。這樣,機器人在走向彼得時就能避免撞到桌子。
經驗也并非是絕對正確的,此刻看到的也許是經驗中所缺失的。通過一個加權的概率模型,視覺系統可以將目前觀察到的圖像和經驗中的數據結合起來,從而對未來的狀態做一個預測。這樣的方法常常被用于跟蹤,也就是在一幀幀連續播放的畫面中,根據目標在以前和目前圖像中的位置來預測目標在未來圖像中的位置。比如高速公路上的車輛跟蹤系統,系統用從對象上提取出的特征點(紅色)來定位目標。視覺跟蹤常用的算法有卡爾曼濾波器、非線性動態模型等。
目前的中級計算機視覺研究受到了心理學和認知科學的影響。比如格式塔心理學對基于經驗和認知整體的中級視覺有較大貢獻。
高級視覺
也許高級視覺才是計算機視覺中最有趣的一部分,因為它是人類視覺中至今還無法被完全解密的部分(也許連部分解密都談不上)。當你站在雜亂、昏暗的酒桌前,從看到的圖像中識別出沮喪的彼得時,整個過程只需要0.3秒。事實上,現代處理器的運算速度遠遠高于人類視神經和大腦中神經突觸的信息傳遞速度。但人類視覺的功能是如此的強大,以至于計算機視覺系統遠遠不能達到人類的水平。較新的研究表明,人類發達的視覺系統得益于一套大規模并行計算系統──不計其數的神經元形成的視覺通路,它就像一張有無數節點的計算網絡,信息在其中往返傳遞。
高級視覺任務幾乎都圍繞著兩個字展開:識別。識別是給對象貼上標簽的過程,即給對象附上含有語義的名稱或描述。這是一種高級的視覺活動,需要學習、聯想等更高級的大腦活動的參與。拿圖像的分割任務來說,圖像不僅被分割成獨立的像素塊,視覺系統還為每個像素塊貼上“標簽”,比如“窗子”、“桌子”、“酒瓶”、“彼得的臉”等。通過模板比對,視覺系統將彼得的臉和經驗中的圖像聯系了起來,從而引起了系統的興趣。從彼得的臉上提取的特征中,視覺系統還解讀出了彼得的沮喪。于是在隨后的圖像中,視覺系統都將注意力放在了彼得的臉上,試圖跟蹤該對象。視覺系統在繼續跟蹤的同時,將從圖像中得到的信息發送給決策器。
即使是當代最成功的算法和視覺系統都無法像人類一般高效地識別物體。對我們來說,識別 “一個瓷杯”處于不同狀態似乎并不怎么困難,但對計算機視覺系統來說卻不容易。杯子可以有不同的擺放姿勢、不同的光照強度和顏色、出現在畫面中的不同位置、可能有的部分被遮擋,如果按不同狀態就是不同的杯子這一點來判斷,那就可能誤判為存在不計其數的各式各樣的杯子(即外觀的區別)。在絕大多數計算機視覺系統中,目標都被要求符合一些限制條件,否則,計算機視覺將成為不可能的任務。由此可見,在雜亂、昏暗的酒桌一角發現彼得對計算機視覺系統來說是多不容易的一件事情。
對人類來說,識別并非與生俱來的本領。嬰兒睜大眼睛看著陌生的世界,他們的視覺實踐是從測距、分割開始的。幼兒幾乎每時每刻都在努力學習如何給圖片貼標簽。他們學習得很快,低齡兒童不僅可以成功地識別物品,還可以在一定程度上察言觀色,感受到由表情傳達的情緒。通過獎勵和帶教,可以加速兒童的學習過程。
通過這樣的啟發,高級視覺還將依賴機器學習這門學科。機器學習是研究如何通過算法讓計算機實現人類的學習過程,從而讓計算機不僅能夠實現簡單枯燥的任務,還能夠向智能邁進一步。作為人工智能領域的核心學科,機器學習如百家爭鳴,不斷取得著新的成績。當今重要的機器學習算法有人工神經網絡、遺傳算法、支持向量機、貝葉斯網絡、強化學習等。
至今,計算機視覺系統最為成功的案例,莫過于手寫數字識別。MNIST是使用最廣泛的手寫數字庫,為各類識別算法提供了一比高下的平臺。MNIST中含有七萬幅邊長為28個像素的圖像。目前最出色的識別算法一般都可以達到1%以內的錯誤率。然而,MNIST只是對目標的外觀做了有限多的變化,并沒有涉及到有如杯子在不同狀態下的各種變化。而且,28×28=784個像素的圖片實在很小,如果處理普通大小的照片,視覺系統的運算量就會呈指數級增長,甚至讓超級計算機都無能為力。
因此,對于哪怕是當今世上最聰明的機器人來說,像人類一樣看到酒吧里沮喪的彼得并上前安慰,也是天方夜譚。但計算機視覺是一門新興的學科,隨著處理器硬件和人工智能算法的發展,也許有朝一日機器人也可以達到人類的視覺功能。