1. 程式人生 > >2017CS231n李飛飛深度視覺識別筆記(一)——計算機視覺概述和歷史背景

2017CS231n李飛飛深度視覺識別筆記(一)——計算機視覺概述和歷史背景

第一章 計算機視覺概述和歷史背景

課時1 計算機視覺概述

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

    關鍵是如何用演算法來開發可以利用和理解的資料,視覺資料存在的問題是它們很難理解,有時把視覺資料稱為“網際網路的暗物質”,它們構成了網路上傳輸的大部分資料。

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

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

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

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

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

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

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

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

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

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

    計算機視覺的歷史是從60年代開始,從Larry Roberts的計算機視覺的第一篇博士論文開始。

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

    70年代後期David Marr撰寫的一本非常有影響力的書,內容包括了他是如何理解計算機視覺和應該如何開發可以使計算機識別世界的演算法,他指出了為了拍攝一幅影象並獲得視覺世界的最終全面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。

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

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

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

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

課時3 CS321n課程概述

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

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

    影象分類關注的是大圖整體,目標檢測則告訴你物體具體出現在圖片的哪個位置以及物體之間的聯絡是什麼,影象摘要是當給到一幅影象,需要生成一段句子來描述這幅影象。

   CNN,卷積神經網路只是深度學習架構的一種,但是它的成功是壓倒性的,成為了目標識別的重要工具。回到ImageNet挑戰賽中,2012年Krizhevsky和他的導師提出了卷積神經網路,並奪得了冠軍;而在這之前,一直都是特徵+支援向量機的結構,一種分層結構;而在這之後,獲得冠軍的演算法都是卷積神經網路。

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

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

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

    與簡單的“在物體上貼標籤”比起來,我們往往希望深入地理解圖片中的人們在做什麼、各個物體之間的關係是什麼,於是我們開始探究物體之間的聯絡,這是一個被稱為視覺基因組的專案。

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

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