作者:Lars Hulstaert
關(guān)鍵概念 雖然計算機(jī)視覺研究者們采取的方法各不相同,但是大體而言,他們的實驗設(shè)置有著如下的趨勢,。本文將討論如何進(jìn)行圖像預(yù)處理,數(shù)據(jù)增強(qiáng)用于哪類數(shù)據(jù),,優(yōu)化機(jī)制以及輸出層的實現(xiàn)方法,。 預(yù)處理 通常而言,我們會計算訓(xùn)練集圖像的平均像素值,,將其從圖像中減去,。請注意,,在 keras 環(huán)境下使用這些模型時考慮預(yù)處理方法很重要。計算機(jī)視覺模型不同,,Keras 的「預(yù)處理」也不同,。 數(shù)據(jù)增強(qiáng) 圖像分類的數(shù)據(jù)集非常大。盡管如此,,依然需要數(shù)據(jù)增強(qiáng)來提高模型泛化能力,。數(shù)據(jù)增強(qiáng)一般包括重新縮放圖像的隨機(jī)裁剪、隨機(jī)水平翻轉(zhuǎn),、隨機(jī) RGB 顏色與亮度變換等技術(shù),。此外,也存在不同的縮放,、裁剪等技術(shù)(即單尺度訓(xùn)練 vs 多尺度訓(xùn)練),。在測試階段進(jìn)行多裁剪評估也是經(jīng)常使用的途徑,不過該方案的計算成本更昂貴且性能改進(jìn)有限,。請注意,,隨機(jī)縮放和裁剪的目標(biāo)是在不同尺寸和位置上學(xué)習(xí)對象的重要特征。Keras 并未實現(xiàn)所有數(shù)據(jù)增強(qiáng)技術(shù)的開箱即用,,但可以通過 ImageDataGenerator 模塊的預(yù)處理技術(shù)輕松實現(xiàn),。Andrew Howard 提出的數(shù)據(jù)增強(qiáng)技術(shù)更深入地解釋了這些關(guān)鍵性的方法,具體參見: https:///ftp/arxiv/papers/1312/1312.5402.pdf 同一照片不同裁剪方式的實例(選自 Andrew Howard 論文) 訓(xùn)練機(jī)制 在 keras 中可通過多 GPU 數(shù)據(jù)并行化訓(xùn)練模型(一般批大小為 256),。動量 SGD 或 RMSProp 是常用的優(yōu)化技術(shù),。學(xué)習(xí)率的方案相對簡單,要么在驗證集的損失或準(zhǔn)確率開始穩(wěn)定時調(diào)低學(xué)習(xí)率,,要么在固定間隔上調(diào)低學(xué)習(xí)率,。通過 keras 中的「ReduceLROnPlateau」回調(diào)函數(shù)可以輕松模擬這種行為。 這是一個訓(xùn)練過程的實例,,其中學(xué)習(xí)率降低然后損失函數(shù)變得平坦了,。 最后一層 圖像分類網(wǎng)絡(luò)中最后一層傳統(tǒng)上來說是全連接層。這些層的參數(shù)量巨大,,因為你需要 N×M 個參數(shù)才能從 N 個隱藏節(jié)點過渡到 M 個節(jié)點?,F(xiàn)在,這些全連接層已經(jīng)被平均池化或最大池化層替代,,它們要求的參數(shù)量和計算時間比較小,。在對 keras 中預(yù)先訓(xùn)練好的網(wǎng)絡(luò)進(jìn)行微調(diào)時,這一點非常重要,,這能限制所需要添加參數(shù)的數(shù)量,。 VGGNet VGGNet(https:///pdf/1409.1556.pdf)發(fā)布于 2014 年,作者是 Karen Simonyan 和 Andrew Zisserman,該網(wǎng)絡(luò)表明堆疊多個層是提升計算機(jī)視覺性能的關(guān)鍵因素,。VGGNet 包含 16 或 19 層,,主要由小型的 3×3 卷積操作和 2×2 池化操作組成。 VGG 的優(yōu)點在于,,堆疊多個小的卷積核而不使用池化操作可以增加網(wǎng)絡(luò)的表征深度,,同時限制參數(shù)的數(shù)量。例如,,通過堆疊 3 個 3×3 卷積層而不是使用單個的 7×7 層,,可以克服一些限制。首先,,這樣做組合了三個非線性函數(shù),,而不只是一個,使得決策函數(shù)更有判別力和表征能力,。第二,,參數(shù)量減少了 81%,,而感受野保持不變,。另外,小卷積核的使用也扮演了正則化器的角色,,并提高了不同卷積核的有效性,。 VGG 的缺點在于,其評估的開銷比淺層網(wǎng)絡(luò)更加昂貴,,內(nèi)存和參數(shù)(140M)也更多,。這些參數(shù)的大部分都可以歸因于第一個全連接層。結(jié)果表明,,這些層可以在不降低性能的情況下移除,,同時顯著減少了必要參數(shù)的數(shù)量。16 層和 19 層的參數(shù)預(yù)訓(xùn)練 VGG 在 keras 上是可以使用的,。 ResNet ResNet 架構(gòu)是由何凱明等人提出的,,他們試圖通過這個架構(gòu)訓(xùn)練更深的網(wǎng)絡(luò)。作者指出,,增加網(wǎng)絡(luò)深度會導(dǎo)致更高的訓(xùn)練誤差,,這表明梯度問題(梯度消失/爆炸)可能會導(dǎo)致訓(xùn)練收斂性等潛在問題。 盡管 20 層網(wǎng)絡(luò)的潛在函數(shù)空間是封裝在 56 層網(wǎng)絡(luò)的空間內(nèi)且運用了傳統(tǒng)的梯度下降,,但無法實現(xiàn)同樣的效果(選自 ResNet 論文) ResNet 的主要貢獻(xiàn)是增加了神經(jīng)網(wǎng)絡(luò)架構(gòu)的跳過連接(skip connection),,使用批歸一化并移除了作為最后一層的全連接層。 通過跳過連接,,卷積層的輸入 x 被添加到輸出當(dāng)中,。因此,網(wǎng)絡(luò)只學(xué)習(xí)「殘留」特征,并容易保存已學(xué)習(xí)的特征,。 跳過連接基于這樣一種想法:只要神經(jīng)網(wǎng)絡(luò)模型能夠「適當(dāng)?shù)亍箤⑿畔那耙粚觽鬟f到下一層,,它應(yīng)該能變得「無限」深。如果在更深層沒有附加信息進(jìn)行聚合,,那么帶有跳過連接的卷積層可以視為一個恒等映射函數(shù),。 通過向網(wǎng)絡(luò)中添加跳過連接,卷積層的默認(rèn)函數(shù)變成了恒等函數(shù),。卷積核學(xué)到的任何新信息都可以在基本表征中添加或減去,,因此這更容易優(yōu)化殘差映射。跳過連接不會增加參數(shù)的數(shù)量,,但可以獲得更穩(wěn)定的訓(xùn)練和顯著的性能提升,,這是因為可以達(dá)到更深的網(wǎng)絡(luò)(例如深度為 34、50,、101 和 152 的網(wǎng)絡(luò)),。請注意,1×1 的卷積用于減少輸出通道的個數(shù),。 除跳過連接之外,,在每次卷積完成后、激活進(jìn)行前都采取批歸一化,。最后,,網(wǎng)絡(luò)刪除了全連接層,并使用平均池化層減少參數(shù)的數(shù)量,。由于網(wǎng)絡(luò)加深,,卷積層的抽象能力更強(qiáng),從而減少了對全連接層的需求,。 GoogLeNet GoogLeNet 與 ResNet 的論文幾乎同時發(fā)表,,但它們引入了不同的改進(jìn)方案。前面提到的兩篇論文著重于提高分類網(wǎng)絡(luò)的表征深度,。 然而,,GoogLeNet 仍試圖擴(kuò)大網(wǎng)絡(luò)(多達(dá) 22 層),但也希望減少參數(shù)量和計算量,。最初的 Inception 架構(gòu)由 Google 發(fā)布,,重點將 CNN 應(yīng)用于大數(shù)據(jù)場景以及移動端。GoogLeNet 是包含 Inception 模塊的全卷積結(jié)構(gòu),。這些模塊的目的是:通過構(gòu)建由多個子模塊(比如嵌套網(wǎng)絡(luò) - Inception)組成的復(fù)雜卷積核來提高卷積核的學(xué)習(xí)能力和抽象能力,。 Inception 模塊的實例。1x1 卷積用來減小輸入/輸出的維度(選自 GoogLeNet 論文),。 除了加入 Inception 模塊,,作者還使用了輔助分類器來提高穩(wěn)定性和收斂速度,。輔助分類器的想法是使用幾個不同層的圖像表征來執(zhí)行分類任務(wù)(黃色框)。因此,,模型中的不同層都可以計算梯度,,然后使用這些梯度來優(yōu)化訓(xùn)練。 GoogLeNet 架構(gòu)圖示,。黃色框表示輔助分類器(選自GoogLeNet論文),。 Inception v3 Inception v3 架構(gòu)中結(jié)合了幾項創(chuàng)新點。在 Inception v3 中,,主要的創(chuàng)新在于借鑒了 GoogLeNet 和 VGGNet 的部分原創(chuàng)思想,,即使用 Inception 模塊并通過一系列較小的卷積核更高效地表示較大的卷積核。除了小卷積之外,,作者還嘗試了非對稱卷積(例如用 n×1 和 1×n 代替 n×n,,而非多個 2×2 和 3×3 濾波器)。 一個 3x3 卷積核后跟一個 1x1 卷積核的例子,,它有效地取代了一個 5x5 卷積核(圖片來自 Inception v3 論文),。 作者通過執(zhí)行批歸一化和標(biāo)簽平滑化來改進(jìn)正則化。標(biāo)簽平滑就是為每個類都分配一些權(quán)重,,而不是將全權(quán)重分配給 ground truth 標(biāo)簽,。由于網(wǎng)絡(luò)對訓(xùn)練標(biāo)簽的過擬合程度較低,因此它應(yīng)該能夠更好地泛化,,這與使用 L2 正則化效果相仿,。 為了確保該模型在高分辨率圖像和低分辨率圖像上均表現(xiàn)良好,作者通過 Inception 模塊分析了不同尺寸下的圖像表征,。因此,當(dāng) Inception 網(wǎng)絡(luò)用于目標(biāo)檢測框架時,,它們在對小分辨率和低分辨率對象進(jìn)行分類時表現(xiàn)良好,。 NASNet 我要討論的最后一個圖像分類架構(gòu)是 NASNet(https:///pdf/1707.07012.pdf),它是使用神經(jīng)結(jié)構(gòu)搜索(NAS)框架構(gòu)建的,。NASNet 的目標(biāo)是運用數(shù)據(jù)驅(qū)動和智能方法,,而非直覺和實驗來構(gòu)建網(wǎng)絡(luò)架構(gòu)。盡管我不會詳細(xì)討論這個框架,,但是可以解釋一下它的總體思路,。 Inception 論文表明「神經(jīng)網(wǎng)絡(luò)單元」中復(fù)雜的卷積核組合單元可以顯著提升結(jié)果。NAS 框架將這種單元的構(gòu)建過程定義為優(yōu)化過程,,然后通過疊加最佳單元來構(gòu)建大型網(wǎng)絡(luò),。 例如,搜索框架構(gòu)建了兩種不同的單元,,它們被用于訓(xùn)練整個模型,。 |
|