過濾器製作

不要讓有經驗的人只能傻傻做重複的事

前述:

訓練資料的前置處理, 建議先找對產品品質有點基礎的人員, 將產線取得的照片隨機抽樣 1,000-10,000張, 這個數量應該從過濾器達到0.70–0.80準確度來反推, 會有十倍範圍差異主要是因為至少要累積<疑似有問題>的照片至少200張以上, 而產品差異決定了抽樣多寡. 舉例來說: 採擷到20萬張照片, 從中隨機均勻取出1萬張照片. 再針對這1萬張照片分類成疑似良品與疑似有問題兩大類. 作為監督學習所需資料集.

由於無需太準確, 過濾器所需的訓練圖像無須全部的照片, 舉例來講用全部照片的1/20張數即可

如果<疑似有問題>的數量低於200張, 這道程序很可能需要重複幾次, 累積其數量. 反過來如果很多呢? 例如: <疑似有問題>很接近 <疑似良品>, 那由衷建議先把產線的良率問題解決後, 再考慮是否要採用人工智慧.

這時候就可以監督學習來訓練我們的分類器(亦即過濾器), 雖然只分類成兩大類, 通常生產線上 <疑似良品>對比<疑似有問題> 可能也很懸殊. 很可能需要做點資料擴充 (data augmentation) 來解決類別數量不平均的問題. 同時要如何劃分出訓練集 (Training set) 與驗證集 (Validation set) 也是一門學問. 這時候也許已經需要具備深度學習經驗的人員介入.

因為我們假設著眼於深度學習, 可以開始嘗試選擇 CNN (Convolutional Neural Network) 相關的網路, 也可以沿用先前AOI成果. 這過程有幾個策略, 視取得照片數據與需求來決定:

  • 直接找各大框架(常見的有: Tensorflow/Pytorch/Mxnet/PaddlePaddle)所提供的預訓練CNN模型進行移轉訓練 (Transfering Learning) 或是 Finetune.

  • 如果過去導入AOI時已經有相關分類器並完成特徵工程, 可直接套用, 將照片映射到特徵向量空間, 再訓練出 諸如: SVM 分類器.

  • 深入研究並評比現今針對照片分類性能較佳模型, 例如: 最近的 EfficientnetV2, ViT 等等, 為我們最終所需的AOI 找到合適的模型.

再次強調這一階段並不需要多準確的分類, 能快速過濾出上述兩大分類即可. 之所以提出第3個策略是因為要讓專案中深度學習技術人員提早熟悉數據. 從論文來看, 針對諸如 imagenet 上的測試集, 以一年內發表的模型其準確度差異幾乎不容易超過1%. 但是應用在實務上, 由於圖像可能與Imagenet差異頗大, 其顯現出來的性能就很明顯, 這需要真實的數據做點實驗才能知曉哪類型的模型適合.

訓練出過濾器後, 我們再將所有照片(舉例為20萬張)進行篩選, 後續繼續用虛構的數字來舉例, 方便理解流程設計的目的. 完成上述的分類器, 我們拿它過濾, 這樣就有兩大分類的圖片 (很可能還是很不均勻舉例來說 19:1).

經過過濾器篩選後, 剩下 1/10 的圖片需要資深人員標示

我們不可以放棄所有<疑似良品>, 從中再隨機抽取樣本的目的是為了避免過濾器讓樣本產生偏差了. 經過我們的預處理流程, 我們可以降低 資深人員九成的標示工作量, 同時考慮人會疲倦厭煩等因素, 最終產生的標示數據集其品質應該比讓資深人員直接標示20萬照片好.