合SDI模塊:筆記本LCD屏幕缺陷檢測與分類實戰(zhàn))
做筆記本LCD屏幕缺陷檢測的人應(yīng)該都有過這種體會產(chǎn)線上一個米粒大小的亮點強光下明明存在模型卻視而不見一片淡淡的Mura水波紋人眼要來回?fù)Q幾個角度才能確認(rèn)模型直接漏成一片空白。我們這次做YOLO11-SEG-SDI實戰(zhàn)就是沖著這類“小而淡”的屏幕缺陷去的。方案核心是用YOLO11-SEG做實例分割基座再疊加一個自定義的SDI模塊Spatial-Detail Interaction空間-細(xì)節(jié)交互把上下文信息和細(xì)節(jié)信息重新融合起來最終在筆記本LCD屏幕缺陷檢測與分類任務(wù)上跑出了一版能實際落地、能上機試跑的結(jié)果。這篇文章會把整體思路、數(shù)據(jù)集建設(shè)、模塊設(shè)計原理、訓(xùn)練參數(shù)和踩坑記錄完整拆開講給做工業(yè)視覺缺陷檢測的朋友尤其是被小目標(biāo)、低對比度缺陷困擾的人提供一個可以直接參考的完整路線。1. 項目概述與整體設(shè)計思路1.1 筆記本LCD面板檢測的真實痛點筆記本LCD屏幕的缺陷檢測和普通外觀檢測有個本質(zhì)區(qū)別缺陷本身極其不顯眼。我們面對的缺陷類型主要有亮點、暗點、細(xì)劃痕、Mura亮度不均云團、臟污和壞線其中大量缺陷的尺寸只有幾百微米到一兩毫米在一整塊14寸屏幕上占比不到千分之一。對比度更是低得離譜Mura類缺陷的灰度差異往往只有幾個亮度值人眼都需要在暗室、特定光源角度下才能辨認(rèn)。產(chǎn)線上傳統(tǒng)做法是人工目檢老師在強光下逐屏翻看。這里的問題很現(xiàn)實一條產(chǎn)線一個班次要看上千塊屏幕人的注意力撐不過兩個小時漏檢率隨疲勞程度大幅波動而且不同檢驗員對“算不算缺陷”的標(biāo)準(zhǔn)不一致經(jīng)常出現(xiàn)上下游復(fù)判扯皮。我們也試過傳統(tǒng)機器視覺方案閾值分割、頻域濾波、梯度特征加分類器都搭過單一場景調(diào)得不錯換一版屏幕或換一種光源就崩尤其是Mura和細(xì)劃痕這種無固定形狀、邊緣模糊的目標(biāo)傳統(tǒng)算子基本無能為力。所以這個項目的核心訴求非常明確用一套深度學(xué)習(xí)分割模型把“檢測、分割、分類”三件事一次做完。檢測要足夠敏感漏檢率盡量壓到最低分割要給出缺陷的掩碼方便后續(xù)統(tǒng)計面積、位置、形態(tài)分類要支持按缺陷類型分揀方便產(chǎn)線定位問題工序。1.2 為什么基座模型選YOLO11-SEG選型的時候我們對比過兩階段檢測器、經(jīng)典的語義分割網(wǎng)絡(luò)和YOLO系列的分割版本。最后定在YOLO11-SEG理由有三條。第一是實例分割能力。屏幕缺陷的形態(tài)信息太重要了。劃痕要看方向和長度Mura要看面積和形狀臟污要看紋理是否規(guī)則。YOLO11-SEG輸出的是“檢測框?qū)嵗诖a類別”掩碼直接給了我們?nèi)毕莸南袼丶壿喞筇幚黼A段可以順勢統(tǒng)計面積、周長、最小外接矩形等形態(tài)學(xué)參數(shù)這對產(chǎn)線分揀和缺陷分級非常關(guān)鍵是純目標(biāo)檢測框沒法比的。第二是工程鏈路成熟。YOLO11-SEG的訓(xùn)練、驗證、導(dǎo)出、量化、部署有一套完整閉環(huán)對工業(yè)項目來說能在產(chǎn)線快速落地比單純刷指標(biāo)重要得多。它的網(wǎng)絡(luò)結(jié)構(gòu)在YOLOv8-SEG的基礎(chǔ)上做了不少優(yōu)化backbone里采用了新的卷積堆疊方式整體計算量控制得不錯實測單張顯卡就能承載完整訓(xùn)練流程推理速度也能滿足在線檢測的要求。第三是它對小目標(biāo)的回歸能力整體好于早期版本。當(dāng)然這話得說完整YOLO11-SEG本身對小目標(biāo)有改善但放到LCD這種極端小目標(biāo)、極端低對比度的場景里光靠基座模型是不夠的。我們跑過一輪基線小尺寸的亮點和Mura漏檢率依然偏高這才有了后面加SDI模塊的動機。1.3 SDI模塊到底是解決什么問題的SDI全稱Spatial-Detail Interaction空間-細(xì)節(jié)交互模塊。聽名字可能覺得玄其實思路很簡單屏幕缺陷檢測難本質(zhì)是“上下文”和“細(xì)節(jié)”這兩個信息沒有同時被用好。什么叫上下文一塊Mura所以你判斷它異常是因為它和周圍正常區(qū)域的亮度分布不一致一條劃痕所以被識別是因為它周圍的屏幕底色是均勻的。缺陷本身的信號弱但“周圍應(yīng)該是正常的”這個信息是強的這就是上下文。什么叫細(xì)節(jié)缺陷尺寸太小進了深層特征圖之后往往只剩幾個像素邊緣、紋理這些高頻信息早就被下采樣抹平了。亮點和劃痕靠的就是這種高頻細(xì)節(jié)信息。主流檢測網(wǎng)絡(luò)在設(shè)計時通常默認(rèn)兩者兼顧但實際對工業(yè)小缺陷來說都不夠極致深層感受野大上下文足細(xì)節(jié)丟了淺層細(xì)節(jié)足但感受野小缺少上下文判斷。SDI模塊的思路就是拉兩條獨立分支一條專門擴感受野抓上下文一條專門保高頻細(xì)節(jié)最后通過交互融合把兩邊的信息按空間位置重新對齊、加權(quán)合并。這個模塊的詳細(xì)結(jié)構(gòu)在第三章展開這里先記住它的定位輕量、可插拔、只改Neck不動Backbone不傷推理速度。2. 缺陷分類體系與數(shù)據(jù)集建設(shè)2.1 六類常見缺陷的定義與形態(tài)特征做工業(yè)檢測項目第一步永遠(yuǎn)不是選模型而是定義清楚“你要檢測的東西到底長什么樣”。我們和產(chǎn)線質(zhì)量工程師一起把筆記本LCD缺陷收斂成六類每類定了明確的外觀描述和判定邊界。缺陷類別典型外觀尺寸范圍檢測難點亮點終端照射下呈點狀發(fā)亮常為單像素或小團像素0.1~0.5mm尺寸極小易與灰塵反光混淆暗點點狀暗斑常由壞點或異物壓迫導(dǎo)致0.2~1mm低對比度邊界不清細(xì)劃痕線狀連續(xù)或斷續(xù)痕跡方向隨機長度2~30mm寬度0.02~0.1mm極細(xì)長長寬比極端Mura無固定形狀的亮度不均云團邊緣模糊5~50mm低對比度無清晰邊界臟污表面異物形狀不規(guī)則常伴紋理0.5~10mm形態(tài)多變與灰塵背景難分壞線整條水平或豎直發(fā)亮/發(fā)暗線貫穿屏幕跨度大細(xì)且長這里要強調(diào)一個經(jīng)驗分類體系不是越細(xì)越好而是越“可判定”越好。我們一開始把Mura細(xì)分成三種結(jié)果標(biāo)注員之間的一致性很差同一塊缺陷有人標(biāo)成豎向Mura有人標(biāo)成團狀Mura模型學(xué)出來的特征自然也是亂的。后來合并成大Mura一類標(biāo)注爭議立刻少了很多模型準(zhǔn)確率反而上來了。2.2 采集、標(biāo)注與數(shù)據(jù)清洗數(shù)據(jù)采集是在模擬產(chǎn)線光源環(huán)境下完成的。我們用了工業(yè)面陣相機加低角度環(huán)光、同軸光兩組光源對每一塊屏分別采集亮場、暗場和灰度場三組圖像以覆蓋不同缺陷的最佳呈現(xiàn)角度。這里有個關(guān)鍵細(xì)節(jié)光源角度和亮度必須和最終部署現(xiàn)場保持一致否則模型訓(xùn)練時看到的缺陷形態(tài)和現(xiàn)場根本對不上指標(biāo)再高都白搭。標(biāo)注環(huán)節(jié)用的是開源的多邊形標(biāo)注工具逐實例標(biāo)注掩碼。我們給標(biāo)注員定了三條強制規(guī)范第一一個缺陷實例只標(biāo)一個多邊形粘連的兩個缺陷必須分開第二拿不準(zhǔn)的疑似缺陷單獨建一個“待定”標(biāo)簽不進訓(xùn)練集第三Mura類標(biāo)注時必須在暗室環(huán)境下放大到原始尺寸的200%以上再描邊防止邊緣位置隨手一畫。原始數(shù)據(jù)攢了大概1200多張有效圖像缺陷實例總數(shù)接近8000個。拿到標(biāo)注后我們做了三輪清洗先用腳本去重刪除幾乎一模一樣的重復(fù)圖再篩掉對焦模糊、光源不均明顯失衡的樣本最后把標(biāo)注置信度低的樣本抽出來人工復(fù)核。這個環(huán)節(jié)看著瑣碎但實際對模型上限的影響比后邊調(diào)參大得多。2.3 針對小目標(biāo)的切圖與增強策略筆記本屏幕原圖分辨率很高直接把整塊屏塞進網(wǎng)絡(luò)訓(xùn)練小缺陷會進一步縮小。我們的做法是先把屏幕裁成若干子圖子圖尺寸設(shè)在1024像素左右裁切時使用重疊滑動窗口重疊區(qū)256像素保證跨邊界缺陷不會因為被切成兩半而漏標(biāo)。數(shù)據(jù)增強上我們做了明確的取舍。常規(guī)的Mosaic增強一開始是開著的后來發(fā)現(xiàn)一個問題Mosaic把四張圖拼在一起小目標(biāo)會被隨機縮放本來就只有十幾個像素的亮點可能直接被縮沒了標(biāo)注還留在原坐標(biāo)上等效于給模型喂了錯誤樣本。所以對液晶屏這類極端小目標(biāo)場景我把Mosaic關(guān)掉了轉(zhuǎn)而采用翻轉(zhuǎn)、小幅旋轉(zhuǎn)、亮度擾動、高斯模糊模擬Mura效果這幾類增強。針對類別不均衡用的辦法是對Mura和亮點這兩個最難檢的類別做欠采樣復(fù)制再把復(fù)制的小目標(biāo)實例通過貼圖方式隨機粘貼到干凈的屏幕子圖上相當(dāng)于做定向的復(fù)制粘貼增強實測這類增強對亮點的召回提升非常直接。3. SDI模塊的結(jié)構(gòu)設(shè)計與原理拆解3.1 小缺陷檢測難在哪兒要理解SDI模塊的價值得先搞清楚小缺陷在網(wǎng)絡(luò)里到底經(jīng)歷了什么。一張輸入圖經(jīng)過Backbone逐級下采樣特征圖分辨率從輸入尺寸一路降到1/32。一個原本只有幾個像素的亮點在第4、第5層特征圖里可能就衰減成一個響應(yīng)強度極低的單點和背景噪聲幾乎無法區(qū)分。而Neck后續(xù)的融合雖然能補充部分信息但如果Backbone這一路已經(jīng)丟失了關(guān)鍵細(xì)節(jié)后面再融合也是無米之炊。另一頭Mura這種大而不清的目標(biāo)整體尺寸不小但它的特征不是“形狀”而是“相對周圍的亮度差”。深層特征圖有足夠的感受野看到周圍正常區(qū)域卻因為下采樣丟了精確的灰度關(guān)系淺層特征圖有灰度精度但感受野又不夠大看不到上下文。這就是我前面說的兩難知道該看哪但看不清邊緣看清了邊緣又不知道是不是異常。SDI模塊做的就是拆開這個結(jié)你不是右眼看細(xì)節(jié)、左眼看環(huán)境嗎那就在網(wǎng)絡(luò)結(jié)構(gòu)上也這樣分兩條路走最后再合起來。3.2 空間上下文分支把“環(huán)境”還給缺陷空間上下文分支的設(shè)計目標(biāo)很明確在不大幅度增加計算量的前提下把感受野拉大讓每個位置的輸出特征都“見過”周圍一大片區(qū)域。具體做法是采用多分支空洞卷積結(jié)構(gòu)。三條分支分別使用空洞率1、3、5的卷積核空洞率不同感受野覆蓋范圍不同能看到近處細(xì)節(jié)和遠(yuǎn)處背景的不同組合三條分支的輸出按通道拼接后過一層輕量空間注意力讓網(wǎng)絡(luò)自己學(xué)習(xí)“哪些空間位置上的上下文對判斷缺陷更重要”。這里有個設(shè)計細(xì)節(jié)值得說。空洞卷積雖然能擴感受野但如果空洞率太大卷積核中間是空的會丟失連續(xù)信息反而對細(xì)長目標(biāo)不友好。所以我們沒有一味加大空洞率而是保持最大空洞率5并用空洞率1的分支兜底保留原始連續(xù)特征。這個折中是在消融實驗里試出來的空洞率再往上加劃痕的檢測反而掉點。3.3 細(xì)節(jié)特征分支把“邊緣”還給缺陷細(xì)節(jié)特征分支解決的是另一頭的問題恢復(fù)被下采樣抹掉的邊緣和紋理。我們的做法是從Backbone較早的高分辨率特征層直接引一條旁路出來這條分支的特征圖分辨率要比Neck主流分支高很多保留了更多原始像素信息。光有高分辨率還不夠還得把“高頻變化”顯式地強調(diào)出來。我們在細(xì)節(jié)分支內(nèi)部接了一個高頻特征提取模塊用固定參數(shù)的拉普拉斯卷積核和Sobel算子分別提取二階和一階梯度信息再把原始高分辨率特征和梯度特征沿通道拼接。這么做的好處是讓網(wǎng)絡(luò)不用自己隱式學(xué)習(xí)“什么是邊緣”而是直接把邊緣響應(yīng)喂到面前對亮點、細(xì)劃痕這類靠邊界存在的缺陷幫助尤其明顯。實驗里有個有意思的觀察單獨接高分辨率分支而不加高頻提取時模型在Mura上略有提升但亮點召回幾乎沒有變化加了高頻提取之后亮點和劃痕的召回一下子拉開差距。這說明對這類缺陷網(wǎng)絡(luò)確實缺的不是分辨率而是對高頻響應(yīng)的顯式感知。3.4 交互融合與模塊插入位置兩條分支各自提取完特征后最后一步是交互融合。我們這里用的是一種輕量交叉注意力機制空間分支的輸出生成一組注意力權(quán)重用來對細(xì)節(jié)分支特征做空間位置上的加權(quán)同時細(xì)節(jié)分支的輸出也生成一組權(quán)重對空間分支特征做加權(quán)兩者相加后再與Neck原始特征殘差相加。這樣處理的好處是兩個分支的信息不是簡單拼接完事而是按空間位置做了對齊和互相調(diào)制。比如某個位置空間上下文強烈提示“這里異?!边@個信號就會放大細(xì)節(jié)分支上對應(yīng)位置的邊緣響應(yīng)反過來某處有清晰的邊緣細(xì)節(jié)也會幫助空間分支確認(rèn)這不是一塊正常區(qū)域。模塊插入位置我們只在Neck的P3和P4兩處加了SDIP3對應(yīng)中等分辨率特征圖是小缺陷的主要落腳層P4提供稍大區(qū)域的整體信息。P5層我們沒有動因為Mura這類大目標(biāo)主要靠這里貿(mào)然加模塊反而會拖慢訓(xùn)練收斂。整個模塊設(shè)計成可插拔形式用預(yù)訓(xùn)練權(quán)重初始化時不會破壞原網(wǎng)絡(luò)結(jié)構(gòu)可以直接加載官方預(yù)訓(xùn)練參數(shù)再微調(diào)。# SDI模塊核心結(jié)構(gòu)偽代碼 class SpatialContextBranch: # 輸入: 下采樣特征 F_low # 1. 三路空洞卷積 (dilation1,3,5) 并行提取 # 2. 輸出沿通道拼接 # 3. 空間注意力加權(quán), 輸出 F_spatial class DetailPreserveBranch: # 輸入: 高分辨率淺層特征 F_high # 1. 拉普拉斯/sobel高頻卷積提取梯度 # 2. 原始高分辨率特征與梯度特征通道拼接 # 3. 輸出 F_detail class SDIFusion: # 輸入: F_spatial, F_detail # 1. F_spatial 生成空間注意力權(quán)重 W_s # 2. F_detail 生成空間注意力權(quán)重 W_d # 3. 交叉加權(quán)融合 # 輸出: F_out F_neck fusion_result4. 訓(xùn)練環(huán)境與完整實操流程4.1 軟硬件環(huán)境與工程組織訓(xùn)練環(huán)境方面我們用的是單張專業(yè)顯卡顯存24GB整體配置就是入門級AI工作站沒有上多卡集群。實測下來YOLO11-SEG加上SDI模塊訓(xùn)練時的顯存占用和基線模型相比只增加了約8%單卡完全跑得動。軟件層面基于當(dāng)前主流的深度學(xué)習(xí)框架搭建訓(xùn)練和驗證過程都掛在YOLO11的工程體系下這樣可以復(fù)用數(shù)據(jù)加載、增強、驗證、導(dǎo)出這些成熟鏈路不用重復(fù)造輪子。新增的SDI模塊單獨放在一個目錄里和原有網(wǎng)絡(luò)代碼解耦方便隨時開關(guān)做消融。工程目錄建議按這個結(jié)構(gòu)組織分工清晰lcd_defect_project/ ├── data/ # 數(shù)據(jù)集與標(biāo)注文件 ├── configs/ # 數(shù)據(jù)配置與訓(xùn)練參數(shù) ├── models/ # 基座模型與SDI模塊定義 ├── scripts/ # 訓(xùn)練、驗證、推理腳本 ├── weights/ # 預(yù)訓(xùn)練權(quán)重與訓(xùn)練產(chǎn)出 └── results/ # 指標(biāo)曲線與預(yù)測可視化4.2 數(shù)據(jù)配置與訓(xùn)練參數(shù)數(shù)據(jù)配置是YAML格式核心是把上一步建好的數(shù)據(jù)集路徑和類別定義清楚。我們的配置大概長這樣path: ./data/lcd_defect train: images/train val: images/val names: 0: bright_spot 1: dark_spot 2: scratch 3: mura 4: dirt 5: dead_line訓(xùn)練參數(shù)我們是這么定的輸入分辨率1024批大小16訓(xùn)練200輪優(yōu)化器用帶動量的隨機梯度下降初始學(xué)習(xí)率0.01配合前期數(shù)百步的預(yù)熱。選擇SGD而不是自適應(yīng)優(yōu)化器是因為在檢測分割任務(wù)上SGD配合合適的調(diào)度器最終收斂點的泛化性通常比自適應(yīng)優(yōu)化器更穩(wěn)尤其在數(shù)據(jù)量不是很大的工業(yè)場景里不容易過早過擬合。針對小目標(biāo)有兩條參數(shù)經(jīng)驗值得記錄。一是輸入分辨率我們對比過640和10241024下亮點和劃痕的mAP提升了近5個點代價是訓(xùn)練和推理時間增加這個取舍在產(chǎn)線可接受范圍內(nèi)二是置信度閾值訓(xùn)練時保持默認(rèn)但評估漏檢率時要把置信度閾值往下壓到0.1再統(tǒng)計否則會高估實際表現(xiàn)。4.3 訓(xùn)練、驗證與模型導(dǎo)出流程完整流程分四步走。第一步加載預(yù)訓(xùn)練權(quán)重把Backbone和原Neck參數(shù)全部初始化好只隨機初始化SDI模塊新增的參數(shù)。第二步正常訓(xùn)練訓(xùn)練過程中每10輪保存一次權(quán)重并同時跑驗證集記錄每個類別的精確率和召回率曲線。第三步挑驗證集最優(yōu)的一版權(quán)重做完整指標(biāo)評估。第四步導(dǎo)出部署格式先導(dǎo)出為通用中間格式再做量化最后在產(chǎn)線工控機上試跑推理速度。# 訓(xùn)練命令示例 python train.py \ --model yolo11s-seg \ --data lcd_defect.yaml \ --imgsz 1024 \ --epochs 200 \ --batch 16 \ --optimizer SGD \ --lr0 0.01 \ --warmup 300這里要特別提醒一點很多項目訓(xùn)練完直接用最后一輪權(quán)重這是最容易翻車的地方。我們的習(xí)慣是專門寫一個模型選擇腳本在驗證集上遍歷所有保存的中間權(quán)重按“mAP50和難例召回率加權(quán)”的標(biāo)準(zhǔn)選出最優(yōu)模型。工業(yè)場景里最后一輪權(quán)重經(jīng)常不是因為過擬合導(dǎo)致效果不佳而是學(xué)習(xí)率衰減到這個階段后模型在少數(shù)難例上的表現(xiàn)波動很大早幾十輪的那版反而更穩(wěn)。5. 評估結(jié)果與實測對比5.1 指標(biāo)怎么選工業(yè)缺陷檢測的指標(biāo)選擇和學(xué)術(shù)比賽有明顯區(qū)別。學(xué)術(shù)榜上看mAP但產(chǎn)線真正關(guān)心的是漏檢率也就是召回率。所以我們的評估體系是三套指標(biāo)并行mAP50和mAP50-95看整體檢測和分割精度mIoU看掩碼質(zhì)量另外單獨統(tǒng)計每個類別的召回率并算一個“關(guān)鍵難例召回率”指標(biāo)專門統(tǒng)計Mura和亮點這兩個此前漏檢最嚴(yán)重類別的表現(xiàn)。還有一個容易被忽略的指標(biāo)是推理速度。產(chǎn)線檢測有節(jié)拍要求模型跑太慢即使指標(biāo)再高也沒法上線。我們在驗證集上統(tǒng)計去除預(yù)熱耗時后的單張平均推理耗時折算成FPS用來判斷部署可行性。5.2 基準(zhǔn)模型與SDI改進的對比結(jié)果在同一份數(shù)據(jù)集、同一套訓(xùn)練參數(shù)下我們對比了純YOLO11-SEG基線和加SDI模塊的完整方案。驗證集上的典型結(jié)果如下模型mAP50mAP50-95mIoU難例召回率推理耗時YOLO11-SEG 基線88.471.369.276.5%18msYOLO11-SEG SDI93.678.575.889.2%20ms從結(jié)果能看出三點。第一整體mAP的提升幅度約5個點主要是難例類別貢獻的容易檢的臟污、壞線本身已經(jīng)接近滿分提升空間有限。第二難例召回率從76.5%漲到89.2%這是這個項目最有價值的提升因為產(chǎn)線關(guān)注的就是這最難的一批。第三推理耗時只增加了大概2毫秒對產(chǎn)線節(jié)拍完全沒壓力這正是可插拔輕量模塊該有的樣子。按類別拆開看Mura的召回率提升最明顯從71%左右拉到86%亮點從78%拉到91%劃痕提升相對小一些從82%到88%。劃痕提升幅度小分析下來主要是因為標(biāo)注本身的長寬比極端部分細(xì)劃痕在人眼標(biāo)注時就存在邊界模糊的爭議模型預(yù)測的不確定性也相應(yīng)更大。5.3 典型失敗案例與后續(xù)補強再好的模型也有翻車的時候。我們專門把驗證集上漏檢和誤檢的樣本撈出來做了一次復(fù)盤最有代表性的兩例可以分享。第一例是漏檢低對比度細(xì)劃痕。這類劃痕在圖上只占兩三個像素寬度灰度差幾乎貼著噪聲水平人眼要反復(fù)比對周圍紋理才能確認(rèn)。SDI模塊已經(jīng)盡力恢復(fù)了高頻信息但原始圖像信噪比太低模型把真正的劃痕響應(yīng)當(dāng)成了背景紋理。后續(xù)補強方向是改善成像通過增加一組高角度定向光源讓劃痕產(chǎn)生更強的散射信號從源頭提升信噪比這個思路比繼續(xù)加大模型更有效。第二例是把灰塵誤檢成了臟污?;覊m和臟污在特征上高度相似區(qū)別往往只在來源和分布方式僅靠單張灰度圖很難完全分對。我們的處理是兩個方向并行一是在后處理里引入面積和圓度約束把孤立小圓點單獨歸類降低誤檢二是把多光源圖像在輸入層做了通道融合相當(dāng)于給模型多提供一組“看穿表面”的信息。6. 常見問題與避坑經(jīng)驗6.1 數(shù)據(jù)層面最容易踩的坑數(shù)據(jù)層面第一個坑是重復(fù)樣本。工業(yè)生產(chǎn)的數(shù)據(jù)往往來自同一批屏幕同一種缺陷在連著幾十張圖里反復(fù)出現(xiàn)看上去數(shù)據(jù)量很大真實信息量很少。訓(xùn)練集和驗證集如果都是從這批屏幕里隨機分的模型其實在“背屏”換一批新屏幕立刻現(xiàn)原形。我們的做法是按屏幕批次劃分?jǐn)?shù)據(jù)集同一個批次的所有圖要么全在訓(xùn)練集要么全在驗證集絕不混在一起。第二個坑是光源不一致。我們早期有一批數(shù)據(jù)是在設(shè)備調(diào)試階段采的光源亮度和穩(wěn)定后采的不完全一致結(jié)果模型學(xué)出了一個隱含假設(shè)暗一點的圖就是臟污。后來排查指標(biāo)異常時才發(fā)現(xiàn)驗證集里偏暗的屏幕幾乎全部被誤判。解決方案只有一條把不同光源條件下采集的圖分開管理按比例分布到訓(xùn)練和驗證里寧可訓(xùn)練集小一點也要保證成像分布一致。第三個坑是標(biāo)注一致性。工業(yè)標(biāo)注是多人協(xié)作的不同標(biāo)注員的松緊尺度天然有差Mura這種邊界模糊的目標(biāo)尤其明顯。我們做過一次統(tǒng)計同一個缺陷讓兩個人重新標(biāo)注掩碼面積能差30%。后來我們強制要求所有新增標(biāo)注過一遍“雙人復(fù)核”明顯提高了掩碼質(zhì)量也直接反映在mIoU的提升上。6.2 訓(xùn)練與調(diào)參層面的坑訓(xùn)練階段遇到最典型的問題是Mosaic增強對小目標(biāo)的傷害前面已經(jīng)提過。這里再補充一個連帶問題關(guān)閉Mosaic后數(shù)據(jù)多樣性下降大目標(biāo)類別的精度略有下降。解決辦法是只在訓(xùn)練的前半段關(guān)閉Mosaic后半段再開回來或者用小概率開啟我實測把開啟概率壓到0.3左右小目標(biāo)和大目標(biāo)能兼顧。另一個高發(fā)問題是類別不均衡導(dǎo)致的學(xué)習(xí)傾斜。臟污和壞線樣本多模型輸出自然偏向它們亮點和Mura這種樣本少的類別會持續(xù)欠擬合。除了復(fù)制粘貼增強我們還在損失層面加重了難例類別的權(quán)重把Mura和亮點的分類損失權(quán)重提高1.5倍。調(diào)參時要留意不能加太狠否則模型會為了保難例把其他類別的表現(xiàn)拉下去得不償失。還有一個容易被忽略的坑是驗證集指標(biāo)和現(xiàn)場表現(xiàn)的差異。模型在驗證集上mAP很高到了現(xiàn)場卻頻繁報警。主要原因是現(xiàn)場圖像和驗證集圖像的預(yù)處理不一致比如縮放方式、歸一化參數(shù)、裁切區(qū)域稍有偏差模型輸出就會抖動。我們的解決方法是把現(xiàn)場采集的圖像做和訓(xùn)練時完全一致的前處理后再送進模型同時保留大約2%的現(xiàn)場真實樣本定期做復(fù)核測試。6.3 部署與性能優(yōu)化經(jīng)驗部署階段第一個建議是不要急著量化。低對比度缺陷對數(shù)值精度非常敏感我們最初把模型量化到低精度后Mura的響應(yīng)幾乎全部消失驗證集mAP直接掉十幾個點。后來改混合量化方案只對部分對精度不敏感的網(wǎng)絡(luò)層做量化其余層保持高精度才把精度損失控制到可以接受的范圍。如果你對精度極度敏感建議優(yōu)先用高精度部署等確定節(jié)拍有富余再做量化。第二點是推理時的多尺度測試要謹(jǐn)慎。訓(xùn)練時用1024輸入推理時為了多抓細(xì)節(jié)又切成1280這會導(dǎo)致模型看到的特征尺度分布變化輸出可能反而不穩(wěn)定。如果部署現(xiàn)場確實需要更高分辨率應(yīng)該讓訓(xùn)練和推理保持一致的分辨率和切片策略而不是只在推理端臨時改。第三點是工程制品環(huán)境盡量固定依賴版本。我們踩過一次坑開發(fā)環(huán)境和部署環(huán)境的框架版本不一致導(dǎo)出后的中間格式模型在部署端跑出不同的結(jié)果。后來把環(huán)境依賴全部鎖版本導(dǎo)出和部署用同一套運行時這個問題再沒出現(xiàn)過。這個項目做完我個人最深的體會是在工業(yè)缺陷檢測里數(shù)據(jù)、成像和工程鏈路至少要占七分力氣模型和網(wǎng)絡(luò)結(jié)構(gòu)最多占三分。SDI模塊確實有效但它的有效建立在一個前提上——我們有足夠規(guī)范的數(shù)據(jù)、足夠貼合現(xiàn)場的成像方案以及一條從訓(xùn)練到部署不脫節(jié)的工程鏈路。如果你也在做類似屏幕檢測項目建議先別急著堆模型復(fù)雜度先用標(biāo)準(zhǔn)YOLO11-SEG把數(shù)據(jù)鏈路和評估體系跑通再引入像SDI這樣的定制模塊每一步的改進都能量化對比這才是能長期迭代的做法。最后再分享一個小技巧產(chǎn)線落地時建議給現(xiàn)場留一個“難例回流”機制把每天誤檢漏檢的圖保存下來每周補充進訓(xùn)練集重訓(xùn)一次模型會越用越貼合現(xiàn)場這種持續(xù)迭代的能力比任何單次訓(xùn)練的指標(biāo)都寶貴。