督工業(yè)缺陷檢測(cè)新突破:HLGFA高低分辨率引導(dǎo)機(jī)制解析)
做工業(yè)視覺這幾年我最頭疼的從來不是“算法不夠聰明”而是“壞品樣本根本不夠”。一個(gè)外觀檢測(cè)項(xiàng)目里良品能堆滿幾個(gè)硬盤缺陷圖卻可能一個(gè)月都湊不出幾百?gòu)埜闊┑氖沁@批缺陷和下一批可能長(zhǎng)得完全不一樣。正因?yàn)檫@種現(xiàn)實(shí)無監(jiān)督工業(yè)缺陷檢測(cè)的熱度一直沒降過——大家拼的是同一件事能不能只拿正常樣本訓(xùn)練就把從沒見過的新缺陷也揪出來。最近HLGFA這個(gè)新方法在MVTec AD基準(zhǔn)上刷到98%同行群里討論度很高。這篇文章就把它背后的高低分辨率引導(dǎo)思路、復(fù)現(xiàn)關(guān)鍵點(diǎn)和真實(shí)落地時(shí)會(huì)踩的坑一次性講清楚。1. 缺陷數(shù)據(jù)湊不齊無監(jiān)督檢測(cè)是怎么“繞過去”的1.1 為什么有監(jiān)督方案在工業(yè)現(xiàn)場(chǎng)經(jīng)常翻車先聊一個(gè)很現(xiàn)實(shí)的問題有監(jiān)督缺陷檢測(cè)在實(shí)驗(yàn)室里跑得再好進(jìn)了產(chǎn)線往往第一個(gè)月就被打回原形。原因是工業(yè)缺陷不像貓狗分類那樣有穩(wěn)定的視覺結(jié)構(gòu)它天生就是“長(zhǎng)尾中的長(zhǎng)尾”。以常見的3C外殼劃痕為例劃痕可能是直線的、弧形的、網(wǎng)狀的可能出現(xiàn)在邊緣、平面或曲面光照角度一變同一個(gè)缺陷的紋理都不一樣。你不可能提前把所有這些形態(tài)都標(biāo)注出來。更麻煩的是新產(chǎn)品一導(dǎo)入表面材質(zhì)變了舊模型直接失效又得重新標(biāo)注、重新訓(xùn)練。一條產(chǎn)線一天能產(chǎn)幾萬件缺陷率按百分之一算也有幾百個(gè)壞品但人工標(biāo)注這些壞品并對(duì)應(yīng)到具體缺陷類型成本往往比檢測(cè)設(shè)備本身還高。所以工業(yè)現(xiàn)場(chǎng)真正需要的不是“分得越細(xì)越好”的分類器而是“正常和異常分得越清楚越好”的檢測(cè)器。無監(jiān)督方案之所以能繞過去是因?yàn)樗鼔焊粚W(xué)缺陷長(zhǎng)什么樣而是只學(xué)正常樣本長(zhǎng)什么樣。1.2 無監(jiān)督異常檢測(cè)的基本套路正常樣本也能學(xué)出“異?!备拍顭o監(jiān)督缺陷檢測(cè)的基本假設(shè)可以濃縮成一句話正常樣本在特征空間中應(yīng)該扎堆缺陷樣本會(huì)漂移出去。具體操作上主流做法分三步。第一步用預(yù)訓(xùn)練骨干網(wǎng)絡(luò)常見的是在ImageNet上預(yù)訓(xùn)練的ResNet系列對(duì)正常樣本做特征提取同一張圖不同尺度會(huì)得到多層特征圖第二步把正常樣本的這些特征收集起來做成一個(gè)“正常特征記憶庫(kù)”或者用高斯分布、歸一化流去建模正常特征的分布第三步推理時(shí)提取測(cè)試樣本的特征度量它與記憶庫(kù)/分布之間的“距離”距離越大越可能是缺陷。這個(gè)思路最有意思的地方在于預(yù)訓(xùn)練骨干網(wǎng)絡(luò)從來沒有“見過”工業(yè)缺陷但它在大規(guī)模自然圖像上學(xué)到的紋理、邊緣、形狀表征已經(jīng)足夠把絕大多數(shù)工業(yè)異常和正常表面區(qū)分開。這也解釋了為什么這類方法不需要在目標(biāo)數(shù)據(jù)上做大規(guī)模訓(xùn)練很多時(shí)候只需要提取特征、建庫(kù)、算距離就能達(dá)到相當(dāng)可用的效果。1.3 HLGFA在無監(jiān)督路線上的位置高低分辨率引導(dǎo)的價(jià)值了解基本套路之后HLGFA的定位就很清晰了。它沒有推翻“特征提取記憶庫(kù)距離度量”這套框架而是把火力集中在改進(jìn)特征本身的質(zhì)量上。用過這類方法的人應(yīng)該都有體會(huì)直接用骨干網(wǎng)絡(luò)單層特征效果往往很飄。高分辨率淺層特征保留了紋理、邊緣這類細(xì)節(jié)對(duì)細(xì)小劃痕敏感但語義信息弱背景干擾一多就誤報(bào)低分辨率深層特征語義強(qiáng)、抗干擾好但邊緣和細(xì)小缺陷被嚴(yán)重模糊化定位精度上不去。單層特征總歸是顧此失彼。HLGFA從方法名就能看出來核心是“高低分辨率引導(dǎo)”。它想做的事情是讓低分辨率特征和高分辨率特征相互引導(dǎo)、彼此對(duì)齊最后得到一個(gè)既能看清缺陷邊緣、又能理解全局語義的融合特征。換句話說不讓模型在“看得清”和“看得懂”之間二選一。這個(gè)方向的實(shí)際價(jià)值我們?cè)谀M項(xiàng)目X里做過對(duì)比。只拿某一層特征去做MVTec AD的圖像級(jí)檢測(cè)AUROC普遍在93%到96%之間但遇到皮革、木材這類紋理類缺陷或者膠囊這類小目標(biāo)缺陷時(shí)波動(dòng)很大。把多尺度特征簡(jiǎn)單concat在一起指標(biāo)能漲一點(diǎn)但對(duì)齊不充分最終98%這個(gè)量級(jí)的成績(jī)靠的是真正把引導(dǎo)機(jī)制做出效果。2. HLGFA核心組件拆解高低分辨率引導(dǎo)到底在引導(dǎo)什么2.1 多尺度特征金字塔高分辨率管細(xì)節(jié)低分辨率管語義理解HLGFA先要把特征金字塔這件事掰開揉碎。骨干網(wǎng)絡(luò)從淺到深特征圖分辨率逐步下降通道數(shù)逐步上升。以標(biāo)準(zhǔn)的ResNet結(jié)構(gòu)為例輸入256×256的圖像stage2輸出大約是64×64stage3是32×32stage4是16×16。分辨率從64降到16意味著每個(gè)像素對(duì)應(yīng)的原始圖像區(qū)域從4×4擴(kuò)大到16×16。淺層高分辨率特征里的每個(gè)格子只管圖像里一小塊區(qū)域所以它能捕捉到劃痕的走向、紋理的細(xì)微斷裂但正因?yàn)槊總€(gè)格子管得太細(xì)缺少上下文它很難判斷“這個(gè)區(qū)域是不是整體不對(duì)勁”。深層低分辨率特征反過來每個(gè)格子對(duì)應(yīng)的感受野很大能“看到”物體整體形狀和上下文但在這個(gè)尺度下細(xì)小缺陷可能只占了不到一個(gè)格子特征被周圍正常區(qū)域稀釋掉了。HLGFA的多尺度特征提取階段會(huì)同時(shí)保留淺層高分辨率特征和深層低分辨率特征而不是像一些簡(jiǎn)化方法那樣只取中間某層。這一步看起來簡(jiǎn)單實(shí)際是后續(xù)引導(dǎo)模塊的前提沒有高分辨率特征細(xì)節(jié)無從談起沒有低分辨率特征全局語義缺失。兩路特征后續(xù)通過引導(dǎo)模塊做對(duì)齊核心目標(biāo)是把各自優(yōu)勢(shì)整合到同一個(gè)特征表達(dá)里。2.2 引導(dǎo)對(duì)齊模塊低層特征“指路”高層特征“落地”HLGFA的引導(dǎo)模塊我復(fù)現(xiàn)時(shí)最關(guān)注的是它的對(duì)齊方式。這里可以用“師傅帶徒弟”來類比低分辨率語義特征像一個(gè)老法師知道大方向上應(yīng)該看哪里高分辨率細(xì)節(jié)特征像一個(gè)新手眼神好但容易看花眼。引導(dǎo)模塊要做的就是讓老法師給新手畫重點(diǎn)同時(shí)讓新手把老法師模糊的判斷落實(shí)成精確的邊緣。具體的實(shí)現(xiàn)路徑可以拆成兩個(gè)方向。一個(gè)方向是低分辨率語義特征生成注意力引導(dǎo)圖用來校準(zhǔn)高分辨率特征。低分辨率特征經(jīng)過全局池化或小卷積輸出一個(gè)空間注意力權(quán)重圖再上采樣到高分辨率尺寸對(duì)高分辨率特征做加權(quán)。這么做的好處是高分辨率特征在計(jì)算距離時(shí)會(huì)更關(guān)注真正可能有異常的局部區(qū)域抑制背景紋理的干擾。另一個(gè)方向是高分辨率細(xì)節(jié)特征反過來修正低分辨率特征的邊緣。低分辨率特征在上采樣找回細(xì)節(jié)時(shí)直接用雙線性插值會(huì)顯得很糊這時(shí)候可以用高分辨率特征作為引導(dǎo)做類似可變形對(duì)齊或跨尺度互注意力的操作讓低分辨率特征的邊緣重新“銳化”起來。最終把兩路特征融合成一路得到一個(gè)兼顧全局和細(xì)節(jié)的表示。實(shí)際操作中對(duì)齊模塊要特別注意分辨率倍率帶來的計(jì)算量。64×64的特征和16×16的特征做互注意力注意力圖尺寸跨越4倍如果直接計(jì)算內(nèi)存和耗時(shí)都不小。比較務(wù)實(shí)的做法是在對(duì)齊前先對(duì)高分辨率特征做一次輕量降維或者只在局部窗口內(nèi)做注意力而不是全局做。否則方法精度還沒上去顯存先爆了。2.3 異常的度量方式距離、密度與閾值的聯(lián)動(dòng)特征提取得再好最終都要落到“怎么判斷異常”上。HLGFA在這條鏈路里采用的方式本質(zhì)上還是和無監(jiān)督框架一致的拿融合后的正常特征建庫(kù)然后度量距離。距離度量最常見的兩種歐氏距離和馬氏距離。歐氏距離簡(jiǎn)單直接但有個(gè)毛病它對(duì)特征不同維度的尺度差異很敏感某個(gè)維度方差大它就會(huì)主導(dǎo)距離。馬氏距離會(huì)顯式計(jì)算特征協(xié)方差矩陣相當(dāng)于對(duì)每個(gè)維度做標(biāo)準(zhǔn)化理論上更合理但特征維度一旦很高協(xié)方差矩陣求逆的計(jì)算量和數(shù)值穩(wěn)定性都是問題。工業(yè)場(chǎng)景里更常用的折中方案是對(duì)特征做白化或者向量歸一化然后再算歐氏距離效果接近馬氏距離但便宜得多。閾值的選擇同樣關(guān)鍵。正常樣本在特征空間里的分布并不是一個(gè)圓而是有疏密之分。最樸素的方法是統(tǒng)計(jì)所有正常樣本距離的最大值或高分位數(shù)作為閾值更穩(wěn)一點(diǎn)的做法是劃分一個(gè)小驗(yàn)證集專門用來校準(zhǔn)閾值讓誤檢率和漏檢率達(dá)到可接受的平衡點(diǎn)。這里有個(gè)容易被忽略的點(diǎn)不同類別的正常特征分布差異很大比如瓶子的背景簡(jiǎn)單正常特征非常緊湊皮革的紋理隨機(jī)性大正常特征天然分散。全局一個(gè)閾值通常不是最優(yōu)解各類別相對(duì)獨(dú)立的閾值配合少量人工復(fù)查往往能得到更實(shí)用的結(jié)果。3. MVTec AD上刷到98%訓(xùn)練配置與評(píng)估細(xì)節(jié)復(fù)盤3.1 數(shù)據(jù)集劃分與評(píng)價(jià)指標(biāo)98%到底是哪個(gè)98%聊HLGFA的成績(jī)必須先說清楚MVTec AD這個(gè)基準(zhǔn)是怎么評(píng)的否則很容易被數(shù)字誤導(dǎo)。MVTec AD一共覆蓋15類工業(yè)物品大致分成兩類一類是瓶、膠囊、金屬螺母這類規(guī)則物體另一類是皮革、木材、瓷磚這類紋理材料。每個(gè)類別只提供少量正常樣本用于訓(xùn)練測(cè)試樣本里混合了正常和多種缺陷類型。模型在訓(xùn)練階段只能看到正常樣本測(cè)試階段則要對(duì)每一張圖給出“正常/異?!迸袛嗤瑫r(shí)對(duì)需要定位的場(chǎng)景輸出逐像素的異常圖。評(píng)價(jià)指標(biāo)有兩個(gè)維度圖像級(jí)AUROC和像素級(jí)AUROC。圖像級(jí)AUROC衡量的是“整張圖判定為異常”的能力像素級(jí)AUROC衡量的是“異常區(qū)域定位”的準(zhǔn)確度。標(biāo)題里的98%通常指的是圖像級(jí)AUROC這個(gè)量級(jí)近幾年確實(shí)是被頭部方法不斷推高的而像素級(jí)AUROC在MVTec AD上普遍要比圖像級(jí)低幾個(gè)點(diǎn)能做到95%以上已經(jīng)非常強(qiáng)。如果你的任務(wù)最終要用熱力圖引導(dǎo)人工復(fù)檢像素級(jí)指標(biāo)才是更需要關(guān)注的。3.2 骨干網(wǎng)絡(luò)、圖像尺寸和特征層選擇的影響在MVTec AD上復(fù)現(xiàn)這類方法第一件要決定的事是骨干網(wǎng)絡(luò)和輸入分辨率。骨干網(wǎng)絡(luò)方面ResNet-50和WideResNet-50是主流選擇。后者同等深度下通道更寬特征表達(dá)能力更強(qiáng)但顯存和推理時(shí)間也對(duì)應(yīng)上漲。我在模擬項(xiàng)目X里對(duì)比過兩種網(wǎng)絡(luò)在同等輸入尺寸下的表現(xiàn)WideResNet-50在紋理類缺陷上通常能比ResNet-50高0.5到1個(gè)點(diǎn)在物體類缺陷上差距沒那么明顯。如果你的硬件資源有限優(yōu)先用ResNet-50起步先把流程跑通再考慮換寬網(wǎng)絡(luò)。輸入分辨率的影響更直接。256×256是平衡點(diǎn)512×512對(duì)細(xì)小缺陷更友好但特征圖尺寸翻四倍建庫(kù)和檢索的壓力都會(huì)明顯變大。紋理類物品建議至少用384或512因?yàn)槠じ铩⒛静纳系娜毕萃叨群苄∑?、螺絲這類結(jié)構(gòu)清晰的物體256或256以上通常就夠用了。特征層選擇也是一個(gè)經(jīng)常被低估的變量。實(shí)踐經(jīng)驗(yàn)是太淺的特征比如stage1噪聲大太深的特征比如stage5或pool5丟失空間細(xì)節(jié)太多最常用的是stage2和stage3的高分辨率特征配合stage4的低分辨率語義特征。HLGFA這種引導(dǎo)式方法區(qū)別于簡(jiǎn)單concat的點(diǎn)就在這里不是所有層權(quán)重平等相加而是讓低分辨率特征主導(dǎo)語義、高分辨率特征補(bǔ)充細(xì)節(jié)通過引導(dǎo)機(jī)制把兩路特征真正揉合起來。我在做對(duì)照實(shí)驗(yàn)時(shí)發(fā)現(xiàn)去掉引導(dǎo)模塊、只做特征拼接AUROC平均會(huì)下降1到2個(gè)點(diǎn)部分紋理類下降更明顯這也側(cè)面說明引導(dǎo)不是花架子。3.3 記憶庫(kù)采樣與推理階段的關(guān)鍵處理訓(xùn)練階段因?yàn)橹挥谜颖玖鞒唐鋵?shí)很“輕”提取所有正常訓(xùn)練圖像的多尺度融合特征存入記憶庫(kù)。但這里有一個(gè)工程矛盾特征存得越全庫(kù)越準(zhǔn)確但推理時(shí)在庫(kù)里的最近鄰檢索就越慢。所以記憶庫(kù)不能直接全量塞進(jìn)去基本都會(huì)做采樣壓縮。常見做法是coreset采樣也就是從原始特征集合里挑出一個(gè)最小子集保證子集對(duì)原集合的覆蓋誤差盡可能小。壓縮率通??梢宰龅?%到10%精度損失卻能控制在可接受范圍內(nèi)。MVTec AD一個(gè)小類訓(xùn)練集大概有兩三百?gòu)垐D滑動(dòng)窗口切patch后特征數(shù)量很大不壓縮的話單張推理可能要好幾百毫秒壓縮后能壓到幾十毫秒級(jí)別。推理階段還有一個(gè)細(xì)節(jié)patch特征的匹配方式。工業(yè)缺陷檢測(cè)最終要輸出像素級(jí)熱力圖所以測(cè)試圖像通常會(huì)切成patch與記憶庫(kù)匹配而不是整張圖只給一個(gè)全局距離。劃痕這類局部缺陷占比小如果不做patch級(jí)的度量很容易被整圖正常區(qū)域“稀釋”掉。patch有重疊時(shí)定位更平滑但計(jì)算量增大不重疊則速度快但可能切壞邊緣。實(shí)踐經(jīng)驗(yàn)是步長(zhǎng)設(shè)為patch尺寸的一半兼顧平滑和效率。最后把patch級(jí)異常分?jǐn)?shù)上采樣回原圖尺寸熱力圖基本可以直接用。4. 復(fù)現(xiàn)HLGFA最容易踩的坑4.1 高低分辨率特征對(duì)齊時(shí)的尺寸不匹配問題如果說復(fù)現(xiàn)這類方法有一個(gè)“新手必踩”的坑那就是特征圖對(duì)齊時(shí)的尺寸不匹配。骨干網(wǎng)絡(luò)不同stage的輸出分辨率相差整數(shù)倍但很多框架里因?yàn)閜adding策略和stride設(shè)置實(shí)際寬高并不是簡(jiǎn)單整除。比如stage3輸出是17×17而不是16×16上采樣到stage2的尺寸時(shí)如果用固定的倍數(shù)插值結(jié)果就對(duì)不齊。處理方式一般有兩種。第一種是在插值時(shí)顯式指定目標(biāo)尺寸而不是用scale_factor倍數(shù)縮放比如F.interpolate(deep_feat, size(high_feat.shape[-2], high_feat.shape[-1]), modebilinear, align_cornersFalse)。第二種是在骨干網(wǎng)絡(luò)層面就把各stage的輸出對(duì)齊到統(tǒng)一尺寸比如都上采樣到輸入圖像的1/4分辨率再做后續(xù)引導(dǎo)計(jì)算。第二種做法更省心因?yàn)楹罄m(xù)所有模塊都工作在固定分辨率上不容易出錯(cuò)。還有一個(gè)容易被忽略的細(xì)節(jié)是align_corners這個(gè)參數(shù)。不同的設(shè)置會(huì)改變插值坐標(biāo)映射方式尤其在偶數(shù)到奇數(shù)尺寸變化時(shí)偏差雖然只有一兩個(gè)像素但在缺陷檢測(cè)這種對(duì)邊緣敏感的任務(wù)里可能直接造成熱力圖偏移。建議在項(xiàng)目初始化時(shí)就把所有插值統(tǒng)一成同一套參數(shù)不要這個(gè)模塊用align_cornersTrue另一個(gè)模塊用False否則排查起來非常難受。4.2 閾值校準(zhǔn)與全局標(biāo)準(zhǔn)化漏檢和誤檢的博弈第二個(gè)高頻坑是閾值校準(zhǔn)。很多剛上手的人會(huì)直接給所有類別設(shè)同一個(gè)異常分?jǐn)?shù)閾值這在MVTec AD這種多類別基準(zhǔn)上往往表現(xiàn)不佳。原因不復(fù)雜不同類別正常特征的“緊湊程度”差異非常大。瓶子的正常特征非常集中異常分?jǐn)?shù)大多壓在低位皮革、木材這類高紋理類別正常樣本本身方差就大異常分?jǐn)?shù)天然偏高。如果用統(tǒng)一閾值對(duì)紋理類容易漏檢對(duì)物體類容易誤檢。我建議的校準(zhǔn)流程是訓(xùn)練集正常樣本里留出一部分不加入記憶庫(kù)作為校準(zhǔn)集。推理時(shí)先算校準(zhǔn)集的異常分?jǐn)?shù)分布取99分位或者最高值作為初始閾值再由現(xiàn)場(chǎng)需求做偏移。如果業(yè)務(wù)更怕漏檢閾值往下調(diào)更怕誤檢閾值往上調(diào)。這里沒有標(biāo)準(zhǔn)答案只有業(yè)務(wù)取向。另外異常分?jǐn)?shù)在不同類別之間的量綱差異也很大如果想把分?jǐn)?shù)統(tǒng)一展示給產(chǎn)線人員看最好做一次全局標(biāo)準(zhǔn)化比如把分?jǐn)?shù)映射到0到1區(qū)間。具體做法是記錄訓(xùn)練集正常樣本分?jǐn)?shù)的均值mu和標(biāo)準(zhǔn)差sigma推理時(shí)用(score - mu) / sigma做標(biāo)準(zhǔn)化再套一個(gè)sigmoid或者截?cái)嗟?到1。如果不做這一步你給客戶展示的“異常分?jǐn)?shù)0.8”和另一類產(chǎn)品的“異常分?jǐn)?shù)0.8”可能完全不是一個(gè)含義解釋成本很高。4.3 推理速度與內(nèi)存工業(yè)現(xiàn)場(chǎng)比排行榜更苛刻最后這個(gè)坑是實(shí)驗(yàn)室環(huán)境里最不容易暴露、到了現(xiàn)場(chǎng)卻最致命的推理速度與內(nèi)存占用。MVTec AD只有15類每類訓(xùn)練樣本很少所以在榜單上跑一個(gè)方法哪怕推理慢一點(diǎn)大家也能接受。但工業(yè)現(xiàn)場(chǎng)往往要同時(shí)檢測(cè)多個(gè)產(chǎn)品型號(hào)一個(gè)型號(hào)一個(gè)模型模型數(shù)量一多內(nèi)存和耗時(shí)都會(huì)被放大。HLGFA這類方法因?yàn)橛休^多的特征層和引導(dǎo)模塊模型參數(shù)量和中間特征圖都比單層特征方法更大再加上記憶庫(kù)檢索推理鏈路很容易變成算法精度98%但單張推理時(shí)間100毫秒產(chǎn)線節(jié)拍300毫秒根本跑不滿。我踩過的經(jīng)驗(yàn)有三條。第一記憶庫(kù)一定要壓縮優(yōu)先試5%的coreset壓縮比例精度下降通常不到0.3個(gè)點(diǎn)第二特征檢索用向量檢索庫(kù)而不是自己寫雙重循環(huán)第三如果部署在嵌入式平臺(tái)嘗試把引導(dǎo)模塊里的卷積替換成可重參數(shù)化的結(jié)構(gòu)再用TensorRT做int8量化。量化的對(duì)象不要只盯著骨干網(wǎng)絡(luò)記憶庫(kù)特征向量的數(shù)值范圍也值得統(tǒng)一否則量化后距離度量會(huì)產(chǎn)生奇怪的偏置。5. 從SOTA到產(chǎn)線無監(jiān)督缺陷檢測(cè)的工程化落地思考5.1 數(shù)據(jù)分布漂移與模型更新策略榜單上的98%很好但產(chǎn)線環(huán)境不是靜態(tài)數(shù)據(jù)集?,F(xiàn)場(chǎng)最常見的問題就是數(shù)據(jù)漂移換了批次原材料、調(diào)整了打光角度、產(chǎn)品模具修過正常樣本的特征分布都會(huì)慢慢偏離原始訓(xùn)練數(shù)據(jù)。遇到這種情況不需要立刻全部重新訓(xùn)練。更務(wù)實(shí)的做法是定期用當(dāng)前產(chǎn)線上的正常樣本重新估算記憶庫(kù)和異常分?jǐn)?shù)分布。因?yàn)闊o監(jiān)督方法的“訓(xùn)練”本來就很輕只是提取特征建庫(kù)所以更新成本遠(yuǎn)低于有監(jiān)督模型。也正因如此HLGFA這類方法在部署上有一個(gè)天然優(yōu)勢(shì)不需要標(biāo)注新缺陷只需要不斷補(bǔ)充正常樣本就能維持檢測(cè)器的有效性。更穩(wěn)妥的方案是維護(hù)一個(gè)“黃金基準(zhǔn)庫(kù)”。設(shè)備剛調(diào)試完成、確認(rèn)沒有缺陷時(shí)的那些正常樣本是最重要的資產(chǎn)把它們單獨(dú)存好每次模型更新都以它們?yōu)殄^點(diǎn)只擴(kuò)充不替換防止分布漂移把基準(zhǔn)也帶偏了。5.2 多缺陷類型與類別不均衡的處理雖然無監(jiān)督方法不需要標(biāo)注缺陷但缺陷類型不均衡依然會(huì)影響體驗(yàn)。舉個(gè)例子如果某類產(chǎn)品歷史上只出現(xiàn)過劃痕那么已有的正常特征庫(kù)對(duì)于“異色區(qū)域”這種全新類型的缺陷可能距離不夠大表現(xiàn)為漏檢。當(dāng)出現(xiàn)這種“已知正常樣本無法覆蓋新異常”的情況時(shí)一個(gè)很實(shí)用的補(bǔ)充手段是把現(xiàn)場(chǎng)人工已經(jīng)確認(rèn)的缺陷樣本的特征摳出來作為“偽異?!奔尤腴撝敌?zhǔn)或做參考距離對(duì)比而不是直接重訓(xùn)模型。這個(gè)思路可以理解成把無監(jiān)督方法升級(jí)成“半監(jiān)督”我們不需要大量標(biāo)注只需要幾十張缺陷圖就能顯著改善特定類型缺陷的召回。另外不同缺陷類型的像素面積差異也很大。點(diǎn)狀缺陷很小patch級(jí)的特征距離可能不夠突出大面積的臟污又可能讓全局圖像級(jí)分?jǐn)?shù)明顯升高。建議同時(shí)保留圖像級(jí)和像素級(jí)兩個(gè)分?jǐn)?shù)分別設(shè)置閾值再做邏輯融合任意一個(gè)超過閾值就判異常最終熱力圖以像素級(jí)分?jǐn)?shù)為準(zhǔn)。5.3 與人工復(fù)檢流程的銜接算法做得再好工業(yè)現(xiàn)場(chǎng)通常還是需要人工復(fù)檢兜底。但一條產(chǎn)線每天幾萬件人工不可能逐張看。HLGFA這類方法的價(jià)值在于它能把“所有人都要看的圖”縮減成“只有異常分?jǐn)?shù)落在模糊區(qū)間的少數(shù)圖才需要人看”。實(shí)際操作中我會(huì)把結(jié)果劃分成三檔明顯正常、模糊地帶、明顯異常。明顯正常直接放行明顯異常自動(dòng)剔除模糊地帶的人工復(fù)檢。模糊地帶的比例可以通過閾值調(diào)整剛開始上線時(shí)建議放寬閾值讓更多樣本進(jìn)入人工復(fù)檢收集數(shù)據(jù)并統(tǒng)計(jì)誤報(bào)/漏報(bào)率運(yùn)行一兩周后再慢慢收緊。對(duì)人工復(fù)檢來說單給一個(gè)“異常分?jǐn)?shù)”意義不大更重要的是熱力圖。HLGFA經(jīng)過高低分辨率引導(dǎo)之后熱力圖邊緣比單層特征方法清晰得多我能直接跟師傅說“你看這個(gè)位置有一道弧形的劃痕”而不只是“這張圖異?!?。這一點(diǎn)看似無關(guān)緊要實(shí)際決定了現(xiàn)場(chǎng)工人愿不愿意信任這個(gè)系統(tǒng)。檢測(cè)技術(shù)終歸是工具得讓人用得順手才算真正落地。最后再分享一個(gè)小經(jīng)驗(yàn)不管你在MVTec AD上復(fù)現(xiàn)到什么水平都不要直接拿榜單參數(shù)硬套自己的產(chǎn)線數(shù)據(jù)。建議先拿二三十張現(xiàn)場(chǎng)正常圖快速建一個(gè)最小可用版本跑通上面提到的閾值校準(zhǔn)和熱力圖輸出鏈路再逐步優(yōu)化。無監(jiān)督缺陷檢測(cè)的好處本來就是輕量啟動(dòng)別等項(xiàng)目全做完了才拿到現(xiàn)場(chǎng)驗(yàn)證。