假使瑕疵品占比極為稀疏

並不是所有的問題都該用深度學習來解決

假使資料的不均衡程度不太嚴重, 例如可以收集到 1000張以上的瑕疵品照片, 我們可以用 data augmentation 技術來解決資料不均衡問題, 在 Tensorflow keras 甚至提供現成的模組來使用.

在良率極高的產線上, 以先前假設收集到20萬張產品圖像為例, 很可能全部只有數張<瑕疵品>與<疑似有問題>的照片. 在這種情境, 貿然採用深度學習, 雖然有諸如 可利用 Transfer Learning 或是 Few Shot Learning 等訓練方法, 但相比傳統方法, 通常不見得會取得優勢. 所以後續的標示作業自然就需慎重設計再進行.

此時建議採用傳統 CV (Computer vision) 的手法, 利用特徵值以檢測異常. 此領域不在此系列主題中, 就不細談. 粗略的說, 傳統就有所謂的 outlier (也有人稱呼 anormaly 或者 novelty) detection. 在 Python 常用的 scikit-learn 就有相關模組可採用. 所以問題的挑戰應該不是在如何設計 outlier 演算法或是程式, 而是如何萃取特徵值以輸入模型.

如果一定要與深度學習掛勾, 通常可以先在其他深度學習任務 (例如: 於照片中對產品框出bounding box) 上想辦法訓練出一個可以取得圖像的 embedding/representation 的方法. 萬一全部都沒有任何一張有標示的圖像, 當然就可能需要無監督學習的 auto-encoder.

另外有時異常並不是單一張影像就可以偵測出來的, 而是必須拿好幾張連續的圖像來比對才能決定是否異常(例如: 球員假摔偵測). 這時候就必須拼接幾張圖像的特徵值成 sequence. 這又是另外一個課題: Time Series, RNN/LSTM, 或者 Attention 機制等等.

哩哩拉拉講一堆, 再次提醒: 並不是所有的問題都該用深度學習來解決, 傳統 outlier detection用統計檢定方式, 很可能已經夠用. 因為這裡的主題是機器學習, 上述幾個深度學習方法, 必須權衡成本效益.

另外運用 Few-Shot Learning, 甚或擴大層次的 Meta Learning 等技術應付只有較少標示樣本的問題, 近兩年也有應用於異常偵測上, 值得觀察其實用性.