檢測的三個世代
| 第 1 代 · 規則式 | 第 2 代 · 監督式學習 | 第 3 代 · 正常樣本學習 | |
|---|---|---|---|
| 訓練資料 | 無(由人設計規則) | 數千張不良影像 + 標註 | 數十~數百張良品影像,不需標註 |
| 從未見過的不良 | 規則中沒有就放行 | 對訓練時沒看過的類型較弱 | 以「與正常不同」檢出 |
| 導入期間 | 數週(專家調校) | 數週~數個月(收集不良) | 數天 |
製造現場的不良率通常很低。要收集數千張不良影像得等很久,而且在收集期間還會出現新的類型。異常檢測把這個問題反過來處理:只要讓模型充分看過正常樣本,偏離正常的一律視為異常。 也有少則以 2~30 張良品影像起步的 few-shot 方式。
共通處理流程
fineAi AD Workbench 的 11 種演算法都遵循相同的架構。各演算法不同的只有 ③ 和 ④。
PatchCore:正常小區塊的記憶
PatchCore 精度高,是 AD Workbench 預設建議的演算法。原理出乎意料地簡單。
訓練:收集正常 patch
- 將良品影像輸入以大規模影像預先訓練的神經網路(WideResNet50-2),取出中間層(layer2、layer3)的特徵圖。特徵圖的一格,就是把原始影像中一個小區塊(patch)摘要成數字向量的結果。
- 將所有良品影像的所有 patch 向量收集到**記憶庫(memory bank)**中。
- 記憶庫太大會使搜尋變慢,因此只挑選能代表整體分布的一部分(coreset 取樣)。
不會重新訓練神經網路的權重。只是把良品影像掃過一次並收集起來,因此訓練只需數秒~數分鐘即可完成。
檢測:與最接近的正常樣本之間的距離
- 對新影像以相同方式擷取 patch 向量。
- 針對每個 patch,在記憶庫中找出**最接近的 k 個正常 patch(k=3)**並量測距離。
- 與正常相似的 patch 距離小;有刮傷的 patch 找不到相似的正常 patch,距離就大。這個距離就是該位置的異常度。
- 將各 patch 的異常度放大到原始尺寸並平滑化,就成為熱圖;將熱圖的最大值(或前幾 % 的平均)正規化到 0~1,就是影像分數。
閾值與 Gray 區間
得到分數後,與閾值比較進行判定。降低閾值可減少漏掉不良的情況(漏檢),但把良品判為不良的情況(誤判)會增加;提高閾值則相反。這個平衡在 模型評估與現場運作 課程中說明。
fineAi 使用雙閾值。
- 分數低於低閾值為 OK
- 高於高閾值為 NG
- 介於兩者之間為 Gray — 由人員確認。
人員對 Gray 影像所做的判定會再成為訓練資料。這是一種運作越久、Gray 越少的架構。
異常檢測不太適合的情況
- 正常樣本本身差異很大的對象 — 像形狀各異的農產品這樣「正常」範圍很寬時,難以與瑕疵區分。
- 需要瑕疵名稱與位置時 — 異常檢測能告訴你「哪裡異常」,但不會分類出「這是刮傷」。這時請搭配 物件偵測 一起使用。
11 種演算法中該選哪一種,將在下一堂課 選擇異常檢測演算法 中說明。