AOI到AI AOI:工業(yè)視覺缺陷檢測的落地實戰(zhàn))
做工業(yè)視覺這些年我越發(fā)覺得AOI這個詞被說濫了。很多工廠管理者一聽AOI就以為是臺機器盯著產(chǎn)品壞品自動跳出來再一聽AI AOI又覺得只要接個帶神經(jīng)網(wǎng)絡的相機所有漏檢都能清零。這兩種理解都錯得離譜。AOI全稱自動光學檢測本質(zhì)是把人眼檢測變成機器檢測從PCB、SMT到面板、電池、汽車零部件到處都在用AI AOI則不是換相機而是在傳統(tǒng)規(guī)則算法之上疊加一套能自己學習缺陷特征的系統(tǒng)讓檢測從“按固定規(guī)則打分”變成“從數(shù)據(jù)里總結(jié)規(guī)律”。這篇文章我會從傳統(tǒng)AOI的規(guī)則算法講起拆解為什么它在復雜場景下越來越吃力然后聊AI AOI的完整落地鏈路——成像、數(shù)據(jù)、訓練、部署、維護——順便分享這幾年在產(chǎn)線上踩過的坑。想評估AI檢測升級或者已經(jīng)在調(diào)AI AOI的工程師應該能從這里找到幾條能直接用的經(jīng)驗。1. 傳統(tǒng)AOI規(guī)則算法解決不了的難題1.1 傳統(tǒng)AOI的工作邏輯傳統(tǒng)AOI并不是一臺“智能機器”它本質(zhì)是一套光電測量系統(tǒng)。光源、鏡頭、相機負責把產(chǎn)品拍成高對比度圖像后面的算法則負責做判定。判定邏輯通常是一條線性鏈圖像預處理、圖像分割、特征提取、規(guī)則判斷。預處理階段常用灰度化、濾波、對比度拉伸目的是讓缺陷和背景分開。分割階段通過閾值分割把圖像變成黑白二值圖缺陷作為連通區(qū)域被提取出來。然后計算連通區(qū)域的面積、周長、長寬比、圓度、灰度均值、邊緣梯度最后跟預設公差做比對。比如檢測PCB焊點少錫可以通過低角度光讓焊點高度在圖像上表現(xiàn)為灰度差異低于閾值就判少錫檢測異物往往是識別某個尺寸超過設定值的連通區(qū)域。這套邏輯在背景干凈、缺陷形態(tài)固定的場景里很管用。但它的核心假設是“缺陷一定在灰度或形狀上跟背景可區(qū)分”一旦這個假設不成立后面做得再多也是空中樓閣。1.2 規(guī)則判定的三道坎第一道坎是缺陷形態(tài)不可窮舉。劃痕有長有短、有深有淺、有直線有彎折壓傷可能是一個點也可能是一片異物可能是纖維、金屬屑、油污。傳統(tǒng)算法只能覆蓋你預先定義過的形態(tài)遇到新缺陷就得重新采集特征、重新調(diào)參。產(chǎn)線上一旦出現(xiàn)一種從沒調(diào)過的缺陷它就等于盲人。第二道坎是背景紋理復雜。高密度PCB基板、太陽能電池的絨面、金屬拉絲表面的各種紋理在某個光照角度下背景的灰度和缺陷的灰度分布會大面積重疊。你找不到一個閾值能同時把背景壓下去、把缺陷留下來。強行設置只能得到“按了葫蘆起了瓢”的結(jié)果。第三道坎是誤報與漏檢的蹺蹺板。為了不漏掉缺陷只能把判定條件放寬結(jié)果是正常產(chǎn)品大量被誤殺過檢率飆升為了降低誤殺又把條件收緊結(jié)果缺陷悄悄滑過去。產(chǎn)線直通率被這種矛盾折騰得很難看最終只能靠大量人工復判來兜底。1.3 參數(shù)調(diào)出來的系統(tǒng)為什么脆弱傳統(tǒng)AOI的參數(shù)多到讓人頭疼光源亮度、曝光時間、閾值、濾波窗口、面積公差、灰度容忍度、形態(tài)學算子。如果是一個多缺陷檢測項目參數(shù)之間還會互相干擾。你以為調(diào)好了A類缺陷的閾值B類缺陷誤報又起來了。我印象很深的一次是在某金屬工件檢測項目里。設備運行了兩個月突然某天開始瘋狂誤報明明看起來和之前差不多算法就是認為工件上全是“缺陷”。排查到最后發(fā)現(xiàn)是光源老化導致圖像整體灰度漂移原本定在128的閾值放到今天已經(jīng)完全失效。重新標定光源后誤報才下去。這種對光照、對焦、材料批次變化極其敏感的問題是規(guī)則算法的通病。因為它把所有判斷都寄托在一兩個顯式特征上特征是穩(wěn)定的判定才穩(wěn)定特征一變整個系統(tǒng)就跟著崩。這不是調(diào)試不夠努力而是方法論的天花板。2. AI AOI深度學習改變了檢測的哪個環(huán)節(jié)2.1 換思路從“人定規(guī)則”到“數(shù)據(jù)總結(jié)規(guī)律”深度學習改變的不是“看得更清楚”而是“怎么判斷”。傳統(tǒng)算法是人先定義規(guī)則再讓機器執(zhí)行規(guī)則AI AOI是你給機器看幾千上萬張圖讓它自己總結(jié)出“什么樣的區(qū)域像缺陷”。用生活的話說傳統(tǒng)算法是讓老師傅根據(jù)經(jīng)驗寫一本檢查手冊遇到?jīng)]寫過的現(xiàn)象就翻不到答案AI是讓新員工直接跟著老師傅看一個月的樣品然后他自然知道哪一種影子叫劃痕、哪一種叫臟污。他總結(jié)出來的規(guī)律不一定能用語言描述但面對新樣品時往往比翻手冊更穩(wěn)。這個過程中卷積神經(jīng)網(wǎng)絡學習到了多層特征。底層學到的是邊緣、紋理、顏色梯度高層學到的是局部形狀、空間關系、上下文信息。所以它不是拿單一閾值做一刀切而是綜合大量特征做概率判斷。這就是為什么它在復雜背景下通常比規(guī)則算法更魯棒。2.2 四種建模路線怎么選實際項目里AI AOI主要走四條技術路線建模路線輸出內(nèi)容適用場景典型局限圖像分類整張圖是“OK/NG”判斷簡單臟污、方向單一缺陷無法定位缺陷位置無法聯(lián)動剔除目標檢測缺陷的矩形框和類別缺件、偏移、錯料、異物對細長劃痕、邊緣貼合缺陷不夠精細分割像素級缺陷區(qū)域劃痕、針孔、微小異物標注成本高數(shù)據(jù)量要求大異常檢測偏離正常分布的評分缺陷很少、新缺陷未知誤報率高需要工藝監(jiān)控配合產(chǎn)線上用得最多的組合是“目標檢測分割”。目標檢測負責快速找位置和類別分割負責對細長缺陷做精細輪廓判斷。分類雖然最簡單但產(chǎn)線上很少單獨用因為AOI不僅要知道“有沒有問題”還要知道“問題在哪”否則剔除機構不知道怎么動作。異常檢測是很多團隊的進階方向。它的優(yōu)勢是可以不依賴大量缺陷樣本適合抓取“從來沒見過”的新缺陷。但代價是誤報率偏高更適合作為傳統(tǒng)邏輯之外的預警通道而不是唯一的判定手段。2.3 AI AOI不是簡單的模型替換很多團隊以為AI AOI就是把識別模塊從“規(guī)則算法”換成“神經(jīng)網(wǎng)絡模型”其他一切照舊。這是最大的誤解。傳統(tǒng)AOI和AI AOI在數(shù)據(jù)流、調(diào)試流程、維護方式上完全不同。傳統(tǒng)AOI的核心資產(chǎn)是參數(shù)表AI AOI的核心資產(chǎn)是標注數(shù)據(jù)和模型版本。傳統(tǒng)算法上線后只要不打光、產(chǎn)品不變基本可以一直跑AI模型則需要不斷用新數(shù)據(jù)去驗證、更新否則隨著產(chǎn)線狀態(tài)漂移性能會慢慢退化。也就是說AI AOI上線不是項目結(jié)束而是項目開始。你需要一套數(shù)據(jù)采集、標注、訓練、評估、發(fā)布、監(jiān)控的閉環(huán)機制。沒有這套閉環(huán)AI AOI很快會變成一個“曾經(jīng)好用”的擺設。3. 從AOI到AI AOI的落地實操完整實施鏈路3.1 成像與硬件改造先解決看得清成像系統(tǒng)是整個AI AOI的地基。雖然深度學習對光照變化的容忍度更高但“拍都拍不到”的信息算法再強也找不出來。先說相機分辨率。檢測精度決定傳感器要求計算公式很簡單水平方向像素數(shù) 視野寬度 / 最小檢測特征尺寸。為了保證穩(wěn)定我一般會留2到3倍余量。比如視野是100mm要檢0.05mm的微傷最低需要2000像素實際我會選5000像素以上的相機讓特征在圖像里至少占3到5個像素而不是剛好一個點。再說光源。很多傳統(tǒng)AOI項目里光源是針對某個缺陷專門調(diào)的。升級AI AOI時不需要照搬原來的光路反而建議重新做一次光學驗證。最有效的做法是采用多角度、多色光組合讓不同缺陷在不同光區(qū)呈現(xiàn)不同形態(tài)。如果一個光區(qū)能把異物打亮另一個光區(qū)能把劃痕打出來模型學起來會輕松很多。計算平臺也要提前規(guī)劃。產(chǎn)線節(jié)拍如果是2秒一件一件拍4張圖那么單張圖推理預算是500毫秒以內(nèi)。用獨立GPU推理一般能跑到這個水平如果用CPU做推理則要考慮模型裁剪或量化加速。千萬不能等模型訓練完才發(fā)現(xiàn)部署環(huán)境跑不動那就白干了。3.2 數(shù)據(jù)收集與標注決定模型上限數(shù)據(jù)質(zhì)量是AI AOI的最高優(yōu)先級。算法工程師花三個月調(diào)模型不如產(chǎn)線多收集兩周長尾缺陷樣本有效。關于樣本量我給出的經(jīng)驗是常見缺陷每類至少300到500個實例正常品至少1000張。如果做分割模型樣本量還要再往上走。不同缺陷差異很大缺陷類型最少實例數(shù)常見誤區(qū)缺件、元件偏移100到200只拍一個固定位置忽略不同位置的光影差異劃痕300到1000只覆蓋橫向劃痕漏掉豎向和斜向臟污、異物300到500沒有覆蓋不同反光程度的材質(zhì)微小空洞500以上直接整圖訓練沒有用ROI裁剪放大標注規(guī)則越早標準化越好。我建議項目一開始就召集工藝、品質(zhì)和算法三撥人共同定義“什么算缺陷”“邊界怎么畫”。劃痕是畫線框還是畫區(qū)域一塊壓傷面積超過多少算缺陷異物按顏色區(qū)分還是按材質(zhì)區(qū)分這些問題不定清楚標注員和后期的模型評估都會陷入無休止的爭論。數(shù)據(jù)增廣是我建議要做的但必須有度。旋轉(zhuǎn)、鏡像、亮度擾動、隨機裁剪是安全的增廣直接把缺陷形狀拉伸變形或者人為疊加夸張的噪聲反而會讓模型學到不真實的特征實際產(chǎn)線一跑就露餡。增廣只能模擬真實物理變化不能憑空創(chuàng)造缺陷形態(tài)。3.3 訓練驗證與閾值調(diào)優(yōu)訓練數(shù)據(jù)的劃分要格外小心。千萬不能按圖片隨機切分訓練集和驗證集因為同一批次的產(chǎn)品圖像高度相似模型在這個批次上已經(jīng)“背”過了。正確做法是按產(chǎn)品批次或按時間段劃分用前三周的批次訓練用后一周的批次驗證。這樣才能真實反映模型面對新樣品的泛化能力。評價指標方面學術界常用準確率但產(chǎn)線上我更關注兩個指標漏檢率和誤殺率。漏檢率是被模型放過的缺陷占實際缺陷總數(shù)的比例誤殺率是被模型誤判成缺陷的正常品占正常品總數(shù)的比例。這兩個指標與模型置信度閾值直接相關閾值調(diào)到0.5模型比較敏感漏檢率低但正常品容易被誤殺閾值調(diào)到0.8模型只報非常確定的缺陷誤殺率下降但漏檢率會升高。實際調(diào)優(yōu)時我會畫一條閾值曲線讓工藝人員一起選點。如果行業(yè)對漏檢是零容忍那就選低壓閾值然后靠二次判定壓誤殺如果誤殺對產(chǎn)能影響更大就選高壓閾值再靠人工復判兜住風險。訓練完成不是直接上線。我習慣先做一輪離線的歷史圖像回放把模型輸出的結(jié)果和當年的復判記錄做比對確認性能達到預期才進入現(xiàn)場部署環(huán)節(jié)。3.4 部署到產(chǎn)線的四個關鍵步驟部署階段最大的風險不是算法而是工程。第一步是影子運行。模型不直接參與剔除只在后臺對每一幀圖像做推理結(jié)果和現(xiàn)場人工復判同時記錄。運行一到兩周積累數(shù)百上千條不一致樣本再做一次人工評估確認模型是真的能打。第二步是旁路報警。模型開始輸出報警但不控制機構。產(chǎn)線員工看到報警后先人工確認是不是真缺陷把結(jié)果反饋給系統(tǒng)。這一步能繼續(xù)積累真實的確認數(shù)據(jù)。第三步是自動判定。模型輸出直接聯(lián)動剔除機構但保留人工復判工位。同時設置安全網(wǎng)如果連續(xù)多片高置信度報NG或者推理模塊異常自動切換到保守模式或者停機報警。第四步是上線后監(jiān)控。模型上線后不要撒手不管至少每周統(tǒng)計一次漏檢率、誤殺率、模型報警占比。一旦指標異常就要回溯原因是光照漂移、產(chǎn)品換型還是模型沒有見過的缺陷。4. 現(xiàn)場問題排查與優(yōu)化實錄4.1 常見問題速查表AI AOI在產(chǎn)線上踩的坑我基本都見過一輪。整理成速查表方便排查時對照現(xiàn)象可能原因排查步驟解決方向漏檢缺陷缺陷樣本不足、光照變化、標注邊界不準統(tǒng)計錯誤樣本對比灰度分布回看標注補充長尾樣本重新校準光源優(yōu)化標注誤殺率高置信度閾值過低、背景紋理被誤判查看誤報樣本的特征聚類調(diào)閾值、增加ROI屏蔽、加二次判定單圖推理慢模型過大、推理環(huán)境未優(yōu)化測量單幀耗時分布模型裁剪、量化、換更高算力平臺運行一段時間后性能下降光源老化、支架松動、材料批次變化檢查圖像亮度均值比對設計值定期圖像質(zhì)量監(jiān)控觸發(fā)重訓模型上線即崩訓練集和產(chǎn)線圖像差異大對比訓練樣本與現(xiàn)場樣本的統(tǒng)計分布重新采集現(xiàn)場數(shù)據(jù)訓練這些問題的共性在于它們很少是單一模型問題。大部分是因為“圖像變了而模型不知道”。所以我的排查順序永遠是先查成像再查數(shù)據(jù)最后才查模型。4.2 結(jié)合具體項目的處理過程說一個典型的現(xiàn)場案例。某項目做的是小型電子元件的檢測要求識別表面劃痕、臟污和引腳偏移。項目剛上線時復判準確率能達到95%但跑了三周后誤殺率突然從3%飆升到15%。我們第一步?jīng)]碰模型而是先看現(xiàn)場圖像。拉出一組誤報樣本發(fā)現(xiàn)所有誤報都集中在圖像左上角正常品在那個位置的紋理偏暗容易形成類似臟污的灰度梯度。再查成像參數(shù)發(fā)現(xiàn)光源亮度比初始標定時低了大約12%導致圖像整體變暗。解決方法是兩步走一是重新標定光源并把亮度監(jiān)控做成自動報警——每天開機后先用標準件拍一張圖灰度均值超出公差帶就直接提示二是在模型入口加一個圖像歸一化層讓輸入模型前把亮度拉回標準范圍。改完之后誤殺率回到了3%以內(nèi)。這個案例讓我反思了很久。我們花了很多時間優(yōu)化模型結(jié)構實際最后金子卻花在光源和歸一化上。AI AOI最值錢的地方是把圖像信息吃透但圖像如果本身在變化AI再聰明也扛不住。4.3 避免深坑增廣、重訓、模型漂移增廣不是越多越好這也是很多人踩過的坑。某些團隊為了湊樣本對缺陷圖做了大量對比度拉高、HSV擾動結(jié)果模型在訓練集上很好到產(chǎn)線上一遇到真實光線就誤判。原因很簡單合成出來的紋理特征跟真實缺陷紋理不一致模型學到的其實是“增廣特效”而不是“缺陷本質(zhì)”。重訓是AI AOI繞不開的事但重訓本身非常容易失控。如果只拿最近一周的數(shù)據(jù)去微調(diào)模型可能會遺忘以前見過的缺陷形態(tài)。我建議每次重訓都要保留一個長期歷史測試集里面包含過去所有版本的典型樣本。重訓后的模型必須在這個測試集上不退化才允許發(fā)布。同時做好模型版本管理舊模型要能一鍵回滾萬一新模型有隱藏問題不至于堵住整個產(chǎn)線。模型漂移是更隱蔽的問題。當產(chǎn)品換型、材料批次切換、環(huán)境濕度變化時缺陷的成像特征也會發(fā)生緩慢變化。如果不做監(jiān)控系統(tǒng)可能在不知不覺中從98分降到85分而你毫無察覺。最簡單的做法是每天記錄圖像灰度均值、缺陷檢出率、誤殺率這些指標按周做趨勢分析。指標一旦連續(xù)多天異常就要觸發(fā)一次人工復評。5. 從“檢出”到“工藝閉環(huán)”AI AOI的進階玩法5.1 檢測數(shù)據(jù)的二次利用AI AOI如果只用來分揀良品和不良品其實是巨大的浪費。因為模型輸出的不只是“OK/NG”還有缺陷的位置、類別、置信度、面積、長度、方向。這些量化信息是可以反哺工藝的。比如在某個貼裝產(chǎn)線上我們發(fā)現(xiàn)AI AOI輸出的元件偏移量不是隨機分布而是系統(tǒng)性偏向同一個方向。順著這個特征去查發(fā)現(xiàn)是貼片機的某根絲桿間隙變大導致每次貼裝位置出現(xiàn)規(guī)律性偏移。如果只是傳統(tǒng)AOI只能知道“這塊板有偏移”不可能知道偏移量在統(tǒng)計上呈什么分布更不可能自動追溯到設備部件。所以我會建議項目團隊在規(guī)劃AI AOI時就預留數(shù)據(jù)導出接口。缺陷圖、坐標、類別、時間戳、產(chǎn)線編號、工藝參數(shù)這些信息統(tǒng)一進數(shù)據(jù)庫。表面上是檢測數(shù)據(jù)實際上是一張“制程健康度地圖”。5.2 從零件級檢測走向工藝級分析工藝級分析的核心是相關性。當你積累了足夠多的檢測數(shù)據(jù)后就可以開始看缺陷與工藝參數(shù)之間的關系。比如檢測到錫膏印刷偏位頻次上升同時回流焊溫度曲線最近兩周做了調(diào)整兩者是否相關再比如某臺設備的缺陷率總比其他設備高差異是不是來自吸嘴更換頻率這些分析不需要很復雜的數(shù)據(jù)科學方法把檢測結(jié)果按時間、設備、班次聚合一下畫個趨勢圖往往就能看出端倪。到這里AI AOI變成了一個“傳感器平臺”而不只是一臺分揀設備。這也是AI AOI相比傳統(tǒng)AOI最不一樣的地方傳統(tǒng)AOI的邏輯是為“判級”設計的它的規(guī)則輸出很簡單AI AOI的模型輸出是豐富的特征向量天然適合做統(tǒng)計分析。不過我要提醒一句工藝閉環(huán)的前提是數(shù)據(jù)質(zhì)量。如果標注本身是亂的缺陷類別定義模棱兩可后面所有分析都會失真。先在檢測端把數(shù)據(jù)吃透再談工藝分析順序不能反。5.3 團隊怎么搭項目怎么推AI AOI項目看起來是算法項目實際上是一個跨專業(yè)協(xié)作項目。我至少見過三種常見失敗結(jié)構第一種只讓算法工程師背鍋。他調(diào)了三個月模型產(chǎn)線說誤殺太多算法工程師拼命調(diào)閾值最后發(fā)現(xiàn)是光源從來就沒有標定過。沒有光學和工藝參與項目必然卡在成像問題上。第二種只讓AOI供應商負責。供應商把模型訓練得不錯但現(xiàn)場操作員不知道怎么換型、怎么處理新的缺陷類型一有異常就停線。AI AOI不是買來就能跑的設備它需要使用方有一定訓練和評估能力。第三種項目推動靠“老板拍腦袋”。老板聽說AI AOI厲害自上而下要求上但現(xiàn)場沒有明確缺陷定義和質(zhì)量標準。數(shù)據(jù)標注各說各話模型訓練看了笑話一樣的標注自然輸出笑話一樣的結(jié)果。我比較推薦的推進方式是從一個高價值、范圍小的場景切入。先選一類缺陷跑通“采集—標注—訓練—影子運行—上線—監(jiān)控”的完整閉環(huán)讓產(chǎn)線看到真實的漏檢和誤殺數(shù)字。有了第一個成功案例再復制到其他缺陷類型。這樣風險小團隊也能逐步積累經(jīng)驗。6. 實踐經(jīng)驗與個人建議6.1 不要神話AI也不要低估規(guī)則我做過的項目中效果最好的AI AOI往往是“AI加規(guī)則”的組合而不是純AI。因為AI強在“發(fā)現(xiàn)問題”規(guī)則強在“精確測量”。舉例來說AI先在復雜的背景紋理里框出疑似劃痕的區(qū)域然后傳統(tǒng)算法在這個局部區(qū)域里精確測量劃痕的寬度、長度、深度相關特征。AI負責找規(guī)則負責量兩者配合誤報率可以壓得很低。反過來也不要因為AI效果好就把傳統(tǒng)AOI整套扔掉。傳統(tǒng)算法在穩(wěn)定性、可解釋性、調(diào)試門檻上依然有優(yōu)勢。產(chǎn)線工程師可以輕松看懂傳統(tǒng)算法的判定邏輯但很難解釋為什么一個神經(jīng)網(wǎng)絡給出這個分數(shù)。所以最穩(wěn)妥的做法是讓AI做“模糊判斷”規(guī)則做“精確裁決”。6.2 上AI AOI前先審清三件事如果一家工廠問我要不要上AI AOI我會先問三個問題第一成像系統(tǒng)是否穩(wěn)定光源有沒有標定流程相機有沒有固定夾具如果連圖像灰度都每天漂移AI模型訓練得再好也會被現(xiàn)場圖像帶偏。第二缺陷定義是否清楚你們到底想抓什么缺陷邊界怎么畫哪些類型可以算同一種沒有標準化的缺陷定義就沒有標準化的數(shù)據(jù)自然沒有標準化的模型。第三有沒有數(shù)據(jù)回流通道產(chǎn)線圖像能不能保存復判結(jié)果能不能回寫模型更新后由誰審核發(fā)布如果這些機制都沒有AI AOI上線三個月后大概率會慢慢退化。這三個問題里只要有一個是否定的我建議先把基礎打好再上AI。AI AOI不是用來彌補基礎問題的靈藥。6.3 我最想分享的落地技巧最后分享一個我在多個項目里屢試不爽的小技巧影子運行不要只做兩周最好做到四周以上。產(chǎn)線的缺陷種類不是均勻出現(xiàn)的有些長尾缺陷可能兩三周才出現(xiàn)一次。如果影子運行時間太短模型看到的現(xiàn)場樣本太單調(diào)上線后一旦遇到?jīng)]見過的缺陷形態(tài)照樣抓瞎。影子運行期間我還會額外做一件事——讓模型對每一幀圖像的輸出都留檔包括置信度。即使開了自動判定這些歷史輸出也要保存。之后再做模型迭代時就可以拿這些存檔當測試集不用再去產(chǎn)線重新采集。這套做法看起來簡單但能省掉大量返工時間。AI AOI這條路我已經(jīng)走了不少彎路也踩過不少坑。它不是一個可以一蹴而就的升級而是一套需要持續(xù)投入數(shù)據(jù)、流程和跨團隊協(xié)作的系統(tǒng)工程。只要把地基打牢它帶來的回報會遠超一臺傳統(tǒng)AOI設備本身。