天天看點

當機器學習遇上計算機視覺

當機器學習遇上計算機視覺

計算機視覺在上一個世紀60年代脫胎于人工智能與認知神經科學,旨在通過設計算法來讓計算機自動了解圖像的内容。為了“解決”機器視覺的問題,1966年,在麻省理工學院,這個問題作為一個夏季項目被提出,但是人們很快發現要解決這個問題可能還需要更長時間。在50年後的今天,一般的圖像了解任務仍舊是不能得到完美解決。但是也已取得顯著進展,并且随着機器視覺算法商業化的成功,機器視覺産品已經開始擁有廣泛的使用者,包括圖像分割(例如微軟office中去除圖檔背景的功能)、圖像檢索、人臉檢測對焦和kinect的人體運動捕捉等。幾乎可以确定的是機器視覺最近的突飛猛進主要得益于最近15到20年機器學習領域的快速發展。

本主題的第一篇文章主要是探索一下機器視覺所面臨的挑戰和介紹一個非常重要的機器學習技術——像素級分類決策樹算法。

圖像分類

想像一下并試着回答下面這個有關圖像分類的問題:“在這張圖檔中有一輛汽車嗎”。對于計算機來說,一張圖檔僅僅是由三原色(紅、綠、藍)構成的像素組成的格子,三原色中每一個顔色通道的值的範圍都是0到255。這些值的改變不僅依賴于事物對象是否在圖檔中呈現,也依賴于一些幹擾事件,比如錄影機的視角、燈光條件、背景和對象的形态。另外,一個必須處理的問題是不同類别的汽車呈現不同的形狀。例如,這輛汽車可能是輛旅行車、或者小卡車、或者是輛跑車,這些都會對圖檔像素造成很大影響。

幸運的是監督機器學習算法提供了替代原本需要人工編碼解決這些多可能性的問題的方式。通過收集圖檔的訓練集和适當的人工标記每一張訓練圖檔,我們能夠使用最好的機器學習算法找到哪些像素模式是同要識别的對象相關的以及哪些是幹擾因素産生的。我們希望我們的算法最終能夠适用于識别以前沒有經過訓練的新的樣本,并且對于噪聲保持不變性。在新的機器視覺算法的發展和資料集的收集标注兩個方面我們都取得了長足的進步。

像素級分類決策樹算法

圖檔在很多層面上包含細節。就像前面我們提到的,我們可以問一個問題——在整張圖檔中是否有一個特定的對象類别(比如汽車)。現在我們可以問一個更難點的問題——這張圖裡都包含了什麼,這就變成了一個著名的問題“圖像語義分割”:提取圖檔場景中所有的對象。例如下面街道場景的圖檔

當機器學習遇上計算機視覺

你可以想象一下,這可以用于幫助你有選擇的編輯一些照片,或者用于拼接一張全新的照片;我們還能馬上想出更多的應用場景。

解決語義分割問題可以有很多方法,但是一個最有效的算法是像素級分類:訓練一個分類器在像素級别預測每一個對象(如汽車、街道、樹、牆等)分布情況。這個任務帶給機器學習一些計算問題,特别是圖檔包括很多的像素的時候(例如,諾基亞1020智能手機拍照的像素是4100萬像素)。這就意味着整個運算時間是我們分類任務全部訓練和測試樣本圖檔乘以幾百萬的倍數。

這個問題的規模促使我們尋找一個更有效的分類模型——決策樹(也稱為随機樹或随機決策樹)。一個決策樹是一個分離訓練後的決策樹的集合,如下圖所示。

當機器學習遇上計算機視覺

每一決策樹都有一個根節點,多個内部“分支”節點,和多個葉子節點。測試分類時,從根節點開始,并且計算二叉“分支函數”,這個函數可能就像“這個像素是否比它的鄰域像素更紅”一樣簡單。根據該二進制決策,它将沿分支向左或向右,接下來檢視下一個“分支函數”,一直重複這樣的操作。當最終達到葉子節點,一個存儲的預測——通常是一個包含類别标簽的直方圖——就是輸出(你也可以去看一下chrisburges最近的一篇非常出色的論文,是關于提升變種決策樹在搜尋排名中的應用)。

決策樹的美在于他的執行效率:雖然從根節點到葉子節點包含指數級可能的路徑,但是任意一個獨立的測試像素僅僅通過一個路經。此外,分支函數的計算是以此前的事件為條件的:例如,分類器隻需要依賴此前分支決策的答案提出正确的問題就行了。這很像“20問”遊戲:當你僅被允許去問少量問題時,你可以很快學會根據你以前問題的答案來調整自己要提出的下一個問題。

有了這項技術,我們已經能夠成功處理這些不同的問題,如照片的語義分割,街頭的場景分割,人體解剖學的3d醫學掃描圖像分割,攝像頭的重定位和使用kinect深度攝像頭對人體身體部位的劃分。對于kinect來講,決策樹測試時間效率是關鍵:我們有一個非常嚴格的計算預算,但是這樣的計算要求搭配xboxgpu并行處理像素的能力,意味着我們能夠适應這種應用場景。

深層神經網絡

在過去的幾年裡,我們視覺研究者所使用的測試資料集無論在品質上,還是數量上都有了快速的提高。這些進步在很大程度歸因于吸收了衆包的成果。衆包項目允許我們把數百萬張已标記圖像加入測試資料集。其中一個最具挑戰性的測試資料集imagenet,就包含了數萬個種類、超過百萬張已标注層次的圖像。

然而多年來,對imagenet測試資料集的識别工作進展較緩慢,直到2012年,krizhevsky等人的成果震驚了業界。他們使用通用gpu配合一些看似細微的算法改進,進而更深層次地訓練卷積神經網絡。最終,他們在imagenet的1000個分類測試中顯著提升了圖像分類的準确性。這項成果還赢得了大衆媒體的關注,甚至導緻相關的初創公司被大筆收購。自從那以後,“深度學習”開始成為計算機視覺領域的熱門話題,而最近發表的文章也開始涵蓋到物體定位、臉部識别和人體姿勢識别等與“深度學習”息息相關的内容。

展望未來

深度卷積網絡毫無疑問是相當強大的,然而它真的能解決計算機視覺領域的一切問題嗎?可以肯定的是,它還會繼續火熱下去并且推動業界未來幾年的發展,同時我們也相信未來還會有新的突破性進展。誰也說不準會有哪些突破,但我們會為你預測一些我們認為很有可能實作的突破點:

語義分析:以上的網絡模型隻能學會了解圖像内容的表意,而不能深入了解圖像中各個物體、物體之間如何互相聯系以及特定物體在生活情景中的作用,例如我們不能輕率地根據頭發看起來會有點光澤,和他們拿着吹風機這一事實,很有把握地推斷他們的頭發是濕的。像微軟coco這樣的新型測試資料集就可以幫助增強語義分析。該資料集對抽象圖像提供非常詳盡的分類标注,例如包含多個主體的圖像會被标記出不重要的部分。

運作效率:雖然對測試圖檔的深度網絡評估過程可以通過并行計算來加速,但是神經網絡的構造并沒有在上一篇中提及的邏輯運算概念:每一個訓練樣例必須通過周遊網絡中的所有節點來輸出結果。再者,即使配備高速的gpu,訓練網絡也要花費數天甚至數周,這使得深度網絡不能快速投入試用。

結構學習:經過多年的研究發展,深度卷積網絡現在擁有一個設計完善、相對死闆的結構。也就是說,改變某一層大小或層級的數量會對模型做出預測的能力産生不良影響。除了簡單粗暴地輸入特定參數來最優化網絡的形态,我們希望可以真正地直接從資料中學習出更加靈活的網絡結構。

近年來,我們已經開始尋找突破這些瓶頸的方案。現在,我們很高興能向你推薦我們最新的成果,決策叢林模型:根部相連接配接的決策有向無環圖。你可以認為決策有向無環圖是子節點相通的決策樹,是以一個子節點可以存在多個父節點。我們不但證明了這種模型在記憶體消耗上比決策樹降低了一個數量級,同時還能大大提高模型的泛化能力。有向無環圖起初看起來很像神經網絡,但是有兩個重要的不同點:第一,其結構和模型參數都是從資料中學習而來的;第二,有向無環圖保留了決策樹中高效的邏輯運算:一個測試樣例隻沿着有向無環圖的一條路徑傳遞,而不是像神經網絡一樣周遊所有節點。我們正在積極嘗試結合其他深度學習的形态,譬如結果的複用和樹節點的糾纏,使得決策叢林能夠真正有效地替代深度神經網絡。

如果你對運用決策叢林模型解決問題感興趣,azure機器學習雲平台中的gemini子產品将能帶你探索得更深入。

總的來說,計算機視覺的前途一片光明,其中很大程度歸功于機器學習。即便近年來視覺領域的快速發展已經讓人難以置信了,但我們認為計算機視覺的研究未來還會震驚世界。

原文釋出時間為:2015-03-09

本文來自雲栖社群合作夥伴“大資料文摘”,了解相關資訊可以關注“bigdatadigest”微信公衆号

繼續閱讀