caffe在ImageNet數據集上訓練殘差網絡Resnet

ImageNet數據集作爲圖像分類最經典的公開數據集,對深度學習發展起到了很大的貢獻,基本經典的網絡模型都會在ImageNet上訓練對比。這裏使用ILSVRC2012數據集從頭訓練一個resnet18模型。

因爲條件有限,使用自己的RTX2060s單卡訓練。。。比起Inception系列動不動就幾十塊GPU,真的是心酸。

關於多卡的訓練,推薦大家閱讀論文accurate ,large minibatch SGD:Training ImageNet in 1 Hour。

論文提到了一些調參的技巧很有意義,包括batch size和lr的一些關係,提出常用的warm up進行前期訓練。

這裏我用單卡訓練了5天時間,獲得了一個還不錯的結果:

Single-crop (224x224) validation error rate

Network Top-1 error Top-5 error
KaimingHe / /
FAIR 30.43 10.76
our 30.8625 11.6625

原作者KaimingHe的resnet實現:https://github.com/KaimingHe/deep-residual-networks

Facebook AI Research (FAIR):https://github.com/facebookarchive/fb.resnet.torch

我訓練的Top-1比facebook的低了0.43%,可能是因爲數據增強或者迭代次數原因吧,這裏我整個數據僅僅迭代了60epoch,數據增強僅僅用了隨機裁剪和水平翻轉。

數據集介紹

下載的文件主要包括以下幾個文件:

ILSVRC2012_img_train.tar
ILSVRC2012_img_val.tar
ILSVRC2012_img_test.tar
ILSVRC2012_devkit_t12.gz

前三個爲圖像壓縮包,分別對應train / val / test三個子集。最後一個爲數據說明相關文檔。

訓練集包含1,282,167張圖片,1000類,147 GB;

測試集包含了50,000張圖片,6.7 GB;

測試集包含了100,000張圖片,13.6 GB;

ImageNet還提供了一個開發工具包ILSVRC2012_devkit_t12.tar.gz,是對ILSVRC2012數據集的詳細講解,提交比賽結果的要求,和對結果評價的代碼。

LSVRC2012_img_train.tar解壓後是1000個tar文件,每個tar文件表示1000個分類中的一個類。需要對這1000個tar文件再次解壓。在train目錄下執行unzip.sh文件,最後得到1000個文件夾。每個文件夾中是該類的圖片。ILSVRC2012_img_val.tar解壓後的文件夾包含了所有的驗證集圖片。

我是從網上別人提供的百度網盤下載的。

數據集處理

主要進行了兩種不同的選擇,第一種是圖片resize到256×256,第二種是保持比例短邊resize到256,一般論文都是用的第二種,實際訓練發現第二種比第一種Top-1高3%左右,因爲ImageNet數據集比較大,任何細微的變化都會有明顯的差距,比如優化方式的選擇、lr的變化方式、數據增強等等。

這裏我用caffe自帶的將數據轉爲LMDB進行訓練,訓練的時候隨機從256×N的圖片截取224*224,隨機翻轉用於訓練。

訓練過程

訓練過程如圖

我的batch size設置的64,紅色和紫色分別是驗證集Top-1和Top-5變化,下面的是training和val的loss變化。

更多嘗試

目前在嘗試更多的數據增強的效果,對resnet18加入SE block進行對比。

代碼

https://github.com/midasklr/resnet-caffe