1. 程式人生 > >【2017cs231n斯坦福李飛飛視覺識別】筆記-第1講:計算機視覺概述及歷史背景

【2017cs231n斯坦福李飛飛視覺識別】筆記-第1講:計算機視覺概述及歷史背景

課時1 計算機視覺概述

什麼是計算機視覺?

計算機視覺:針對視覺資料的研究。

     在我們的世界中,就在過去的短短几年,視覺資料量爆炸式的增長到誇張的地步,這一點很大程度上得益於世界上許許多多的視覺感測器,大家都有智慧手機,每個智慧手機都有一個、兩個、甚至3個攝像頭,平均來說,世界上有比人更多的攝像頭終端,並且由於所有的這些視覺感測器在這個世界上每天都產生有超級超級多的視覺資料。

    下面分享來自思科2015年的研究,預計到2017年,網際網路上大約80%的流量都是視訊,這甚至不像網路上所有的影象及其他型別的視覺資料,只是從一個純粹的相位數的角度來看,大多數在網際網路上傳播的實際上是視覺資料,關鍵是如何用演算法來開發可以利用和理解的資料,視覺資料存在的問題是它們很難理解,有時把視覺資料稱為“網際網路的暗物質”,它們構成了網路上傳輸的大部分資料。

      根據YouTube的一個統計例項:大概每秒鐘,有長達5小時的資料內容會被上傳到YouTube,所以通過人工給每個視訊標上註釋、分類是非常困難甚至不可能的,計算機視覺是解決這種問題的重要技術,它能夠對照片進行標籤、分類,處理視訊的每一幀。

 計算機視覺是一個與很多領域緊密關聯的學科,它涉及到比如說工程、物理、生物等許多不同的領域:

 對於CS231n這門課程,它專注於一類特定的演算法,圍繞神經網路,特別是卷積神經網路,並將其應用於各種視覺識別任務。

課時2:計算機視覺歷史北背景

         視覺的歷史可以追溯到很久以前,動物擁有視覺的開端。

       如今,視覺成為了最重要的感知系統,人類的大腦皮層中有幾乎一半的神經元與視覺有關,這項最重要的感知系統可以使人們生存、工作、運動等等,視覺對人們真的至關重要。

         以上談到了人類的視覺,那麼人類讓計算機獲得視覺的歷史又是怎麼樣的呢?

    現在知道的最早的相機追溯到17世紀文藝復興時期的暗箱,這是一種通過小孔成像的相機,這和動物早期的眼睛非常相似,通過小孔接收光線,後面的平板手機資訊並且投影成像。

     同時,生物學家開始研究視覺的機理,最具影響力並且啟發了計算機視覺的一項研究是在五六十年代,休伯爾和威澤爾使用電生理學的研究,他們提出了“哺乳動物的視覺處理機制是怎樣的”,通過觀察何種刺激會引起視覺皮層神經的激烈反應,他們發現貓的大腦的初級視覺皮層有各種各樣的細胞,其中最重要的是當它們朝著某個特定方向運動時,對面向邊緣產生迴應的細胞。

   他們發現視覺處理是始於視覺世界的簡單結構,面向邊緣,沿著視覺處理的途徑的移動資訊也在變化,大腦建立了複雜的視覺資訊,直到它可以識別更為複雜的視覺世界。

  計算機視覺的歷史是從60年代開始,從Larry Roberts的計算機視覺的第一篇博士論文開始。其中視覺世界被簡化為簡單的幾何形狀,目的是能夠識別他們,重建這些形狀是什麼。

       1966年,一個如今非常著名的MIT暑期專案“Summer Vision Project”,它試圖有效的使用暑期工作時間來構建視覺系統的重要組成部分,五十年來,計算機視覺領域已經從哪個夏季專案發展成為全球數千名研究人員的領域,並且仍然處理一些最根本的問題,這個領域已經成長為人工智慧領域最重要和發展最快的領域之一。

       70年代後期David Marr撰寫的一本非常有影響力的書,內容包括了他是如何理解計算機視覺和應該如何開發可以使計算機識別世界的演算法,他指出了為了拍攝一幅影象並獲得視覺世界的最終全面3D表現必須經歷的幾個過程,如下圖所示:

    第一個過程就是他所說“原始草圖”,大部分邊緣、端點、虛擬線條、曲線、邊界等都被用其他元素來表示。視覺處理的早期階段有很多關於像邊緣的簡單結構,然後,邊緣和曲線的下一步是2.5維草圖,我們開始將表面深度資訊、層或者視覺場景的不連續性拼湊在一起,然後將所有的內容放在一起,並在表面和體積圖等分層組織了一個3d模型,這是一個非常理想化的思想過程,也是一個非常直觀化的方式並考慮如何解構視覺息。

 70年代另一個重要的開創性問題:如何越過簡單的塊狀世界並開始識別或表示現實世界的物件?

     一個被稱為“廣義圓柱體”,一個被稱為“圖形結構”,他們的基本思想是每個物件都是由簡單的幾何圖形單位組成,所以任何一種表示方法是將物體的複雜結構簡約成一個集合體。例如一個人可以通過廣義的圓柱形形狀拼接在一起,或者人也可以由一些關鍵元素按照不同的間距組合在一起,所以任何一種表示方法是將物體的複雜結構簡約成一個集合體,有更簡單的形狀和幾何結構。

      80年代David lowe思考的如何重建或識別由簡單的物體結構組成的視覺空間,它嘗試識別剃鬚刀,通過線和邊緣進行構建,其中大部分是直線之間的組合。

     從60年代到80年代,考慮的問題是計算機視覺的任務是什麼,要解決物體識別的問題非常難。所以,當思考解決視覺問題過程中出現的問題時,另一個重要的問題產生:如果識別目標太難,首先要做的是目標分割。

  這個任務就是把一張圖片中的畫素點歸類到有意義的區域,可能不知道這些畫素點組合到一起是一個人形,但可以把屬於人的畫素點從背景中摳出來,這個過程就叫作影象分割。

  下面是Malik和Jianbo shi完成的用一個演算法對影象進行分割:

     還有一個重要的研究是由Paul Viola和Michael Jones完成的,使用AdaBoost演算法進行實時面部檢測,在這個研究後不久推出了第一個能在數碼相機中實現實時面部檢測的數碼相機,所以這是從基礎科學研究到實際應用的一個快速轉化。

     關於如何做到更好的目標識別,是可以繼續研究的領域,所以在90年代末和21世紀的前幾年,一個重要的思想方法就是基於特徵的目標識別。由David Lowe完成的叫做SIFT特徵,思路是匹配整個目標。

     通過觀察目標的某些部分、某些特徵,它們往往能夠在變化中具有表現性和不變性,所以目標識別的首要任務是在目標上確認這些關鍵的特徵,然後把這些特徵與相似的目標進行匹配,它比匹配整個目標要容易的多。例如,上圖中一個stop標識中的SIFT特徵與另一個stop標識中的SIFT特徵相匹配。

這裡有一個演算法作為例子,叫做空間金字塔匹配,背後的思想是圖片裡面有各種特徵,這些特徵可以告訴我們這是哪種場景,到底是風景還是廚房,這個演算法從圖片的各部分,各畫素抽取特徵,並把他們放在一起,作為一個特徵描述符,然後在特徵描述符上做一個支援向量機。

   有些工作是把這些特徵放在一起以後,研究如何在實際圖片中比較合理地設計人體姿態和辨認人體姿態,這方面一個工作被稱為“方向梯度直方圖”,另一個被稱為“可變部件模型”。

    所以,從60年代、70年代、80年代一直到21世紀,圖片的質量隨著網際網路的發展,計算機視覺領域也能擁有更好的資料了。直到21世紀早期,才開始真正擁有標註的資料集能夠衡量在目標識別方面取得的成果,其實一個最著名的資料集叫做PASCAL Visual Challenge。這個資料集有20個類別,資料集的每個種類有成千上萬張圖片。

   與此同時,提出了一個重要的問題:是否具備了識別真是世界中的每一個物體的能力或者說大部分物體。這個問題也是由機器學習中的一個現象驅動:大部分的機器學習演算法,無論是圖模型還是SVM、AdaBoost都可能會在訓練過程中過擬合。因此,有這兩方面的動力,一是單純想識別自然界中的萬物,二是要回歸機器學習克服瓶頸—過擬合問題,開始開展了一個ImageNet的專案,彙集所有能找到的圖片,組建一個儘可能大的資料集。

這是當時AI領域最大的資料集,將目標檢測演算法的發展推到了一個新的高度,尤其重要的是如何推動基準測試的進展。

下面是ImageNet挑戰賽的從2010到2015的影象分類結果:

橫軸表示年份,縱軸表示比賽結果的錯誤率,可以看到錯誤率正在穩步下降。可以看到圖中2012的錯誤率下降的非常顯著,低到和人類一樣,這一年的演算法是一種卷積神經網路模型,這也將是這門課程學習的重點,深入研究什麼是卷積神經網路模型,也就是現在被熟知的深度學習。

課時3 CS321n課程概述

      CS321n將聚焦於視覺識別問題,第一個主要問題就是影象分類問題:讓演算法接收一張圖作為輸入,從固定的類別集合中選出該影象所屬的類別。這個基本的分類器在很多地方都有不同的應用。

    在CS231n課程中,將討論一些其他的視覺識別問題,它們都建立在專門為影象分類而開發的各種工具之上,一些和影象分類的問題,比如目標檢測或影象摘要生成。

     在目標檢測中會有小小的區別,相比於識別出貓、狗等類別,我們還要畫出邊界框,標出東西在影象中的位置。影象摘要是當給到一幅影象,需要生成一段句子來描述這幅影象。

CNN,卷積神經網路只是深度學習架構的一種,但是它的成功是壓倒性的,成為了目標識別的重要工具。回到ImageNet挑戰賽中。

2011年提出的方法仍然是層次化的,它包含了很多分層,首先計算一些特徵,然後計算區域性不變特徵,一些池化操作,在經過多層處理,最終將結果描述符傳遞給線性SVM,這裡的結構仍然是層次結構,我們仍然檢測邊界,仍然有不變特徵的概念,所有這些直覺資訊都會在卷積神經網路中使用。但2012年才是真正的突破,Krizhevsky和他的導師提出了卷積神經網路,創造了7層卷積神經網路,並在2012年的比賽中奪得了冠軍;而在這之前,一直都是特徵+支援向量機的結構,一種分層結構;而在這之後,獲得冠軍的演算法都是卷積神經網路。2015年vgg網路,那時有19層,到2015年更加瘋狂,有一個殘差網路(ResNets),152層,從此以後效能得到一點提升,只要能將層數增加到200以上,不過也有可能造成Gpu記憶體溢位。

   然而,卷積神經網路並不是一夜之間就成功的,事實上,這些演算法可以追溯到更早的時候,與卷積神經網路有關的其中一項基礎性工作是由Yann LeCun和他的夥伴於90年代完成的,1998年他們利用卷積神經網路進行數字識別。

   所有既然這些演算法在90年代就很突出,為什麼到最近幾年才變得這麼流行呢?從數學的角度來說,有很重要的兩點引起了深度學習架構的復興,一個是摩爾定律,計算能力在變得越來越高;如今有GPU這樣的影象處理單元,其具有超高的平行計算能力,非常適合進行卷積神經網路模型這類高強度的計算,另一個是資料,演算法需要大量的資料,需要給它們提供非常多的帶標籤的影象和畫素,以便能最終取得更好的效果,有了大資料集,可以實現更強大的模型。

 在計算機視覺領域,正嘗試著製造一個擁有和人類一樣視覺能力的機器,這樣可以利用這些視覺系統可以實現很多驚奇的事情,但是當繼續在該領域深入的時候,仍然有著大量的挑戰和問題亟待解決,比如對整個照片進行密集標記、感知分組、使能夠確定每個畫素點的歸屬,這些仍是研究中的問題,所以需要持續不斷地改進演算法,從而做到更好。

例如動作識別,給一個含有一些人物的視訊,什麼才是識別其中人物活動的最好方式,這是一個很有挑戰性的問題,隨著繼續發展,像增強現實或虛擬現實,並且隨著新技術和新興感測器的出現,將提出更附有挑戰性的問題來解決,

實驗室有個資料集叫做視覺基因組,與簡單的“在物體上貼標籤”比起來,我們往往希望深入地理解圖片中的人們在做什麼、各個物體之間的關係是什麼,於是我們開始探究物體之間的聯絡,這是一個被稱為視覺基因組的專案。在顯示生活中捕捉錯綜複雜的事,而不僅僅是框定出物體,我們應該描述出影象,作為整個大影象語義相關的概念,而不僅包括物件的身份,還包括物件關係,物件屬性,以及場景中發生的動作,這種表達可能允許我們使用簡單分類去捕捉一些豐富的視覺世界中唾手可得的事情,這絕不是一種標準的方法。

計算機視覺領域的一個願景即是“看圖說故事”,人類的生物視覺系統是非常強大的,看到一張圖片,就能夠描述圖片的內容,並且只需不到一秒種的時間,如果能夠讓計算機也能做的同樣的事情,那毋庸置疑是一項重大的突破;如果要實現真實深刻的影象理解,如今的計算機視覺演算法仍然有很長的路要走。

計算機視覺能讓世界變得更加美好,它還可以被應用到類似醫學診斷、自動駕駛、機器人或者和這些完全版不同的領域。