2021 年 AIdea 機器學習競賽,動態足壓影像辨識,Top 5% 作法分享

by 好豪
Published: Updated:

在 2021 年的 3 月,AIdea 平台 上結束為期三個月的「動態足壓影像辨識」機器學習競賽。我在這場賽事裡達到第 18 名的成績(Top 5%),這是我首次參加影像辨識類型的競賽,成績雖然不到頂尖、也在過程中累積了不少經驗。

在這篇競賽心得筆記裡,我將簡述這場比賽的內容、介紹我使用的深度學習模型、並且分享我實驗後發現對提升預測準確度很有用(以及沒什麼用)的幾項數據分析技巧。

競賽簡介

動態足壓影像辨識」是阿瘦皮鞋在 AIdea 平台舉辦的機器學習競賽,提供了多組足壓資料,每一組足壓資料包含左、右腳的圖片,以及各有 2 個足部標註點。

足壓圖片是足部壓力等壓線的分層設色圖。而每張圖的 2 個足部標註點,就是兩組 [x, y] 座標,分別標出:

  • 足跟:整個足型在行進長軸上的最低點
  • 足前:足掌前端,整個腳掌 (扣除趾頭) 在行進長軸上的最高點

在此競賽,參賽者設計的模型要以足壓圖片作為輸入,並且輸出預測 2 個足部標註點。

以歐式距離為計分標準,預測結果離實際座標點越近、得分就越高。

競賽之輸入與輸出(Source: AIdea 數據好豪的 GitHub

深度學習模型概述

我在此競賽使用的深度學習模型是常見的卷積神經網路架構:ResNet Feature Extraction + Fully-Connected Layers

  • 圖片特徵擷取:使用未經過預訓練的 ResNet 34 層
  • 分類器:三層的全連接層
  • 輸出:四個 Sigmoid 神經元(四個座標數值)
競賽所用的深度學習模型(Source: AIdea 數據ResNet好豪的 GitHub

上述的深度學習模型主要是用 PyTorch (Python3) 實現,同時也是我首次使用 PyTorch Lightning 框架,這項框架能讓 PyTorch 程式碼更有架構、也有針對深度學習設計的 Debug 功能,讓開發更有效率!有興趣的讀者歡迎參考筆者好豪的 PyTorch Lightning 競賽程式碼。如果你正想入門 PyTorch,也推薦你閱讀我以前學習 Udacity 免費 PyTorch 線上課程 的心得。

實際上,我在競賽過程,調整深度學習模型架構並沒有造成太大的成效差異,主要對預測有幫助的是以下要介紹的幾項技巧。

觀察與裁切:模型只需要看圖片重要的部分

透過探索性資料分析,我從座標點與圖片的關係觀察到:

  • 無效率圖片:最上緣以及最下緣存在空白處
  • 足部標註點位置:只分佈在特定範圍內

這些觀察讓我產生了假設:

模型不需要看整張圖片、而只需要看圖片的特定部分。

訓練資料中,所有可能的座標點位置分佈(Source: AIdea 數據好豪的 GitHub

此外,我一開始訓練深度學習模型時,發現足跟座標的預測精準度很高;相較之下,足前座標的預測精準度遜色很多。或許是因為足前的足壓影像涉及了五根腳趾頭、所以複雜得多。也因此我開始嘗試,模型可以分開,只獨立預測足前、或者只預測足跟。

足前、足跟,分開訓練

綜合以上的觀察,我使用的方法如下:

  1. 訓練一個深度學習模型,只讓它看足跟的影像,只預測足跟的座標
  2. 訓練另外一個深度學習模型,只讓它看足前的影像、並且把前一個模型預測的足跟座標結果也當作輸入,讓此模型輸出足前的座標

為什麼想這麼做呢?

首先,卷積神經網路的模型大小(總參數量),取決於輸入圖片大小,圖片越小,模型也越小,訓練更快收斂。把圖片裁切到只看足前或足跟的小部分之後,當我想嘗試不同網路架構、或者想使用 Data Augmentation、Ensemble 等技巧時,更快的訓練速度讓我有的實驗流程更敏捷、在有限的競賽時間內能夠嘗試更多改進方案

模型架構:足跟與足前分開訓練(Source: AIdea 數據好豪的 GitHub

這裡有個 Teacher Forcing 的小小細節。Teacher Forcing 概念原本來自 RNN 模型,意思是:如果模型的輸出是來自前一個模型的預測結果,Teacher Forcing 要求輸入(有一定的機率)要使用真實標籤、而不是前個模型的預測。

在我的模型架構中,足跟預測結果會納入足前模型的輸入,因此,我讓足前模型的輸入有時候使用足跟模型預測的座標、有時候使用原始資料的真實足跟座標(Teacher Forcing)。但是,使用這個技巧對模型精準度並沒有太大提升,我認為是足跟座標分佈變異程度較低的緣故,而以下要提的 Pseudo Labeling 同樣是操作模型輸入內容、對精準度提升幫助則更大。

Pseudo Labeling:處理原始資料的錯誤

不論任何監督式學習的機器學習任務,我們身為資料科學家,都必須對標籤資料(Label)保持懷疑

關於這份足壓標注資料的來源為何,在 競賽官方頁面 寫著:「結合工研院專利技術與物理治療師的專業判讀」,機器自動化判讀有可能會出錯、物理治療師也有可能標註到想睡覺而畫錯座標。實際檢查這份競賽資料集後就會發現:資料內有不少肉眼就能看出的座標標註錯誤。

我們讓模型學習的是標準答案?還是學到標註者的誤差

即使是官方給的資料、也有可能是錯誤的標注(Source: AIdea 數據好豪的 GitHub

要處理標註錯誤的問題,我 過去參加機器學習競賽 曾經從高手身上學到一個好用的技巧:Pseudo Labeling

Pseudo Labeling:把模型預測結果,當作真實資料標籤,作為模型輸入再次訓練。

在深度學習模型訓練過程,如果驗證集(Validation Set)的準確度沒有繼續提升,我們就會 Early Stopping 停止訓練。但是,驗證集裡也包含了原資料的錯誤標註,準確度低可能是來自於錯誤標註、而不是模型不準確。

因此,我採用 Pseudo Labeling,深度學習模型先訓練到收斂之後,我將資料內所有預測結果與資料標記相差太多的資料點,都用模型預測的結果替換,替換後,模型可以再訓練幾個 Epoch、才再次收斂。

在這個比賽裡使用 Pseudo Labeling 之後,我的深度學習模型精確度確實又向上提升了。然而,Pseudo Labeling 並不是任何場合都有用。在直覺上的解釋,Pseudo Labeling 是讓機器學習模型更加相信它原本就相信的判斷標準,也就是心理學所說的 確認偏誤(Confirmation Bias)。通常,在資料標籤不完善或者不足的時候,Pseudo Labeling 會值得一試,但還是要依據實驗成效決定是否採用、而不是必需為之的動作。

Data Augmentation:減低過擬合

既然是跟影像有關的分析,不得不提起 Data Augmentation(資料增強)技巧。

足部壓力影像,資料增強範例(Source: AIdea 數據好豪筆記:資料增強教學

相較於影像分析最單純的圖像分類問題,在這個比賽,我認為有兩項挑戰:

  1. 足部標註點必須與圖片同時資料增強。例如:如果圖片旋轉了、標註座標也需要旋轉相同角度,才能維持相對位置不變
  2. PyTorch 這類套件內建一堆影像資料增強方法(例如 RandomAffine),但是,沒有調整好參數的話,足部標註點可能會在變形後超出圖片範圍、根本無法預測,所以使用每個資料增強都要非常注意參數選擇

詳細的資料增強技巧,我寫在另一篇 比賽心得筆記,文章內將教學資料增強的好用 Python 套件:Albumentations。

Ensemble:小動作、大提升

Ensemble 是個概念相當簡單的動作:

多次抽樣訓練資料、訓練多個架構相同的模型,將這些模型的預測結果取平均值,當作最終預測結果。

我曾從 NLP 競賽 的冠軍身上學到,深度學習模型準確度高、同時也非常容易過擬合。多次抽樣資料訓練多個模型、然後簡單平均預測結果的 Ensemble,雖然聽起來既單純又基本,在深度學習卻是非做不可的技巧,將大大提升模型的泛化能力

以這次比賽而言,我只是多做了 Ensemble 而已,在 Public Leaderboard 的名次就進步了 10 名!

深度學習通常是 Low Bias & High Variance(圖右上),Ensemble 就是能往 Low Bias & Low Variance (圖左上)邁進的簡單技巧!(Source: Scott Fortmann-Roe

結語

事實上,我在使用文中這些「花招」以前,光是把深度學習模型正確地訓練好,就達到了前 10% 的名次。在實驗過程中,Pseudo Labeling、Data Augmentation、或是 Ensemble 等技巧,各自對預測精準度都不是大幅改進,但是,擠在最前面名次的高手們,都是在競爭一點點的準度差異,所以一旦想到任何技巧,能試就盡力試、絲毫不能馬虎。

寫這篇文章,除了要記錄自己的心得、也想拋磚引玉,希望在這場比賽的其他參賽者,願意公開分享不同的做法、交流學習。

2021 年 6 月更新:AIdea 平台推出了「動態足壓辨識」的練習場,現在每個人都可以取得影像資料、自己練習分析、並且上傳評分驗證成效。喜歡這個議題的話,趕快上去練練手吧!


看到這裡的你,對影像辨識以及 PyTorch 有興趣嗎?我推薦你從以下兩篇筆記開始閱讀:

也推薦你參考 PyTorch 核心開發者撰寫的課本《PyTorch 深度學習攻略》、以及入門機器學習競賽的好用教材《Kaggle 競賽攻頂秘笈 – 掌握 Grandmaster 制勝的關鍵技術》


如果你喜歡這篇文章,歡迎點選下方按鈕加入書籤或分享,也歡迎追蹤 好豪的 Facebook 粉絲專頁,我會持續分享更多資料科學的知識與工作心得。

推薦閱讀