不久前,Coursera 上放出了吳恩達 deeplearning.ai 的第四門課程《卷積神經網路》。本文是加拿大國家銀行首席分析師 Ryan Shrott 在完成該課程後所寫的學習心得,有助於大家直觀地了解、學習計算機視覺。

我最近在 Coursera 上完成了吳恩達教授的計算機視覺課程。吳恩達非常準確地解釋了很多優化計算機視覺任務需要了解的複雜概念。我最喜歡的部分是神經風格遷移部分(第 11 課),你可以將莫內的繪畫風格和你喜歡的任何圖像結合起來創作自己的藝術作品。示例如下:

本文,我將討論在該課程中學到的 11 堂重要的課。注意:這是 deeplearning.ai 發布的深度學習專門化的第四課。

第 1 課:為什麼計算機視覺發展迅速

大數據和演算法的發展使智能系統的測試誤差收斂至貝葉斯最優誤差。這使得 AI 在很多領域中超越人類水平,包括自然感知任務。TensorFlow 的開源軟體允許你使用遷移學習實現目標檢測系統,可快速檢測任意目標。有了遷移學習,你只需 100-500 個樣本就可以使系統運行良好。手動標註 100 個樣本工作量不是很大,因此你可以快速獲得一個最小可行產品。

第 2 課:卷積的工作原理

吳恩達解釋了如何實現卷積運算元,並展示了它如何對圖像進行邊緣檢測。他還介紹了其他濾波器,如 Sobel 濾波器,它賦予邊緣的中心像素更多權重。吳恩達還介紹道:濾波器的權重不應該手動設計而應使用爬山演算法(如梯度下降)學得。

第 3 課:為什麼使用卷積網路?

關於為什麼卷積網路在圖像識別任務中表現如此好這個問題,吳恩達給出了多個哲學原因。他介紹了兩個具體原因。一,參數共享(parameter sharing):在圖像某一部分有效的特徵檢測器對另一部分可能也有效。例如,邊緣檢測器可能對圖像的很多部分都有用。參數共享需要較少的參數數量和較魯棒的平移不變性。

第二個原因是連接的稀疏性:每個輸出層只是少量輸入的函數(尤其是,濾波器的尺寸)。這大幅降低了網路的參數數量,加快了訓練速度。

第 3 課:為什麼使用 Padding?

Padding 通常用於保證卷積過程中輸入和輸出張量的維度是一樣的。它還可以使圖像邊緣附近的幀對輸出的貢獻和圖像中心附近的幀一樣。

第 4 課:為什麼使用最大池化?

實證研究表明最大池化在卷積神經網路中非常有效。通過對圖像進行下採樣,我們可以減少參數數量,使特徵在縮放或方向變化時保持不變。

第 5 課:經典的網路架構

吳恩達展示了 3 種經典的網路架構:LeNet-5、AlexNet 和 VGG-16。他的主要思想是:高效網路中層的通道規模不斷擴大,寬度和高度不斷下降。

第 6 課:為什麼 ResNets 有效?

對於普通的網路來說,由於梯度下降或爆炸,訓練誤差並不是隨著層數增加而單調遞減的。這些網路具備前饋跳過連接(feed forward skipped connection),在性能不出現下降的情況下訓練大型網路。

第 7 課:使用遷移學習

使用 GPU 從頭開始訓練大型神經網路,如 Iception 可能需要數周時間。因此,我們需要下載預訓練網路中的權重,僅僅重訓練最後的 softmax 層(或最後幾層),以減少訓練時間。原因在於相對靠前的層傾向於和圖像中更大的概念相關——如邊緣和曲線。

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

吳恩達認為我們應該獨立訓練一些網路,平均它們的輸出結果以獲取更好的性能。數據增強技術——如隨機裁剪圖片、水平翻轉和垂直軸對稱調換也可以提升模型性能。最後,你需要從開源的實現和預訓練模型上開始,針對目標應用逐漸調整參數。

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

吳恩達首先解釋了如何進行圖像關鍵點檢測。基本上,這些關鍵點距離訓練輸出的範例很遠。通過一些巧妙的卷積操作,你會得到一些輸出量,其中顯示目標在特定區域的概率以及目標的位置。他還解釋了如何使用交並比(Intersection-over-Union,IoU)公式評估目標檢測演算法的有效性。最後,吳恩達將所有這些內容整合在一起,介紹了著名的 YOLO 演算法。

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

人臉識別是 one-shot 學習問題,通常,你只有一張圖像來識別這個人。解決的辦法是學習一個相似性函數,給出兩個圖像之間的差異程度。所以,如果圖像是同一個人,函數的輸出值較小,而不同的人則相反。

吳恩達給出的第一個解決方案叫作 siamese 網路。該方法將兩個人的圖像輸入到同一個網路中,然後比較它們的輸出。如果輸出類似,則是同一個人。該神經網路的訓練目標是:如果輸入圖像是同一個人的,則編碼距離相對較小。

他給出的第二個解決方法是三重損失法(triplet loss method)。這個想法的核心在於圖片的三個維度(Anchor(A)、Positive(P)和 Negative(N))在訓練過後,A 和 P 的輸出距離大大小於 A 和 N 的輸出距離。

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

吳恩達在課程中解釋了如何結合圖像內容和風格生成全新圖像。如下圖所示:

神經風格遷移的關鍵是理解卷積神經網路每個網路層中學習的視覺表徵。前面的層學習簡單的特徵,如邊緣,後面的特徵學習複雜的物體,如臉、腳、汽車。

為了構建神經風格遷移圖像,你簡單地定義一個代價函數,即內容圖像和風格圖像中相似點結合後的凸函數。具體來說,該代價函數可表示為:

J(G) = alpha * J_content(C,G) + beta * J_style(S,G)

其中,G 是生成的圖像,C 是內容圖像,S 是風格圖像。該學習演算法簡單地使用梯度下降最小化與生成圖像 G 有關的代價函數。

步驟如下:

1. 隨機生成 G。

2. 使用梯度下降最小化 J(G),也就是 G := G-dG(J(G))。

3. 重複步驟 2。

結論

通過完成該課程,你會對大量計算機視覺文獻有個直觀的理解。課程中的作業也會讓你動手實現這些方法。雖然完成這門課後,你不能直接成為計算機視覺領域的專家,但這門課程可能成為你在計算機視覺領域開啟一種思路或者事業的一個踏板。我的 GitHub 地址:https://github.com/ryanshrott。


推薦閱讀:
相关文章