[2019.06 更新] 下文是在 2018 年 10 月寫的, 在此補充一下這個題目在發文之後的發展: 1. AIdea 在 2018 年 12 月有舉辦一個技術分享會, 視頻在此供大家參考; 2. 這個題目有被很多學校拿來作為課程專題, 連接在此供大家參考; 3. 原題有被 AIdea 列為長期開放競爭的題目, 所以後續正確率有在不斷刷高, 但是提醒做這個題目的同好一件事, 在產線實際應用上過檢率及漏檢率可能是比正確率更受到重視的指標, 類似情況可能也會發生在醫療影像的判斷上, 所以在實務上需要謹慎選擇正確的指標做評估標準。
[2018.10 原文] 上個月參加了一個資料科學和機器學習的網路競賽 — 自動光學檢查 ( Automated Optical Inspection 簡稱 AOI) 瑕疵分類, 這個比賽是由經濟部及工研院共同設立的 人工智慧共創平台 (AIdea) 所舉辦的, 在此分享一下比賽的來龍去脈及個人的心得體會。
AOI 瑕疵分類及競賽說明
AOI 是結合光學影像及電腦視覺的檢測技術,AOI 可以大幅改良傳統上人工目測費力耗時的缺點。在 AIdea 上的題目是工研院電光所軟性電子顯示器在試量產過程中的 AOI 影像資料,提供單位希望社會各界的資料科學家們能夠開發檢測模型以判讀瑕疵分類。
從影像辨識及機器學習的角度來說, 這個問題是屬於影像分類 (image classification) 中多類分類 (multi-class classification) 的監督式學習 (supervised learning), 如 Figure 3 所示, supervised learning 是先用有標記的訓練資料集 (training dataset) 對預測模型進行訓練, 然後再由預測模型對測試資料集 (test dataset) 進行預測, 最後以對測試資料的預測正確率為評估標準。
按照上述流程工研院提供的資料包含兩組:
訓練資料 (training dataset)
- train_images.zip ~ 訓練所需影像資料 (512 x 512 PNG) 共計 2,528 張;
- train.csv ~ 包含 2 個欄位: 影像檔名 (ID) 和 瑕疵類別 (Label); 瑕疵類別共有 6 類: 0 表示 normal,1 表示 void,2 表示 horizontal defect,3 表示 vertical defect,4 表示 edge defect,5 表示 particle;
測試資料 (test dataset)
- test_images.zip ~ 測試所需影像資料 (512 x 512 PNG) 共計 10,142 張;
- test.csv ~ 包含 2 個欄位: 影像檔名 (ID) 和 瑕疵類別 (Label), 其中瑕疵類別需要參賽者做出預測;
Figure 4 是影像資料的一些範例。
參賽者最後僅需上傳 test.csv 包含測試影像的影像檔名和預測類別, 無需上傳預測模型也無需對預測模型進行說明。
解題及成績
目前在機器學習和影像辨識的相關領域中最熱門的技術是 深度學習 (Deep Learning) 及 卷積神經網路 (Convolutional Neural Network), 因為我對這些領域比較關注, 也寫過一些相關的程式及文章, 所以決定在這個題目上做些嘗試, 具體細節不在本文探討, 只劇透下我用的是 Keras Application 下的某個模型, 並加上了一些配方後提交了答案。不過在此說明一下整個時程及一個插曲, 我在 8/23 註冊登記了 AIdea 並下載了 AOI 瑕疵分類資料集, 並在 9/17 上傳了答案, 前後大約花了三週到四週的時間做這個題目, 不過真正花時間的是訓練各種不同模型, 大約在八月底前我主要是用 Keras over Tensorflow 在華碩筆電的 Intel Core i5–5500U CPU 訓練模型, 但是從九月初起我開始嘗試使用 PlaidML 這個可用 NVIDIA/Intel/AMD GPU 的深度學習軟體平台做訓練及預測, 經過一番嘗試後部分的訓練及預測是用 Keras over PlaidML 在 Intel HD Graphics 5500 GPU 及 AMD Radeon R5 M320 GPU 執行的, 使用 PlaidML 的經驗寫在這篇博客供大家參考。
AIdea 評估上傳結果分成兩個階段 (Figure 5):
- 在 Public Leaderboard 中以 40% 的測試資料評估結果, 其中我的成績是 98.84% 正確率, 在 16 個投件中列名第三位,
- 在 Private Leaderboard 中以完整的測試資料評估結果, 其中我的成績是 99.24% 正確率, 在 16 個投件中列名還是第三位;
最終成績在官網快訊上列名第二位 (Figure 6)。
關於資料科學機器學習競賽平台的設計和經營
Kaggle 是資料科學機器學習競賽平台的標竿, 任何新的競賽平台的推出都不免會被拿來和 Kaggle 做個比較, 比如說 阿里雲天池 承辦 KDD Cup 2017 時就曾被中國網友及外國網友吐槽 (KDD Cup 20 年全回顧), 我這且從 “組織競賽/紀錄競賽” 和 “吸引參賽者” 兩點談談 Kaggle 的特點:
- 組織競賽/紀錄競賽: Kaggle 的 Public Leaderboard 顧名思義列了所有參賽團隊及提案評分, 並在此更進一步讓參賽者提供 技術帖 (kernel) 分享分析及代碼, 再加上賽後的 贏家訪談 (winners’ interview), 整體來說 Kaggle 成功打造了一個是競賽加學習的環境;
- 吸引參賽者: Kaggle 競賽經驗已成為資料科學家的另類履歷, Kaggle 用戶可以保有各種不同的紀錄, 包括個人的金牌/銀牌/銅牌/點數/參賽紀錄/討論紀錄/技術貼紀錄/資料集紀錄等等, 而且這些紀錄都是可以被公開查閱的, 加上 用戶排名 (user rankings) 論資排序, 難怪有人說 Kaggle 是會讓人上癮的;
不同的競賽平台有不同的經營理念和網站設計, 但是 Kaggle 無疑是值得所有資料科學家及競賽平台經營團隊關注和學習的。