在訓練模型時,常常會遇到資料集中的圖片大小不統一,因而無法直接將資料集導入訓練,需要做額外的處理。舉例來說,我們想要利用 COCO dataset 訓練一個 object detection 模型,如:YOLO,但是我們會發現 COCO dataset 裡面的圖片尺寸並不統一,無法直接利用 object detection model 作 mini-batch learning,因為在某些架構下需要確保所有 mini-batch 中的 input shapes 統一。那我們可以如何處理這種狀況呢?這篇文章將提供處理這個問題的一種解法,需要註明的是,將要介紹的方法並非唯一解,也不一定是所有 CV 研究者一定會採用的方式,單純是個人在工作上時常採用的方法,在這紀錄並介紹給各位。
首先,最 naive 的作法當然就是直接統一將所有圖片 resize 至某個形狀,但是這種作法會有變形的問題,例如我們將所有 COCO 圖片 resize 至 (480, 640)
,會發現原本直的長方形會被 resize 成扁的長方形,圖片的內容會整個變形(如下圖),因此我們勢必要做額外的處理避免這個問題。
1st step: aspect ratio
第一步我們會對所有的圖片做統計,計算所有圖片的長寬比後再進行下一步的動作。這裡我們不用實際的圖片大小作為統計資訊的原因為,避免兩張比例相同但 resolution 不同的圖片被視為不同的統計資料,例如有一張圖片為 (480, 640), r = 0.75
,另一張圖片為 (450, 600), r = 0.75
,我們想要將這兩張圖片視為同一類,最後這兩張圖片會被 resize 至同樣的大小,若我們確定 (480, 640)
的圖片 resize 過後不會產生太離譜的形變,則我們預期 (450, 600)
大小的圖片同樣不會產生離譜的形變,因為圖片比例是相同的。下圖為 COCO 2017 dataset 長寬比之統計。
2nd step: k-means clustering
第二步我們利用 k-means clustering 演算法找出 aspect ratio 的分群,假設我們將 COCO dataset 的 aspect ratio 分為 3 群,我們可以得到各群的 mean 分別為:0.6979
、1.0016
、1.4204
,代表這三個 aspect ratio 最能代表 COCO dataset 的長寬比。
3rd step: resize and training
最後一步我們就按照分群的結果,將圖片 resize 至對應的長寬比,此時我們只需給定一個圖片的面積,即可算出對應的 height、width。我們以簡單的數學式子可以求出對應的 height、width:
$$
h \times w = area \hspace{1cm} \text{and} \hspace{1cm} \frac{h}{w} = r
\hspace{1cm} \Rightarrow w = \sqrt{\frac{a}{r}}
$$
其中 $r$ 為對應的 aspect ratio。需要注意的是,現有 CNN 模型常有 pooling 或是 stride 的設計,因此規定輸入圖片需要是 $k$ 的倍數,如:$k = 32$,為了使 $w$ 和 $h$ 都能夠為 $32$ 的倍數我們額外做以下處理:
$$
\begin{aligned}
w &\leftarrow \text{ceil}(w/32) \times 32 \\
h &\leftarrow \text{ceil}(h/32) \times 32
\end{aligned}
$$
最後訓練的時候,我們可以依序對每個類別做訓練,同類別的圖片皆對應到相同的長寬比,且可以得出相同的 height、width,因此 resize 過後可以利用 batch 學習。
結論
這篇文章提供一種想法,來應對資料集中圖片長寬不統一的情形,直接將圖片統一至某一 size 太過於簡單粗暴,我們透過統計、分群的方式,找出多個最適合資料集的長寬比,再將圖片 resize 成對應的大小,此種方式可以說是折衷的訓練方式,一方面降低形變造成的影響,一方面能夠提供模型做 batch learning。舉例來說,以下圖片被分類至長寬比 1.4204
的群中,若我們以 0.2MP 的面積計算,可以求出 $h = 576$,$w = 384$,可以看到最後 resize 的結果沒有發生太過離譜的形變。
其他文章
機器學習系列文章總整理
EM Algorithm 詳盡介紹: 利用簡單例子輕鬆讀懂 EM 的原理及概念
Gaussian Mixture Model (GMM) -混合高斯模型的介紹以及完整數學式推導
[MobileNet 系列] MobileNetV1-為終端而生
[MobileNet 系列] MobileNetV2-小改動大進化,終端的唯一選擇
Pingback: 機器學習系列文章總整理 - PlayRound 玩轉部落格