吳恩達計算機視覺:12堂課學習心得

做者 | Ryan Shrott
編譯 | Sambodhi
編輯 | Vincent
AI前線出品| ID:ai-front

AI 前線導語:最近,加拿大國家銀行首席分析師 Ryan Shrott 在分享吳恩達在 Coursera 上發佈的深度學習課程的前三門課的學習心得後,日前再次分享了他完成的第四門課的學習心得。算法


吳恩達的機器學習課程在 Coursera 平臺上已上線 5 年左右,該門課程是國內,乃至全球許多機器學習愛好者、專家學者的入門課程。整門課程深刻淺出、簡潔易懂。數據庫

8 月 9 日,吳恩達又宣佈 deeplearning.ai 在 Coursera 平臺上開設系列全新深度學習課程,包括神經網絡和深度學習概述、神經網絡參數調整及優化、如何搭建機器學習項目、卷積神經網絡、神經網絡序列模型。從課程設置上來看,涵蓋了深度學習的基礎理論和簡單實操。這也是 deeplearning.ai 三大項目的第一個項目。微信

截止目前(2017 年 11 月 22 日),Coursera 上可用的課程是:網絡

  • 第一門課:神經網絡與深度學習(Neural Networks and Deep Learning)
  • 第二門課:改善深度神經網絡:調整超參數、正則化和優化(Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization)
  • 第三門課:結構化機器學習項目(Structuring Machine Learning Projects)
  • 第四門課:卷積神經網絡(Convolutional neural network)

第四門課的內容是教授如何構建卷積神經網絡並用它來處理圖像數據。架構

Ryan Shrott 目前完成了第四門課,他表示,吳恩達在解釋不少優化計算機視覺任務所需瞭解的複雜概念上有抽絲剝繭講得通俗易懂的能力。他很喜歡這門課程中的如何用風格轉換器創造藝術圖像這一部份內容,好比將 Claud Monet(19 世紀法國印象派畫家)的繪畫風格和任何圖像結合起來進行藝術創做,以下圖所示:app

下面是 Ryan Shrott 學習以後,用 Leonid Afremov(1955-,白俄羅斯現代印象派畫家)的做品《雨中的女人》(Rain Princess )的風格創做的藝術做品,你徹底能夠嘗試:less


在本文中,Ryan Shott 爲咱們解讀了第四門課的 12 堂重要的課程。AI 前線在本文的基礎上亦作了一些批註,方便讀者理解並掌握一些概念,在深度學習少走彎路。機器學習


第 1 課:爲何計算機視覺迅速崛起?函數

大數據和算法的發展促使智能系統的測試偏差收斂到貝葉斯最優偏差,這就使得人工智能在全部領域中表現,超越了人類的水平,包括天然感知任務。開源軟件 TensorFlow 使你可以使用遷移學習(teansfer learning)實現可以快速檢測任何物體的目標檢測系統。經過遷移學習,你只需 100~500 個樣本就可讓系統運行良好。手動標記 100 個樣本也並不是很大的工做量,所以你能夠快速獲得最簡可行產品。佈局


  • 最簡可行產品:minimum viable product,MVP。是新產品開發中的名詞,是指有部分機能,剛好可讓設計者表達其核心設計概念的產品。設計者能夠進行驗證式學習,根據使用者的回饋,進一步瞭解使用情形,而且繼續開發此產品。


第 2 課:卷積如何工做?

吳恩達解釋瞭如何實現卷積操做,並展現如何對圖像進行邊緣檢測。還介紹了其餘濾波器,如索貝爾(Sobel)濾波器,它將更多的權重賦予邊緣的中心像素。吳恩達還提到:濾波器的權重不該手工設計,而應該用登山算法來習得,如梯度降低(gradient descent)。

  • 邊緣檢測目的是標識數字圖像中亮度變化明顯的點。邊緣檢測大幅度地減小了數據量,而且剔除了能夠認爲不相關的信息,保留了圖像重要的結構屬性。
  • 梯度降低是一個一階最優化算法,一般也稱爲最速降低法。


第 3 課:爲何要使用卷積網絡?

卷積網絡在圖像識別任務中爲什麼如此有效,吳恩達給出了幾個哲學緣由。他介紹了兩個具體緣由。第一個緣由是參數共享(parameter sharing)。這是基於圖像某一部分有效的特徵探測器在圖像中另外一部分可能也有用的想法。例如,邊緣檢測器對圖像中多個部分可能有用。參數共享所需的參數數量不多,以及穩健的平移不變性( translation invariance)。平移不變性是照片中的貓進行移位、旋轉後仍然識別爲貓的關鍵因素。

  • 卷積神經網絡以其局部權值共享的特殊結構在語音識別和圖像處理方面有着獨特的優越性,其佈局更接近於實際的生物神經網絡,權值共享下降了網絡的複雜性,特別是多維輸入向量的圖像能夠直接輸入網絡這一特色避免了特徵提取和分類過程當中數據重建的複雜度。
  • 能夠將這些參數當作是提取特徵的方式,該方式與位置無關。這其中隱含的原理則是:圖像的一部分的統計特性與其餘部分是同樣的。這也意味着咱們在這一部分學習的特徵也能用在另外一部分上,因此對於這個圖像上的全部位置,咱們都能使用一樣的學習特徵。

第二個緣由是鏈接的稀疏性。這個概念是指每一個輸出層只是少許輸入的函數(特別是濾波器尺寸的平方)。這就大大減小了網絡中的參數數量,從而加快訓練速度。


  • 稀疏鏈接,其實就是局部感知,在卷積神經網絡中,每一個神經元無須對全局圖像進行感知,只需對局部進行感知,而後在更高層將局部的信息綜合起來就獲得了全局的信息。稀疏鏈接的思想是受生物學中的視覺系統結構啓發。視覺皮層的神經元就是局部接受信息的(即這些神經元只響應某些特定區域的刺激)。這種特徵提取的過程相似自下而上的方法,一層層接收局部的輸入,最後不斷聚合。


第 4 課:爲何使用填充?

填充(padding)一般用於卷積過程當中,保持輸出數據的尺寸與輸入數據一致。它也用來使圖像邊緣附近的幀對輸出的貢獻同圖像中心附近的幀同樣多。

  • 填充定義如何處理樣本圖像的邊界。
  • 填充的方式有兩種,「有效填充」和「相同填充」。在相同填充中,超出邊界的部分使用補充 0 的辦法,使得輸入輸出的尺寸相同。而在有效填充中,則不使用補充 0 的方法,不能超出邊界。


第 5 課:爲何使用最大池化?

實證研究代表,最大池化(max pooling)在 CNN 中很是有效。經過對圖像進行下采樣,咱們減小了參數的數量,縮放或者方向變化(如平移、旋轉)時,可以保持特徵不變。


  • 池化主要的做用是引入不變性,而且減小了冗餘。還能夠減輕模型過擬合的程度,提升模型泛化能力。還能得到定長輸出。


第 6 課:經典網絡結構

吳恩達展現了三種經典網絡架構,包括 LeNet-五、AlexNet 和 VGG-16。他的大意是,高效的網絡一般具備這樣的層:不斷擴大的通道規模和不斷降低的寬度、高度。

  • LeNet-5 誕生於 1994 年,由 Yann LeCun 完成,用於識別手寫郵政編碼,是最先的卷積神經網絡,推進了深度學習的發展。
  • AlexNet 由 Hinton 的徒弟 Alex Krizhevsky 在 2012 年完成,是 LeNet-5 的一種更深更寬的版本,是現代深度 CNN 的奠定之做,確立了深度學習 CNN 在計算機視覺的統治地位,同時也推進深度學習在語音識別、天然語言處理、強化學習等領域的拓展。
  • VGG-16 誕生於 2014 年是牛津大學計算機視覺組(Visual Geometry Group)和 Google DeepMind 公司的研究員一塊兒研發的深度卷積神經網絡。


第 7 課:殘差網絡爲何有效?

對普通網絡而言,因爲梯度降低和爆炸,訓練偏差並不會隨着層數增長而單調遞減。這些網絡具備前饋跳過鏈接,使你訓練極其龐大的網絡而不會出現性能降低的狀況。



  • 殘差網絡(residual network,ResNet),由 He KaiMing 於 2015 年提出。深度網絡有個問題就是,容易形成梯度在反向傳播的過程當中消失,致使訓練效果不好。而殘差網絡的提出,在神經網絡的結構層面解決了這一問題,即便網絡很深,梯度也不會消失。


第 8 課:使用遷移學習

在 GPU 上開始訓練像 inception 的大型網絡可能須要花上幾個禮拜,咱們應該須要下載與訓練網絡的權重,並從新訓練最後的 softmax 層(或最後幾層),這將大幅縮短訓練時間。緣由是靠前的層傾向於全部圖像中的概念相關,例如邊緣和曲線。


  • 遷移學習(transfer learning)就是把已經訓練好的模型參數遷移到新的模型來幫助新模型訓練數據集。大部分數據或者任務都存在相關性,所以經過遷移學習能夠將已經學到的參數分享給新模型,從而加快並優化模型的學習,而沒必要從零開始。遷移學習的初衷就是節省人工標註樣本的時間。吳恩達曾在 NIPS 2016 表示:「遷移學習將會是繼監督學習以後的下一個機器學習商業成功的驅動力。」(Transfer learning will be the next driver of ML success.)


第 9 課:如何在計算機視覺競賽獲勝

吳恩達說,你應該獨立的訓練幾個網絡,平均它們的輸出結果來得到更好的性能。數據加強技術(data augmentation),如隨機裁剪圖像、水平翻轉、垂直翻轉,也有助於提高性能。最後,你應該使用開源的實現和與訓練的模型來啓動項目,而後針對你的應用的參數進行微調。


  • 數據加強技術經常使用的方式還有改變圖像色差、扭曲圖像特徵、改變圖像尺寸、加強圖像噪音(通常使用高斯噪音(gauss noise)、鹽椒噪音(salt & pepper noise))等等。


第 10 課:如何實現目標檢測

吳恩達解釋了圖像中特徵點檢測(landmark detection)的概念。總的說來,這些特徵點是你訓練輸出樣本的一部分。經過一些巧妙的卷積操做,你能夠獲得一個輸出值,告訴你這個目標在某些區域的機率及目標的位置。他還解釋瞭如何使用交除並(intersection over union,IoU)公式評估目標檢測算法的有效性。最後,吳恩達將全部這些內容整合在一塊兒,講解了著名的 YOLO 算法。

  • 特徵點檢測指的是使用計算機提取圖像信息,決定每一個圖像的點是否屬於一個圖像特徵。特徵檢測的結果是把圖像上的點分爲不一樣的子集,這些子集每每屬於孤立的點、連續的曲線或者連續的區域。
  • 交除並能夠理解爲系統預測出來的框與原來圖片中標記的框的重合程度。計算方法即檢測結果 Detection Result 與 Ground Truth 的交集比上它們的並集,即爲檢測的準確率,以下圖所示:
  • YOLO 算法是 Joseph Redmon 和 Ali Farhadi 等人於 2015 年提出的第一個基於單個神經網絡的目標檢測算法。


第 11 課:如何實現人臉識別

人臉識別(face recognition)是一次性的學習問題,由於您可能只有一個樣本圖像來識別該人。解決的辦法是學習一個類似性函數,給出兩個圖像之間的差別程度。因此若是圖像是同一我的的話,函數將輸出一個較小的數值,若是是不一樣的人則輸出較大的數值。

人臉識別包括圖像攝取、人臉定位、圖像預處理、以及人臉識別(身份確認或者身份查找)。系統輸入通常是一張或者一系列含有未肯定身份的人臉圖像,以及人臉數據庫中的若干已知身份的人臉圖象或者相應的編碼,而其輸出則是一系列類似度得分,代表待識別的人臉的身份。

目前人臉識別的算法能夠分類爲:

  • 基於人臉特徵點的識別算法(feature-based recognition algorithms)。
  • 基於整幅人臉圖像的識別算法(appearance-based recognition algorithms)。
  • 基於模板的識別算法(template-based recognition algorithms)。
  • 利用神經網絡進行識別的算法(recognition algorithms using neural network)。
  • 利用支持向量機進行識別的算法(recognition algorithms using SVM)。

吳恩達給出的第一個解決方案,叫暹羅網絡(siamese network),該方案是在同一個網絡中,分別輸入兩我的的圖像,而後比較它們的輸出。若是輸出類似,則代表這兩我的的圖像可能來自同一我的。基於這種想法來訓練網絡:若是輸入圖像是同一我的的,那麼編碼距離相對較小。

  • 暹羅網絡是一種類似性度量方法,當類別數多,但每一個類別的樣本數量少的狀況下可用於類別的識別、分類等。暹羅網絡的思想是從數據中去學習一個類似性度量,用這個學習出來的度量去比較和匹配新的未知類別的樣本。這個方法能被應用於那些類別數多或者整個訓練樣本沒法用於以前方法訓練的分類問題。

吳恩達給出的第二個解決方案是三重損失法(triplet loss method)。這個想法是,你的圖像有三個維度:Anchor(A)、Positive(P) 和 Negative(N),訓練網絡以後,A 和 P 的輸出距離遠小於 A 和 N 的輸出距離。


  • 三重損失法一般是在個體級別的細粒度識別上使用,傳統的分類是花鳥狗的大類別的識別,可是有些需求是要精確到個體級別,好比精確到哪一個人的人臉識別。所以,三重損失法在圖像檢索領域有很是普遍的應用,好比人臉識別、行人重識別、商品檢索等。


第 12 課:如何使用神經風格遷移創做藝術做品

吳恩達講解了如何將內容和風格相結合生成一個圖像。示例以下圖所示:



  • 風格遷移(style transfer),主要是經過神經網絡,將一幅藝術風格畫(style image)和一張普通的照片(content image)巧妙地融合,造成一張很是有意思的圖片。風格遷移是 Gatys 等人於 2015 年首次使用深度學習進行藝術畫風格學習。把風格圖像 Xs 的繪畫風格融入到內容圖像 Xc,獲得一幅新的圖像 Xn。則新的圖像 Xn:即要保持內容圖像 Xc 的原始圖像內容(內容畫是一部汽車,融合後應還是一部汽車,不能變成摩托車),又要保持風格圖像 Xs 的特有風格(好比紋理、色調、筆觸等)。

神經風格遷移的關鍵是要理解卷積網絡中每一層學習的視覺表徵。原來就是靠前的層學習簡單的特徵,如邊緣;靠後的層則學習複雜的目標,如面孔、足部和汽車等。

要構建一個神經風格遷移圖像,你只需定義一個成本函數(cost function),這是一個內容和風格類似點的凸組合(convex combination)。詳細地說,這個成本函數這樣表示:

凸組合是一類特殊的線性組合,是若干個點的某種特定意義下的非負線性組合。

其中,G 是生成的圖像,C 是內容圖像,S 是風格圖像。這個學習算法簡單地使用梯度降低,使與生成圖像 G 相關的成本函數最小化。

步驟以下:

  1. 隨機生成 G;
  2. 使用梯度降低來使 J(G) 最小化,即寫入 G:=G-dG(J(G));
  3. 重複步驟 2。


結論

學完這門課程以後,你將會對大量計算機視覺文獻有直覺理解。課後做業讓你動手將這些方法付諸實踐。儘管學完這門課你並不能成爲計算機視覺領域的專家,但這門課卻有可能會讓你在計算機視覺領域中開啓潛在的思路或者事業。

參考資料

[1] Deep Learning Specialization

https://www.coursera.org/specializations/deep-learning

[2] Deep Learning Specialization by Andrew Ng — 21 Lessons Learned

https://towardsdatascience.com/deep-learning-specialization-by-andrew-ng-21-lessons-learned-15ffaaef627c

[3] Computer Vision by Andrew Ng — 11 Lessons Learned

towardsdatascience.com/computer-vi…

引導語:更多的乾貨內容請關注微信AI前線:ID:ai-front

相關文章
相關標籤/搜索