產(chǎn)品AI檢測實戰(zhàn):柑橘分選線從漏檢8%壓到1.5%的完整方案)
農(nóng)產(chǎn)品分選線上的AI檢測到底能不能打我用一個真實項目給大伙兒驗證了一遍。這條產(chǎn)線我前后跟了一個多月從方案設計、數(shù)據(jù)采集、模型訓練一路干到產(chǎn)線部署最終的結(jié)果比預期還穩(wěn)檢測速度從原來人工目檢為主的混線狀態(tài)提升了3倍以上漏檢率從6%~8%直接壓到1.5%以下。這篇文章不吹方案只復盤這一路怎么選型、怎么訓練模型、怎么排坑給準備上農(nóng)產(chǎn)品AI檢測的同行一個完整可參考的實戰(zhàn)樣本。1. 項目背景與目標拆解為什么非要上AI檢測1.1 傳統(tǒng)人工目檢的瓶頸比想象中更嚴重農(nóng)產(chǎn)品檢測這個事聽起來簡單做起來全是細節(jié)。我這次做的項目是一家水果初加工企業(yè)的柑橘分選線主要檢測碰壓傷、霉變、腐爛、果梗殘留這幾類瑕疵。以前的流程是果品從分選機上來之后經(jīng)過一條皮帶靠幾個老師傅站在工位旁邊用肉眼快速挑出壞果。產(chǎn)線的物理節(jié)拍是1秒過5個果左右人工目檢在這種速度下根本反應不過來。老師傅平均一個人一分鐘能仔細看大概60到80個果但產(chǎn)線速度提上去之后實際就是“看一眼抓一把”漏檢率常年游走在6%~8%趕上產(chǎn)地陰雨天氣多、病蟲害多發(fā)的時候漏檢率能沖到10%以上。企業(yè)最怕的不是多雇幾個人而是漏檢的壞果流入市場客訴和退貨帶來的損失遠比人工成本大得多。更麻煩的是質(zhì)量問題不可追溯。人工挑出來的壞果隨手一扔沒有記錄沒有標準同一個批次在不同班次、不同工人手里挑出來的標準可能完全不一樣。產(chǎn)量越大越混亂管理成本高客戶的信任度也會被一點點消耗掉。1.2 我們定的三個硬指標和驗收口徑這次項目的目標不能用“上AI、提效率”這種空話糊弄必須在一開始就把驗收標準釘死。我們和甲方反復對齊后定下了三個核心指標后面所有技術(shù)決策都圍繞這三條展開檢測節(jié)拍單相機工位檢測速度不低于每秒4個果合計整線處理速度比人工半自動混線提升至少2倍目標3倍漏檢率從現(xiàn)有的6%左右降到2%以下這是質(zhì)量問題屬于紅線指標誤檢率控制在3%以內(nèi)。誤檢率太高也不行把好果當壞果踢出去損耗變大產(chǎn)線上會被罵死。漏檢率和誤檢率的定義項目一開始我們就和甲方確認清楚了避免驗收的時候扯皮。漏檢率未檢出的實際缺陷果數(shù)量 ÷ 抽樣中真實缺陷果總數(shù)量 × 100%。誤檢率被誤判為缺陷的健康果數(shù)量 ÷ 全部抽樣果數(shù)量 × 100%。2. 方案選型與整體思路為什么視覺AI能行2.1 傳統(tǒng)圖像處理算法為什么搞不定農(nóng)產(chǎn)品立項調(diào)研的時候我們最先考慮的不是深度學習而是傳統(tǒng)圖像處理方案畢竟開發(fā)成本低、部署輕。但實測下來發(fā)現(xiàn)農(nóng)產(chǎn)品表面太不“規(guī)矩”了。柑橘表面的顏色紋理復雜不同品種、不同成熟度、不同產(chǎn)地的果皮底色差異很大。新鮮傷疤和老疤痕在灰度圖和RGB圖上看邊界模糊傳統(tǒng)的閾值分割、邊緣檢測、形態(tài)學處理連最基礎的缺陷區(qū)域分割都很難穩(wěn)定完成。以碰壓傷為例剛發(fā)生的碰壓傷在果皮上只是一小塊顏色加深的區(qū)域和正常的果皮顏色過渡非常平滑局部對比度極低。用固定閾值一類的算法去測要么全部漏掉要么把大量正常果皮上的斑點、花斑誤判成缺陷。表面反光也是個頭疼問題柑橘果皮自帶一層蠟質(zhì)在光照下形成高光區(qū)域傳統(tǒng)算法很容易在高光邊緣產(chǎn)生假邊界誤檢率直接失控。所以方案最終還是鎖定在深度學習視覺模型上。深度學習模型對紋理、顏色、形態(tài)的抽象能力遠強于手工特征能學到“碰壓傷雖然顏色接近果皮但紋理走向和局部梯度特征不同”這類潛層規(guī)律。簡單說傳統(tǒng)算法是在拿尺子量“標準的圓”AI是在學“什么樣的圓受過傷”后者更適合農(nóng)產(chǎn)品這種非標對象。2.2 硬件選型相機、光源、算力怎么配硬件選型這塊我踩了好幾個坑先說結(jié)論農(nóng)產(chǎn)品產(chǎn)線檢測光源比相機重要算力比模型大小重要。相機用的彩色工業(yè)相機分辨率500萬像素幀率不低于30fps。柑橘這類圓形水果單個果徑在60到90mm500萬像素在單果尺寸上進行缺陷識別完全夠用。太高分辨率的相機反而拖累處理速度沒必要。鏡頭配的是16mm定焦工業(yè)鏡頭焦距定死光圈優(yōu)先保證景深覆蓋果體表面弧面防止邊緣失焦。光源這套系統(tǒng)最難的點就在光源。柑橘是球形表面直射光會產(chǎn)生大面積高光反射影響缺陷識別。我們試了環(huán)形光、條光、同軸光最后選了暗場反射加雙側(cè)條形光的組合讓光線盡量均勻鋪開同時把高光區(qū)域控制在果體邊緣很小范圍內(nèi)。后續(xù)實測發(fā)現(xiàn)光源角度差一度漏檢率可能差一個百分點。工控機用的是高性能工控機加獨立GPU模型推理放在GPU上跑。CPU扛模型推理在工業(yè)場景下基本不可行后面詳說。2.3 檢測任務清單和判定標準的對齊農(nóng)產(chǎn)品缺陷的類型非常多不能眉毛胡子一把抓。我們和企業(yè)品控團隊反復確認把檢測目標收斂為四類核心缺陷霉變、腐爛、碰壓傷、果梗殘留。這幾類的優(yōu)先級也不一樣。霉變和腐爛屬于嚴重缺陷漏檢就是質(zhì)量事故優(yōu)先級最高判定標準從嚴碰壓傷是常規(guī)缺陷允許輕傷但不允許重度碰傷和滲汁果梗殘留屬于外觀等級問題判定標準松一些。這里有個經(jīng)驗檢測范圍和品控標準一定要在啟動項目前寫清楚。如果一開始不把缺陷分級、判定尺度確認清楚后面模型訓練、調(diào)試閾值時就會反復推翻重來浪費至少一周時間。3. 數(shù)據(jù)準備與模型訓練項目最重的工程量3.1 樣本采集必須去產(chǎn)線真實環(huán)境下拍模型訓練繞不開數(shù)據(jù)而農(nóng)產(chǎn)品檢測項目最容易翻車的地方恰恰是數(shù)據(jù)采集階段。很多人圖省事用手機在辦公室拍幾張壞果照片或者直接在網(wǎng)上找圖庫這種數(shù)據(jù)訓練出的模型到了產(chǎn)線基本就是廢的。工業(yè)相機、暗場光、皮帶運動狀態(tài)這些條件下的成像效果和手機完全不同。產(chǎn)線環(huán)境里果體在快速移動有運動模糊有背景干擾有灰塵顆粒這些噪聲在真實環(huán)境下很常見但如果訓練數(shù)據(jù)里沒有這些噪聲模型就學不會區(qū)分“瑕疵”和“環(huán)境噪聲”。所以我在項目里堅持要求樣本采集必須到產(chǎn)線上做直接架好相機和光源用和正式運行一致的參數(shù)拍攝把所有真實環(huán)境中的干擾因素拍進去。我們總共采集了2萬多個柑橘樣本連續(xù)拍了四天覆蓋不同批次的果實。采集回來的圖像再經(jīng)過篩選和清洗去除模糊、遮擋、異常光照的圖像最后剩下約18000張可用圖像。3.2 標注規(guī)則的制定比標注本身更關(guān)鍵標注這個環(huán)節(jié)看著簡單其實特別容易被低估。我見過很多項目敗在標注不規(guī)范上同樣一個缺陷這個人框了那個人沒框或者有的人把整果框進去有的人只框局部模型訓練出來之后表現(xiàn)飄忽不定。我們定了這么幾條標注規(guī)則一是必須按缺陷類別單獨打標簽不能標注“壞果”這種大而全的類別二是單個果上有多個缺陷時每個缺陷單獨標注不允許合并框三是只標缺陷區(qū)域不標整個果子四是爭議樣本由品控人員最終裁決標注員不能自行決定。此外還補充了一個關(guān)鍵策略對嚴重缺陷樣本做了超額標注比如霉變和腐爛類我們要求優(yōu)先保證全量標注哪怕樣本再少也不能漏標。后來模型的表現(xiàn)證明了這一步非常值因為漏標一個嚴重缺陷樣本模型就可能在推理時把一個腐爛果當成好果放過去。3.3 模型選型與訓練參數(shù)輕量級YOLO足夠用模型選型上我們測試了多個分割和檢測網(wǎng)絡。農(nóng)產(chǎn)品缺陷識別有兩個技術(shù)路徑一是檢測框二是分割掩碼。分割掩碼的定位精度更高但部署速度慢檢測框的速度快對硬件要求低。經(jīng)過權(quán)衡我最終選了基于YOLO架構(gòu)的目標檢測模型采用小體量版本在GPU上推理時延控制在20毫秒以內(nèi)。很多人非要上復雜的大模型覺得準確率高。但工業(yè)產(chǎn)線的現(xiàn)實很殘酷推理速度不達標準確率再高也白搭。我們用YOLO小模型加合理的訓練策略mAP50就能做到93%以上完全夠用。訓練參數(shù)的關(guān)鍵項我直接列一下輸入分辨率640x640和工業(yè)相機原始ROI區(qū)域匹配訓練輪次200輪早停在30輪無增益時觸發(fā)優(yōu)化器SGD配合余弦退火調(diào)度器批大小32數(shù)據(jù)增強Mosaic增強、HSV擾動、隨機翻轉(zhuǎn)、隨機旋轉(zhuǎn)少量角度。Mosaic增強對農(nóng)產(chǎn)品檢測特別有效因為單張圖像里果實數(shù)量有限Mosaic把多張圖拼接成一張相當于在一張圖里同時提供多個果的上下文信息模型對密集場景和小目標的適應能力明顯提高。3.4 閾值調(diào)優(yōu)置信度、NMS、類別權(quán)重的配合訓練完模型之后很多新手直接拿去部署結(jié)果漏檢率壓不下去誤檢率又高得離譜。問題多半出在推理閾值沒有結(jié)合實際產(chǎn)線場景調(diào)優(yōu)。我們做了一輪系統(tǒng)性的閾值掃描實驗。在驗證集上分別調(diào)整置信度閾值和NMS的IoU閾值畫出了漏檢率和誤檢率的權(quán)衡曲線。默認置信度閾值是0.5但在這個項目里默認值表現(xiàn)并不理想。把置信度閾值降到0.3之后漏檢率明顯下降而誤檢率上升幅度還在可控范圍內(nèi)進一步降到0.2漏檢率改善不明顯誤檢率卻大幅上升果斷放棄。最終采用0.3作為主閾值。為了平衡不同缺陷類別的偏置我們給嚴重缺陷類霉變、腐爛設置了較低的類別置信度閾值比如0.25確保這類缺陷優(yōu)先檢出給果梗殘留設置了更高的0.4降低誤檢率。這個策略不用重新訓練模型純推理側(cè)調(diào)整就能立竿見影。這里有一個訓練細節(jié)要提醒嚴重缺陷樣本天然少類別不均衡會導致模型對少數(shù)類的學習和檢出能力偏弱。除了常規(guī)的類別權(quán)重設置我們還對嚴重缺陷的樣本做了過采樣和額外的旋轉(zhuǎn)縮放增強保證模型見過足夠多的變化。4. 部署到產(chǎn)線的實操過程與速度優(yōu)化4.1 部署環(huán)境的三大塊采集、推理、剔除聯(lián)動整個系統(tǒng)部署到產(chǎn)線后核心鏈路是相機采集圖像、GPU推理、剔除機構(gòu)動作三塊。采集端由工業(yè)相機和光電傳感器觸發(fā)果體經(jīng)過光電位置時觸發(fā)相機抓拍避免連續(xù)運行時的無效幀浪費算力。推理端運行在工控機GPU上模型輸入640x640的圖像輸出缺陷類別和位置框。剔除端接到PLC信號當推理結(jié)果命中缺陷類別時PLC延時控制氣嘴吹掉壞果。光電傳感器觸發(fā)這個細節(jié)特別值得說。一開始我們沒接光電觸發(fā)相機一直連續(xù)拍攝GPU算力被大量無果圖像占用推理隊列堆滿速度根本提不上來。后來改了觸發(fā)邏輯只有果體通過檢測區(qū)域時才抓拍一幀GPU負載立刻降下來一大截。4.2 速度卡在3倍關(guān)口時的三個優(yōu)化手段項目前期實測節(jié)拍在每秒3個果左右就是上不去了離每秒4個果的目標還差一截。逐個排查后發(fā)現(xiàn)瓶頸不在模型推理本身而在整條數(shù)據(jù)鏈路。第一個瓶頸是圖像解碼。工業(yè)相機直接輸出高分辨率原始格式圖像傳出來后由CPU做解碼和預處理這一步耗掉了將近30毫秒比GPU推理本身還慢。我們把原始格式換成壓縮率適中的無損壓縮格式傳輸解碼時間降了一半。第二個瓶頸是預處理里的幾何變換。輸入圖像需要做縮放和填充到640x640默認實現(xiàn)每次新建內(nèi)存反復分配釋放。改成預分配緩存多線程并行執(zhí)行縮放和歸一化預處理耗時從15毫秒壓到5毫秒以下。第三個瓶頸是推理沒有用TensorRT加速。我們起初用模型原生的推理接口跑速度雖然能接受但距離目標節(jié)拍差一口氣。轉(zhuǎn)成TensorRT FP16精度后推理時延從22毫秒降到11毫秒整整快了一倍。對于中小企業(yè)不需要上昂貴的高端顯卡一張常規(guī)算力級別的GPU就能輕松應對。4.3 整線節(jié)拍實測3倍不是吹出來的優(yōu)化完畢后我們做了連續(xù)三天的滿負荷實測。產(chǎn)線以1.0米/秒的皮帶速度運行單相機檢測工位的實際處理能力達到每秒5個柑橘整線的分選吞吐量比原來的“人工半自動混線”狀態(tài)提升了3.2倍。漏檢率方面每天隨機抽檢1000個過檢果人工復核缺陷三天的漏檢率分別為1.6%、1.4%、1.2%平均值約1.4%。誤檢率穩(wěn)定在2.5%左右。對比數(shù)據(jù)我整理成了下表方便直觀參考指標原人工半自動混線AI檢測系統(tǒng)檢測速度約1.2個果/秒/人約5個果/秒/工位漏檢率6%~8%1.2%~1.6%誤檢率約5%主觀判斷無量化約2.5%檢測標準一致性波動大統(tǒng)一閾值穩(wěn)定過程數(shù)據(jù)記錄無全量圖像結(jié)果可追溯5. 常見問題與排查技巧實錄5.1 漏檢率一直降不下來問題出在哪如果模型訓練完漏檢率還是高先別急著加數(shù)據(jù)或換模型按優(yōu)先級排查下面幾個點光源是否均勻覆蓋整個視野。我調(diào)試時就遇到過曝光不均的問題果體走向定位在暗角缺陷特征直接丟失。解決辦法是調(diào)整光源角度并增加遮光罩減少環(huán)境光干擾。運動模糊是否嚴重。皮帶速度過快時曝光時間太長會導致果體邊緣發(fā)虛細小缺陷被糊掉。把曝光時間從800微秒縮短到500微秒后圖像清晰度明顯改善。旋轉(zhuǎn)嚴重缺陷的樣本比例是否不足。腐爛和霉變的早期樣品很難識別如果訓練數(shù)據(jù)里早中期樣本太少模型只能學會晚期嚴重腐爛漏檢率自然壓不下去。補拍一批早期霉變樣本重新訓練后改善明顯。5.2 誤檢率過高別急著調(diào)高置信度閾值誤檢率高大部分人會直接調(diào)高閾值但很容易把漏檢率又帶上去。正確做法是先從數(shù)據(jù)側(cè)找原因。我遇到過誤檢集中在某幾個批次果上的情況原因出在數(shù)據(jù)增強做得不夠模型對特定背景圖案特別敏感。檢查后發(fā)現(xiàn)產(chǎn)線皮帶上有固定紋理和小水漬模型把這些當成了缺陷。解決辦法是把干凈的皮帶圖像加入訓練集并標注為背景類別讓模型學會忽略背景誤檢率直接降了一個百分點。5.3 現(xiàn)場長期運行的維護坑農(nóng)產(chǎn)品產(chǎn)線環(huán)境比較惡劣粉塵、水汽、震動都不可忽視。鏡頭表面隔三差五就會被塵土遮掩即便肉眼看不到成像質(zhì)量也在緩慢下降。我們配置了一個簡單的定期清潔流程每4小時用氣槍清潔一次鏡頭和光源并在軟件里寫了圖像清晰度監(jiān)測指標一旦整體圖像銳度下降超過設定值就報警。這招救過一次大問題某次光源角度被維護工人碰到導致光源分布異常如果不是清晰度監(jiān)測報警可能整個白班都要抱著問題數(shù)據(jù)跑。5.4 經(jīng)驗速查表問題排查順序常用解法漏檢率高1. 光源 2. 曝光 3. 訓練數(shù)據(jù) 4. 閾值光源調(diào)整、縮短曝光、補樣本、調(diào)類別閾值誤檢率高1. 背景干擾 2. 樣本均衡 3. 閾值后處理加背景樣本、過采樣、調(diào)置信度閾值速度不達標1. 解碼 2. 預處理 3. 推理加速壓縮格式、緩存復用、TensorRT/OpenVINO識別時好時壞1. 環(huán)境光 2. 鏡頭清潔 3. 硬件穩(wěn)定性遮光罩、定期清潔、監(jiān)控圖像質(zhì)量寫在最后的實戰(zhàn)體會這套系統(tǒng)上線后跑了一個多月給我最大的感受是農(nóng)產(chǎn)品AI檢測并不是一個“模型訓練完就能躺贏”的活真正決定成敗的是對產(chǎn)線場景的理解和數(shù)據(jù)閉環(huán)的建設。舉個實際的例子模型跑起來之后我們每天都會把當天檢出結(jié)果和人工復檢結(jié)果做對比每周抽一天把模型漏檢的圖像找出來補進訓練集做增量訓練。這個滾雪球式的數(shù)據(jù)閉環(huán)才是漏檢率能持續(xù)穩(wěn)定在1.5%以下的核心原因。另外一個建議給準備上項目的同行一定要在項目早期就把“標準”這個東西想清楚。標準不只是技術(shù)團隊內(nèi)部的指標更要是品控團隊、產(chǎn)線操作工、設備維護人員都能統(tǒng)一理解的判定口徑。這個對齊工作花的時間會在調(diào)試階段加倍還回來。如果你也正在做類似的分選產(chǎn)線改造希望這篇實戰(zhàn)記錄能幫你少踩幾個坑。農(nóng)產(chǎn)品質(zhì)檢的想象空間很大從柑橘到蘋果、土豆、番茄從分選線到采收、倉儲環(huán)節(jié)只要把底層方案吃透換產(chǎn)品只是數(shù)據(jù)層面的問題算法和工程鏈路是可以復用的。