如何為 AI 視覺檢測標註瑕疵:邊界框標註指南

我們訓練的第一個瑕疵檢測模型很糟,而且是我們自己的錯。照片沒問題,模型也沒問題。問題出在我們畫在瑕疵周圍的框亂七八糟,模型就原封不動地學會了我們給它看的東西,也就是一團混亂。
從那之後,我們標註過很多零件,和我們合作的人也標註了很多,而同樣幾件事一再出現。沒有一件很複雜,大多數只要有人點出來就顯而易見。這篇文章就是那個把它們點出來的人。
重點摘要
從不同角度、距離和光線拍照,讓模型學到的是瑕疵,而不是拍攝環境。接著,把每張影像裡的每個瑕疵都標註出來,每個框都畫得貼合,每次都用同樣的方式標註,讓不同瑕疵類型的框可以重疊,並且先從細分的類別開始,之後再合併。實務上,一個老實的框勝過十個漏掉的框,難以判斷的樣本就踢出資料集,如果兩個人會畫得不一樣,這個框大概就畫錯了。
拍照:一個原則
模型是靠多樣性來泛化的。如果每張針孔照片都是在同一個位置、同一盞燈下拍的,模型學到的就是那個位置和那盞燈,第一次遇到稍微轉了角度的零件,它就開始緊張。所以收集訓練影像時,最值得做的一件事就是動起來。
不同角度。繞著瑕疵走一圈,從幾個方向拍。同一個針孔正面看和 45 度角看是不一樣的,模型兩種都應該見過。

不同光線和背景。明亮、昏暗、在陰影裡、在工作台上、在產線上。改變背景,模型才會學會忽略它。

不同距離。靠近一點,再退後一點。瑕疵佔滿整個畫面,或只是角落裡的一個小點,這兩種情況模型在生產中都會遇到。

如果你的相機固定在產線上,這些都不是問題。固定位置會給你非常一致的影像,模型也會非常擅長那一個視角。當 iPhone 是手持的,或同一個模型要涵蓋不只一個工位時,多樣性才最重要。
標註:五個基石
這些不是 Enao 自己定的規則。它們適用於任何物件偵測的影像標註,也決定了你的模型是胸有成竹,還是一直要你再確認一次。
1. 標註影像中的每一個瑕疵

這是我們最早犯的錯。如果一張影像有三個瑕疵,你只框了兩個,等於告訴模型第三個是背景。在整個資料集裡這樣做個幾十次,真正的警報和誤報就開始混在一起,因為同樣的圖案被當成了兩種東西。看得到,就框起來。
2. 框要緊貼瑕疵

一個貼合、只留幾個像素邊距的框,會教會模型完整的瑕疵圖案,其他什麼都不教。框切得太小,圖案就少了一部分。框留得太鬆,模型就得學會忽略那一大片背景,這需要的範例比任何人願意標註的都多。貼合的框剛好也畫得比較快,算是額外的好處。
3. 每次都用同樣的方式標註

處理一群小瑕疵,有兩種完全可行的方法。每個都框,或是整群畫一個框。兩種都行。行不通的是兩種混著用,因為這樣模型會看到同一種情況被標註成兩種樣子,無從決定。選一種你的團隊比較容易一致執行的方法,然後把它寫下來。
4. 不同瑕疵的框重疊沒關係

一道刮痕劃過一個斑點,是再正常不過的事。框刮痕,框斑點,讓它們重疊就好。部分重疊完全沒問題。要避免的是兩個不同類別的框幾乎完全疊在一起,因為這樣模型就沒辦法學到那些像素屬於哪個類別。
5. 先分細,之後再合併

如果你不確定深刮痕、細刮痕和擦痕是一個類別還是三個,就先分成三個。之後要合併只要點一下。要拆開一個你當初混在一起的類別,就得把所有東西重新看過一遍。該合併的訊號是模型一直把兩個類別搞混,這通常代表它們在相機眼中看起來很像,即使對你來說意義不同。
實務上:四件我們吃過虧才學到的事
基石是規則。以下這些則是判斷題,只有當你真的坐下來畫框時才會遇到。
很多瑕疵,一個框

在十五個小點周圍畫十五個小框要花很久,而且大概畫到第十一個框時,你就會漏掉一個。我們會知道,是因為我們就漏過。在整群外面老老實實畫一個框比較快,模型也不在意。一致性勝過小框。
講求效率,不要教條

有時候正確答案是整群一個框,離群的那個再一個框。沒錯,這就是混用方式。但這還是比為了框住離群的那個而畫一個塞滿背景的巨大框好,也比畫十五個個別的框卻漏掉三個好。所有規則底下的那條規則是:標註的方式要讓下一個人也會標成一樣。
把難以判斷的樣本踢出資料集

有些影像就是不可能一致地標註。三個瑕疵疊在一起,邊緣分不開,五個人會畫出五組不同的框。把這些拿掉,不用覺得過意不去。兩百張影像的乾淨資料集,勝過一千張的雜亂資料集,而且模型在生產中還是會抓到重疊的瑕疵。它只是不該從這些影像裡學習。
寧可多一點背景,也不要主觀的框

一道長刮痕可以畫成一個框,也可以畫成六個短框,如果交給每個人自己決定,兩種你都會拿到。一個多含一點背景的框,對每個人來說都一樣。每當一個標註決定取決於誰握著滑鼠,就把框畫大,直到它不再因人而異。
你需要多少張影像?
比你想的少,前提是影像要好。一種產品上的一種瑕疵類型,25 到 50 張標註良好的影像,通常就足以做出第一個模型,放上產線並從中學習。讓專案失敗的通常不是影像太少,而是一百張影像被用三種不同方式標註。從小處開始,仔細標註,測試一下,然後在模型最弱的地方補影像。
常見問題
什麼是邊界框標註?
在每一個你希望模型找到的東西周圍畫一個矩形,在這裡就是每一個瑕疵,讓模型學會那個東西長什麼樣子、通常出現在哪裡。這是視覺檢測中最常見的影像標註方式。
框裡應該包含背景嗎?
留幾個像素的邊距就好,不要更多。足夠讓瑕疵的邊緣落在框內,但不要多到讓模型得學會忽略周圍環境。
瑕疵有一部分被遮住,要怎麼標註?
把看得到的部分緊貼著框起來。不要去猜其餘的部分。如果大部分都被遮住,就要問問這張影像到底該不該放進資料集。
良品也要標註嗎?
要,方法就是不畫任何框。沒有瑕疵也沒有框的影像,會教模型正常的樣子是什麼,你需要這些影像的程度,不亞於有瑕疵的影像。
如果兩個人對同一個標註有不同意見怎麼辦?
這是該改規則的訊號,而不是選出誰對誰錯。把框畫大、合併類別,或丟掉這個樣本,直到你們兩個會用同樣的方式畫它。
在你自己的零件上試試看
想知道這些到底成不成立,最好的方法就是在你自己的產線上挑一樣東西,標註 25 張影像,然後用它們訓練一個模型。試用 Demo,免註冊,六十秒就好,或者免費開始。
Explore with AI
Discuss this article with your favorite AI assistant