盤點圖像分類的竅門

本文為 AI 研習社編譯的技術博客,原標題 :

A Bag of Tricks for Image Classification

作者 | George Seif

翻譯 | dongburen、老趙

校對 | 鄧普斯•傑弗       審核| 醬番梨      整理 | 菠蘿妹

原文鏈接:

https://towardsdatascience.com/a-big-of-tricks-for-image-classification-fec41eb28e01


你最近一次了解到深度學習理論百分百與實際驗證相匹配是什麼時候?這種情況很少發生。研究論文闡明的是一種情況,但實際生活中的結果卻與之有所不同。

這不完全是研究論文的問題。實驗是科學研究的重點,基於特定的環境,特定數據集,我們得到相應結果。一旦你在實際中應用這些模型,處理噪聲和野生數據的挑戰就必須考慮。理論並不是經常和現實世界中所發生的完全契合,但理論確實提供了一個基準。

那麼造成理論和實際之間差距的原因是什麼——現實生活中沒有足夠多的新數據。主要的區別來自於深度學習專家為了提供額外性能提升處理模型所使用的''技巧''。你可以通過對模型進行大量實驗,或者只是從已擁有模型的人那裡學習得到這些均衡模型性能的隱藏技巧。來自亞馬遜研究團隊的最新研究定量指出對同一模型使用這些處理技巧最大可得到4%的準確度性能提升。

在本文中,你會了解到專家對其深度學習模型提升額外性能的處理技巧。我將為你提供在實際應用設置中使用這些技巧的觀察點。


  大批量尺寸

在理論中,一個較大的mini-batch尺寸有助於網絡收斂到較好的最小值,最終得到較好的準確性。由於GPU內存的原因,人們經常會在這裡受阻,因為消費者最大能買到的GPU高達12GB(對於Titan X)和16GB雲端(對於V100)。 我們有兩種方法可以應對這一挑戰:

(1).分佈訓練:將訓練數據劃分到多塊GPU上。在每個訓練階段,會將批拆分到空閑的GPU。舉例來說,假設你有批尺寸為8的圖像和8個GPU,然後每個GPU處理一副圖像。你可以將各自最終的梯度和輸出分別結合起來。你確實從GPU之間的數據傳輸中花費了輕微的代價,但仍然可以通過并行處理獲得大幅速度提升。許多開源的深度學習庫(包括Keras)都支持這個函數。

(2).在訓練中改變批和圖像尺寸:大量研究論文報告大批量廣泛使用的部分原因是許多標準研究數據集的圖像尺寸都不是很大。 例如,在ImageNet上訓練網絡時,大多數最先進的網絡都使用了像素在200p到350p之間的圖像; 當然如此小圖像尺寸可以使用大批量!實際上,由於目前的照相技術,我們大多數都在處理1080p或與1080p相差不大的圖像。     

為了克服這點小困難,你可以小圖像大批量開始訓練。通過降採樣訓練圖像得到。然後,你可以將更多的它們組合成一個批次。使用大批量+小圖像,你應該能得到一些不錯的結果。為了完成網絡訓練,使用較小的學習速率和較小批量的大圖像對網絡進行微調。這有助於網絡重新適應高分辨率,並且低學習速率使網絡不會跳離從大批量發現的良好最小值。因此,你的網絡可以從大批量訓練中獲得最佳效果,並且可以很好地處理來自微調的高分辨率圖像。


大型小批量訓練對物體探測器的影響


  模型微調

研究報告並不總能告訴你全部情況。作者通常會在論文中給出他們的官方代碼鏈接,這是一個學習算法比論文本身更好的資源!當您閱讀代碼時,您可能會發現他們遺漏了一些小的模型細節,而這些細節實際上造成了很大的準確性差異。

我鼓勵大家看一下研究論文的官方代碼,這樣你就可以看到研究人員用來獲得結果的確切代碼。這樣做還可以為您提供一個很好的模板,以便您可以快速地進行自己的小調整和修改,以查看它們是否改進了模型。探索一些模型的公開的二次實現也是很有幫助的,因為這些模型可能包含其他人已經試驗過的代碼,這些代碼最終在原始模型的基礎上得到了改進。看看下面的ResNet架構,以及在一些公共代碼中發現的3處更改。它們看起來很小,但是每一個都在運行時幾乎沒有變化的情況下提高了不可忽略的準確性;ResNet-D在Top-1準確率上整整提高了1%。

ResNet-50的原始結構

ResNet-50的改進和提高版本


  訓練方法改進

根據實際的應用和研究團隊設置訓練的不同,深度網絡的訓練方式往往不盡相同。知道如何正確地訓練神經網絡可以讓你的準確率提高3-4%。這種技能,既需要來自於對深度網絡的了解,也來自於一些簡單的實踐。 

 不幸的是,大多數人不太重視訓練,並期望網絡神奇地給他們帶來很棒的結果。

請注意在最新研究中使用的具體訓練策略。你會經常看到他們中的大多數不會僅僅默認為一個單一的學習率,而是使用像Adam或RMSProp這樣的自適應方法採用動態的學習率。他們使用諸如熱身訓練、速率衰減和優化方法的組合來獲得他們可能達到的最高準確率。 

下面是我個人最喜歡的方法。

 Adam optimiser非常容易使用,而且它可以自動得到適合的學習率。另一方面,SGD通常會比Adam提高1-2%,但是很難調參。那麼,從Adam開始:只要設置一個學習速率,它不是高得離譜的,通常默認值是0.0001,你通常會得到一些非常好的結果。然後,一旦您的模型使用Adam效果達到極限,就可以用SGD從較小的學習率開始進行微調,以實現準確率最後的提升! 


  遷移學習

除非你在做前沿研究,試圖打最先進的基礎技術,否則轉移學習應該是默認的實際的方法。從頭開始對新數據進行網絡培訓是具有挑戰性、耗時,有時還需要一些額外的領域專家才能真正做好。  

遷移學習提供了一種既能加速訓練又能提高準確性的簡單方法。大量的研究和實踐證據一致表明,遷移學習使模型比從頭開始的訓練更容易訓練,並提高了準確性。它將完全簡化事情,使您更容易獲得一些不錯的基線結果。  

一般來說,具有更高準確率的模型(相對於同一數據集上的其他模型)將更有利於轉移學習,並獲得更好的最終結果。唯一需要注意的事情是,要根據你的目標任務選擇相關的網絡進行轉移學習。例如,在醫學成像數據集上使用一個為自動駕駛汽車預先培訓的網絡不是一個好主意;由於數據本身是非常不同的,所以域之間存在巨大的差異。你最好從頭開始訓練,不要在開始的時候就帶來數據的偏差,因為帶來偏差的數據和醫療影像完全不同。

遷移學習的主要思想


  精選的數據增強

數據增強是另外一種大幅提高準確率的方法。大部分人只關注經典的旋轉和裁切,這樣也可以。如果你有時間去等待在這些額外的圖像訓練的時間,他們可以潛在的給你額外的幾個百分點的準確率的提高,而且無需增加訓練時間。

但是最先進的方法不僅如此。

一旦你開始開始更深入的研究,你會發現更多先進的數據增強方法,這些方法可以給深度神經網絡帶來最後的提高。縮放,比如圖像乘以圖像像素的顏色或者亮度的值,可以使訓練圖像比原始圖像更廣泛的暴露在訓練網絡。它有助於解釋這些變化,特別是,根據房間或天氣的不同光照條件,這些在現實世界中變化非常頻繁。

 另外一個技巧,裁剪正則化(Cutout Regularisation),在最新的ImageNet上廣泛應用。儘管名為裁剪(cutout),但它實際上可以看作是採取遮擋的方式進行數據增強。在現實世界的應用中,遮擋是一個非常常見的挑戰,尤其是在機械人和自動駕駛汽車的熱門計算機視覺領域。通過對訓練數據應用某種形式的遮擋,我們可以有效地調整我們的網絡,使其更加具有魯棒性。 


裁剪正則化/數據增強


想要繼續查看該篇文章相關鏈接和參考文獻?

長按鏈接點擊打開或點擊【盤點圖像分類的竅門】:

https://ai.yanxishe.com/page/TextTranslation/1392


AI研習社每日更新精彩內容,觀看更多精彩內容:雷鋒網雷鋒網雷鋒網

盤點圖像分類的竅門

深度學習目標檢測算法綜述

生成模型:基於單張圖片找到物體位置

AutoML :無人駕駛機器學習模型設計自動化


等你來譯:

如何在神經NLP處理中引用語義結構 

你睡著了嗎?不如起來給你的睡眠分個類吧! 

高級DQNs:利用深度強化學習玩吃豆人遊戲

深度強化學習新趨勢:谷歌如何把好奇心引入強化學習智能體 



想在手機閱讀更多博客及網站收入資訊?下載【香港矽谷】Android應用
分享到Facebook
技術平台: Nasthon Systems