影像Resize方式對深度學習模型效果的影響

周見智發表於2021-04-02

在基於卷積神經網路的應用過程中,影像Resize是必不可少的一個步驟。通常原始影像尺寸比較大,比如常見監控攝像機出來的是1080P高清或者720P準高清畫面,而網路模型輸入一般沒有這麼大,像Yolo系列目標檢測的網路模型輸入大小一般為608*608/512*512 等等。那麼如何將大尺寸影像輸入到網路模型呢?很容易想到的一個方法就是對原始影像進行Resize,將1920*1080的原始影像Resize到網路模型輸入尺寸,比如608*608。在壓縮影像的過程中,有以下兩個問題需要重點討論:

1、影像Resize前後,是否應該保持寬高比例一致?影像內容變形是否對模型效果有影響

2、影像Resize過程,應該選擇什麼樣的插值方式?

 

對於第一個問題,其實兩種方式均可,前提是要保證模型訓練和模型推理時的操作方式一致。也就是說,如果在網路模型訓練時,所有的訓練素材都是直接拉伸到網路的輸入尺寸(不保持寬高比例),那麼模型推理時也應該如此,反之亦然。其中保持寬高比例的做法一般是用增加padding的方式,然後用固定顏色填充,保證影像畫面中部的內容不變形。下圖說明兩種方式的差異:

圖1 是否保持寬高比

其實對於網路模型來講,影像是否變形其實不太重要。如果在訓練的時候,模型認為一個變形的動物是貓,那麼經過大量資料擬合後,在推理階段,它同樣會正確識別出變形的目標。當然根據相關資料顯示,通常一般推薦使用直接拉伸的方式去做影像Resize,原因是增加padding填充後會對網路帶來一定噪音,影響模型準確性,具體影響有多大我目前沒有具體資料證明。這裡需要指出的是,一些演算法應用框架對細節封裝得太好,對原始影像進行Resize的過程被隱藏起來,具體Resize的方式也不得而知。如果你發現模型整合後的準確性下降嚴重,這時候就需要檢查一下框架對影像Resize的方式跟我們模型訓練時是否一致。

 

對於第二個問題,影像Resize過程應該選擇什麼插值方式?如果對插值不太瞭解的朋友可以上網搜尋一下。這裡簡單介紹一下影像插值的含義:我們在對影像進行上下采樣時(縮放),有時候要在原有畫素基礎上刪除一些畫素值(縮小),有時候要在原有畫素基礎上增加一些畫素值(放大),增加/刪除畫素的方式叫影像插值演算法。對OpenCV比較熟悉的朋友可能知道它裡面的Resize函式其實有一個‘插值模式’的引數,這個引數有一個預設值:INTER_LINER線性插值。它是一種插值方式,如果你在呼叫Resize函式時沒有修改該引數值,那麼該函式就以“線性插值”的方式進行影像縮放。除此之外,還有其他的一些插值方式,每種插值演算法的區別請具體參考OpenCV文件。

圖2 插值示意圖

通過上面的介紹,影像在進行Resize操作時,本質上是改變數字影像矩陣大小和矩陣內容,Resize時採用不同的插值方式最終會得到不同的結果(這裡說的結果是指微觀上畫素矩陣,可能肉眼檢視畫面差別不大)。那麼在深度學習應用過程中,我們應該採用什麼樣的插值方式呢?經過實際測試驗證,不管用哪種方式進行插值,模型訓練階段對影像Resize的插值方式跟模型推理階段對影像Resize的插值方式最好能保持一致,前後兩個階段不同的插值方式確實會影響最終模型的效果。

圖3 不同插值結果

除了Resize插值方式應該保持一致之外,Resize的次數最好也能保持統一,如果在模型訓練階段,我們將原始影像素材從1000*800縮放到400*400,然後輸入網路進行訓練,那麼我們在模型推理階段,同樣應該將原始影像以相同的插值方式一次性縮放到400*400,然後輸入網路進行推理。之所以強調一次性縮放,因為有些演算法應用框架在做影像預處理時隱藏了影像縮放的細節,有可能不止一次縮放操作,比如先將原圖縮放到800*800,然後再進行二次縮放,最終變成400*400,雖然兩次用到的插值方式都跟模型訓練階段保持一致,但是由於進行了兩次操作,還是會影響最終推理效果。

圖4 縮放次數不一致

最後總結一下影像縮放方式對模型效果的影響:在模型訓練和模型推理階段,應保持相同的影像預處理方式,這樣才能充分發揮模型的推理效果。原因很簡單,模型訓練的過程就是尋找資料集規律的過程,如果訓練用到的和實際推理的資料規律不一樣,必然會影響模型效果。當然,本文雖然討論影像縮放的不同方式對模型效果有影響,但是由於深度學習是一個基於大量資料統計的過程,在有大量資料擬合的情況下,這種影響可能相對來講並不大,如果你非常在意(或者實際觀察發現影響非常大),那麼本文講到的問題可能對你有幫助。

相關文章