ResNet--影象預處理
152層的 Resnet的圖片輸入尺寸為224*224,那對於大多數情況,圖片的解析度都是大於這個數值,那麼該如何把圖片的尺寸裁剪到這樣一個尺寸,又如何進行資料增強呢?
第一,調整尺寸(Rescaling)
先將圖片較短的那條邊,隨機縮放到[256,480]這樣一個範圍內。注意,此時的圖片是等比例縮放的。舉個例子,原始圖片的尺寸為[1000,800,3],假設圖片短邊縮放到256,那麼此時圖片的尺寸即為[320,256,3],即圖片的長寬比例是不變的。
第二,裁剪(Cropping)
將圖片進行水平翻轉,然後從原圖片和翻轉後的圖片中,隨機裁剪出224*224的圖片。那到底裁幾張呢?Resnet沒有明說。。。我覺得還是看自己計算機的配置。因為從理論上來說,假設裁剪過後的圖片尺寸為[256,256,3],如果按照步長為1,最多可以裁剪出(256-224)*(256-224) = 1024張,再加上水平翻轉的圖片,還要乘以個2,也就是2048張圖片。一張圖片擴充套件了2048倍,肯定是非常誇張了,那所以,我的做法是隨機裁剪個10張,就差不多了。
第三,歸一化(Normalizing)
具體做法就是對於整個訓練集圖片,每個通道分別減去訓練集該通道平均值。
第四,顏色抖動(color shifting)
這裡resnet 引用的是Alexnet 2012年提出的做法,對於每張圖片,每個通道的資料先由二維轉成一維(例如256*256*3,轉成65536*3),再對該圖片(65536*3)三個通道求出協方差矩陣(3*3),再求出協方差矩陣的特徵向量p和特徵值λ,最後按照下圖這樣一個公式進行轉換進行變換, 這裡α是一個服從均值為0,方差為0.1的隨機變數(簡單來說就是一個很小的隨機數),[p1,p2,p3]是一個3*3的矩陣,[λ1,λ2,λ3]的轉置是一個3*1的矩陣,最後矩陣相乘的結果也是個3*1的矩陣,剛好可以和原圖片3個通道相加,這裡執行的是python中的廣播機制,即圖片每個通道65536個畫素點都加上同一個數。
這樣就完成了顏色的隨機抖動,不過我一直想不明白特徵值乘以特徵向量有著什麼樣的數學解釋,如果您知道,請聯絡我(QQ380922457,知乎ID:樑航銘)
第五,測試方法
先抽取測試集影象的四個角以及中間的224×224部分,還包括映象共有10個部分(Patch)結果,再對這10個輸入的測試結果做平均作為我們對該測試集圖片的最終測試結果。
連結:https://www.jianshu.com/p/739df8235587
來源:簡書