:從環(huán)境搭建到TensorRT部署)
簡介面向工業(yè)質(zhì)檢、計算機(jī)視覺初學(xué)者及有項目落地需求的開發(fā)者這套YOLOv8焊縫質(zhì)量好壞檢測方案提供訓(xùn)練好的模型、評估曲線與標(biāo)注數(shù)據(jù)集。模型已訓(xùn)練完成附帶精確率-召回率曲線、損失曲線等結(jié)果可直接用于焊縫缺陷識別也可作為遷移學(xué)習(xí)基線數(shù)據(jù)集使用標(biāo)注工具對鋼材缺陷圖片進(jìn)行標(biāo)注圖片為jpg格式標(biāo)簽分為xml與txt兩種并分文件夾存放方便接入不同框架或二次標(biāo)注。壓縮包共2000個文件以txt標(biāo)簽、md說明文檔、jpg圖像、Python腳本及yaml配置為主另有少量C源碼與前端演示頁面整體約155.52MB結(jié)構(gòu)清晰。目前已有224人學(xué)習(xí)。借助訓(xùn)練好的權(quán)重與配套腳本用戶可快速復(fù)現(xiàn)檢測流程進(jìn)一步調(diào)參或擴(kuò)展缺陷類別適合課程設(shè)計、畢業(yè)設(shè)計和工業(yè)質(zhì)檢項目預(yù)研。1. 焊接質(zhì)量檢測為什么值得用 YOLOv8 從頭做一遍焊縫質(zhì)量檢測在工廠里通??績煞N老辦法老師傅拿手電筒肉眼盯或者用傳統(tǒng)圖像處理寫一堆閾值規(guī)則。肉眼盯的問題是人會疲勞焊縫紋理稍微反光或者飛濺多漏檢率就上去了傳統(tǒng)圖像處理的問題更明顯——光照一變、焊縫位置稍微偏移寫死的參數(shù)立刻失效換個工件就要重新調(diào)。YOLOv8 在焊縫場景里真正解決的是「特征提取的魯棒性」。它不像傳統(tǒng)算法那樣依賴你手工定義邊緣、灰度、梯度特征而是把「什么算好焊縫、什么算壞焊縫」交給卷積網(wǎng)絡(luò)自己去學(xué)。所謂壞焊縫常見的就是咬邊、未熔合、氣孔、裂紋、焊瘤和飛濺粘連這些缺陷在視覺上和正常魚鱗紋的差異其實非常微妙靠灰度閾值根本分不開。用 ultralytics 框架做這件事好處是訓(xùn)練、驗證、導(dǎo)出一條龍不用自己拼裝推理代碼數(shù)據(jù)到位之后三個小時就能看到第一版驗證集指標(biāo)。這套方案適合誰如果你是做質(zhì)檢設(shè)備集成、機(jī)器人焊接視覺引導(dǎo)或者只是畢業(yè)設(shè)計想做一個能演示的檢測系統(tǒng)YOLOv8 都是目前性價比最高的落地路線。不需要自己有 GPU 集群一張消費(fèi)級顯卡就能訓(xùn)出可用的焊縫缺陷模型。整個鏈路就是四步準(zhǔn)備帶標(biāo)注的數(shù)據(jù)、配置環(huán)境、訓(xùn)練出權(quán)重、導(dǎo)出部署。下面我把每一步拆開講包括參數(shù)怎么給、數(shù)據(jù)怎么標(biāo)、以及那些會讓你訓(xùn)出廢模型的坑。2. 搭好 ultralytics 運(yùn)行環(huán)境CPU 和 GPU 兩條路的取舍2.1 環(huán)境安裝的版本雷區(qū)Python 和 CUDA 必須對齊我見過太多人卡在 YOLOv8 跑不通這一步最后發(fā)現(xiàn)不是代碼問題是環(huán)境問題。ultralytics 對 Python 版本有硬性要求3.8 到 3.11 之間是官方測試過的范圍Python 3.12 以上裝包能裝上但跑起來會出現(xiàn)莫名其妙的算子報錯。CUDA 方面如果你用的是 NVIDIA 顯卡建議直接裝 CUDA 11.8 配套的 PyTorch不要用系統(tǒng)自帶的 CUDA 12 去硬配老顯卡。# 創(chuàng)建獨立虛擬環(huán)境避免污染系統(tǒng) Python conda create -n yolov8-weld python3.10 -y conda activate yolov8-weld # 安裝 PyTorch注意這里的 cu118 對應(yīng) CUDA 11.8 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118 # 安裝 ultralytics 框架它會自動帶 ultralytics-main 包結(jié)構(gòu)和 yolo CLI pip install ultralytics這里有一個容易踩錯的地方不要用pip install yolov8這個包名是第三方老倉庫和 ultralytics 官方框架完全不同。正確做法是裝ultralytics裝完以后在 Python 里import ultralytics命令行里用yolo作為統(tǒng)一入口。我一般裝完之后立刻跑一句yolo predict modelyolov8n.pt sourcehttps://ultralytics.com/images/bus.jpg驗證環(huán)境和權(quán)重下載鏈路是否通暢。第一次運(yùn)行會下載預(yù)訓(xùn)練權(quán)重如果這一步卡住說明你的網(wǎng)絡(luò)環(huán)境可能需要配置鏡像源推薦把 pip 源換成清華或阿里云鏡像再試。2.2 CPU 版本能跑但只能做驗證別指望訓(xùn)練速度熱詞里很多人搜「ubuntu20.04搭建yolov8環(huán)境cpu版本」說明 CPU 跑 YOLOv8 是真實需求。結(jié)論是推理可以用 CPU 完成一張 640 分辨率的圖片推理耗時大約 1-3 秒取決于你的處理器是幾代 i5 還是 i7訓(xùn)練則不建議哪怕是最小的 yolov8n 模型用 CPU 訓(xùn)練 100 個 epoch 可能需要十幾個小時。# CPU 推理示例對單張焊縫圖片做缺陷檢測 yolo predict modelruns/train/weld_det/weights/best.pt \ sourcetest_images/weld_001.jpg \ devicecpu \ conf0.35 \ saveTruedevicecpu是訓(xùn)練好的權(quán)重在無 GPU 機(jī)器上推理的關(guān)鍵參數(shù)。conf0.35表示置信度閾值焊縫缺陷檢測里我建議不要設(shè)太高缺陷目標(biāo)往往比人、車這種常見目標(biāo)小網(wǎng)絡(luò)輸出的置信度天然偏低0.35 是個相對穩(wěn)妥的起點。saveTrue會把標(biāo)注了缺陷框的結(jié)果圖保存到runs/detect/predict目錄這個目錄是 ultralytics 自動創(chuàng)建的不需要手動建。2.3 數(shù)據(jù)目錄結(jié)構(gòu)ultralytics-main 約定的布局ultralytics 的數(shù)據(jù)加載不是靠你寫一堆數(shù)據(jù)讀取代碼而是靠目錄結(jié)構(gòu)和 YAML 文件配置。你的焊接缺陷數(shù)據(jù)集sts-hanfeng-data解壓之后需要整理成下面的結(jié)構(gòu)否則訓(xùn)練直接報錯找不到圖片datasets/ ├── weld_data/ │ ├── images/ │ │ ├── train/ # 訓(xùn)練集圖片 │ │ └── val/ # 驗證集圖片 │ ├── labels/ │ │ ├── train/ # 訓(xùn)練集 YOLO 格式標(biāo)簽 │ │ └── val/ # 驗證集 YOLO 格式標(biāo)簽 │ └── weld.yaml # 數(shù)據(jù)配置文件路徑和類別都在這里weld.yaml文件是整個訓(xùn)練的「黑匣子鑰匙」里面定義了圖片路徑和類別名稱。我遇到過有人把 YAML 文件放在項目根目錄而不是數(shù)據(jù)集目錄下然后相對路徑寫錯導(dǎo)致訓(xùn)練器找不到數(shù)據(jù)。最穩(wěn)的寫法是直接用絕對路徑雖然可移植性差一些但第一次跑通比什么都重要。# weld.yaml 內(nèi)容示例 path: /home/user/datasets/weld_data # 數(shù)據(jù)集根目錄的絕對路徑 train: images/train # 訓(xùn)練圖片的相對路徑 val: images/val # 驗證圖片的相對路徑 nc: 4 # 類別數(shù)量假設(shè)檢測 4 類缺陷 names: [under_cut, lack_fusion, porosity, spatter] # 類別名稱3. 焊縫缺陷數(shù)據(jù)標(biāo)注labelme 打標(biāo)到 YOLO 格式的轉(zhuǎn)換鏈路3.1 標(biāo)什么四類常見缺陷的特征定義焊縫質(zhì)量檢測不是簡單分「好」「壞」二分類就完了。實際生產(chǎn)里你需要知道壞在哪、是什么類型的壞這樣返修人員才能對癥下藥。我建議默認(rèn)標(biāo)四類咬邊under_cut焊趾處母材被熔化形成凹槽未熔合lack_fusion焊接熔深不足導(dǎo)致焊縫與母材之間有間隙氣孔porosity表面或內(nèi)部的氣泡坑飛濺飛刺spatter焊渣亂濺形成的顆粒附著。這四類覆蓋了焊接現(xiàn)場最常見的返修原因也是 YOLOv8 在焊縫數(shù)據(jù)上相對容易學(xué)出來的特征。標(biāo)注工具我推薦用 labelme它輸出的 JSON 格式便于檢查和二次修正。labelme 安裝簡單命令行啟動后界面就是直觀的畫框工具。pip install labelme labelme --labels welds.txt --nodata--labels welds.txt指定類別的文本文件每一行一個類別名優(yōu)點是下拉菜單里直接選類別不會手打出錯。--nodata表示不保存圖片數(shù)據(jù)到 JSON 文件里能省不少磁盤空間。標(biāo)注時有個技巧別把框畫得太緊貼著缺陷邊緣YOLO 訓(xùn)練時錨框計算需要一定的上下文背景框稍微留 2-3 像素的余量模型收斂更好。3.2 從 labelme 的 JSON 到 YOLO 的 TXT寫一個轉(zhuǎn)換腳本labelme 輸出的是包含多邊形坐標(biāo)的 JSON而 YOLO 需要的是歸一化的中心點加寬高格式。這一步必須寫腳本批量轉(zhuǎn)換手工算坐標(biāo)能把人算瘋掉。import json import os import glob from pathlib import Path # 類別映射表順序必須和 weld.yaml 里的 names 對應(yīng) category_map {under_cut: 0, lack_fusion: 1, porosity: 2, spatter: 3} def convert_labelme_to_yolo(json_path, output_dir): with open(json_path, r, encodingutf-8) as f: data json.load(f) # labelme 保存的圖片寬高信息 img_w data[imageWidth] img_h data[imageHeight] lines [] for shape in data[shapes]: label shape[label] if label not in category_map: continue class_id category_map[label] # labelme 框坐標(biāo)是 [[x1,y1],[x2,y2]] 格式 points shape[points] x1 min(p[0] for p in points) y1 min(p[1] for p in points) x2 max(p[0] for p in points) y2 max(p[1] for p in points) # 計算中心點和寬高并歸一化 cx (x1 x2) / 2 / img_w cy (y1 y2) / 2 / img_h w (x2 - x1) / img_w h (y2 - y1) / img_h lines.append(f{class_id} {cx:.6f} {cy:.6f} {w:.6f} {h:.6f}) # 輸出文件按圖片同名命名擴(kuò)展名改 txt out_path Path(output_dir) / (Path(json_path).stem .txt) with open(out_path, w) as f: f.write(\n.join(lines)) # 批量轉(zhuǎn)換某個目錄下所有 JSON json_files glob.glob(labels_json/*.json) os.makedirs(labels_yolo, exist_okTrue) for jf in json_files: convert_labelme_to_yolo(jf, labels_yolo)這個腳本有幾個關(guān)鍵細(xì)節(jié)。第一YOLO 格式的坐標(biāo)值必須在 0 到 1 之間所以中心點和寬高全部除以圖片寬高。第二如果你的標(biāo)注框坐標(biāo)有負(fù)數(shù)物體在圖片邊緣被截斷需要做截斷處理否則訓(xùn)練時報錯坐標(biāo)越界。第三category_map的類別順序一旦定下來就不要改因為weld.yaml里nc和names的順序必須和這里的類 ID 完全一致否則模型學(xué)出來的標(biāo)簽全錯位。我見過有人改了類別順序忘了改映射表訓(xùn)練出來檢測結(jié)果張冠李戴這就是典型的黑匣子問題模型沒毛病毛病出在標(biāo)簽錯位。3.3 數(shù)據(jù)量多少夠用從幾十張到幾百張的實戰(zhàn)參考關(guān)于焊縫缺陷檢測的數(shù)據(jù)量老實說沒有一個絕對的數(shù)字。如果每個類別的樣本數(shù)在 50 張以下YOLOv8 基本學(xué)不出穩(wěn)定特征達(dá)到 100-200 張每類加上合理的數(shù)據(jù)增強(qiáng)訓(xùn)練出來的模型在固定工況下已經(jīng)能實際使用了。焊縫檢測的數(shù)據(jù)獲取在工廠里其實是相對容易的因為焊接件可以重復(fù)焊接、重復(fù)拍照不像自動駕駛那種場景數(shù)據(jù)那么難采。數(shù)據(jù)增強(qiáng)是彌補(bǔ)樣本不足的關(guān)鍵手段。ultralytics 內(nèi)置了增強(qiáng)參數(shù)在訓(xùn)練命令里直接指定即可。對于焊縫檢測我建議這樣配hsv_h0.015做輕微色相偏移模擬不同焊材的反光差異fliplr0.5做水平翻轉(zhuǎn)焊縫缺陷在左右方向上沒有物理意義差異翻轉(zhuǎn)不會產(chǎn)生錯誤標(biāo)簽scale0.3模擬遠(yuǎn)近拍攝距離變化。不要開mosaic到默認(rèn)的 1.0焊縫圖片拼接起來會生成很多不自然的邊界紋理影響小缺陷的檢測建議調(diào)到 0.5 左右。4. 訓(xùn)練參數(shù)詳解從預(yù)訓(xùn)練權(quán)重到焊縫微調(diào)4.1 預(yù)訓(xùn)練權(quán)重怎么選n/s/m/l/x 的取舍YOLOv8 的預(yù)訓(xùn)練權(quán)重有 n、s、m、l、x 五個型號從 n 到 x 模型參數(shù)量遞增檢測精度遞增推理速度遞減。很多人一上來就選 x 號模型追求最高精度結(jié)果顯存爆掉或者訓(xùn)練速度慢到懷疑人生。焊縫檢測屬于目標(biāo)較小、背景相對固定的場景用 s 或者 m 是性價比最高的選擇。# 使用 yolov8m 預(yù)訓(xùn)練權(quán)重開始微調(diào) yolo train modelyolov8m.pt dataweld.yaml epochs150 imgsz640 batch8 device0modelyolov8m.pt會自動下載這個預(yù)訓(xùn)練權(quán)重文件然后加載到內(nèi)存里開始訓(xùn)練。以它作為起點網(wǎng)絡(luò)的前幾層已經(jīng)學(xué)會了輪廓、邊緣、紋理等基礎(chǔ)特征我們只需要微調(diào)后面的檢測頭讓網(wǎng)絡(luò)適應(yīng)焊縫缺陷的語義。如果從零開始訓(xùn)練即不指定預(yù)訓(xùn)練權(quán)重在焊縫這種小眾數(shù)據(jù)集上往往需要更多數(shù)據(jù)和更長訓(xùn)練時間才能收斂效果還不一定好。batch8是 8GB 顯存顯卡的配置如果你的顯卡是 12GB 顯存可以開到 16。4.2 訓(xùn)練過程怎么看損失曲線和驗證集的坑訓(xùn)練開始后ultralytics 會在終端實時打印每個 epoch 的box_loss、cls_loss、dfl_loss和metrics/precision(B)、metrics/recall(B)、mAP50(B)、mAP50-95(B)。很多人只盯著 mAP 值看其實訓(xùn)練過程中的損失值更能說明問題。box_loss 表示預(yù)測框和真實框的坐標(biāo)偏差cls_loss 表示分類錯誤的損失兩個損失都在下降說明模型在學(xué)習(xí)如果 loss 降了但 mAP 不漲大概率是你的標(biāo)簽有錯誤或者類別不均衡??梢暬瘬p失曲線的做法常見的是從runs/detect/train/目錄下的results.csv文件提取數(shù)據(jù)在訓(xùn)練結(jié)束后用 matplotlib 繪制。曲線圖的觀察要點是訓(xùn)練損失持續(xù)下降但驗證損失在第 80 個 epoch 左右開始反彈說明過擬合已經(jīng)開始可以提前終止訓(xùn)練并回滾到驗證損失最低的那個 epoch 的權(quán)重。ultralytics 會自動保存best.pt和last.pt兩個權(quán)重文件best.pt就是驗證集上 mAP 最高的那個 checkpoint訓(xùn)練結(jié)束直接用best.pt做推理即可。4.3 焊縫檢測必調(diào)的三個訓(xùn)練參數(shù)imgsz、conf、iou這三個參數(shù)是決定焊縫檢測實際效果的命門。imgsz表示訓(xùn)練時網(wǎng)絡(luò)的輸入分辨率。焊縫缺陷中的氣孔和咬邊屬于小目標(biāo)1024 分辨率比 640 分辨率能多檢測出大約 5-8% 的小缺陷但顯存占用和訓(xùn)練時間會明顯增加。如果你的顯存是 8GB建議用 640加上數(shù)據(jù)增強(qiáng)彌補(bǔ)如果是 12GB 以上直接上 1024。conf是推理階段的置信度閾值默認(rèn)是 0.25。焊縫場景里我建議設(shè)到 0.35-0.4 之間太低會輸出一堆飛濺誤檢太多框沒法看太高則會漏掉一些真實缺陷因為網(wǎng)絡(luò)對缺陷的置信度普遍不如對行人車輛高。iou是 NMS 的非極大值抑制閾值默認(rèn)是 0.7。焊縫缺陷經(jīng)常成片出現(xiàn)比如一串氣孔緊密排布如果 IOU 閾值太高NMS 可能把相鄰的幾個框合并成一個導(dǎo)致漏檢。遇到這種情況可以把iou降到 0.5保留更多重疊的檢測框。# 更完整的訓(xùn)練命令示例 yolo train modelyolov8m.pt \ dataweld.yaml \ epochs200 \ imgsz1024 \ batch8 \ patience30 \ optimizerAdamW \ lr00.005 \ hsv_h0.015 \ hsv_s0.3 \ hsv_v0.3 \ fliplr0.5 \ scale0.3 \ mosaic0.5 \ device0patience30表示連續(xù) 30 個 epoch 驗證指標(biāo)沒提升就自動停止訓(xùn)練這是對時間的節(jié)省也防止過擬合越來越嚴(yán)重。optimizerAdamW在小型數(shù)據(jù)集上比默認(rèn)的 SGD 收斂更快更穩(wěn)。lr0初始學(xué)習(xí)率設(shè)置為 0.005如果損失曲線震蕩厲害優(yōu)先把學(xué)習(xí)率降到 0.002 再試。5. 焊縫檢測避坑指南5 個讓你白白浪費(fèi)訓(xùn)練時間的坑5.1 缺陷類別不平衡導(dǎo)致模型只學(xué)會飛濺檢測現(xiàn)象訓(xùn)練跑完驗證集精度看著還行但實際檢測時飛濺的召回率很高而氣孔幾乎一個都檢不出來。用 mAP 看整體數(shù)值像是在進(jìn)步但分類別看指標(biāo)氣孔的 AP 幾乎為零。原因你的數(shù)據(jù)集里飛濺圖片占了 70% 以上氣孔只有十幾張。YOLO 訓(xùn)練時按圖片采樣模型見多了飛濺自然更擅長擬合這個類別的分布。這是分類任務(wù)里經(jīng)典的樣本不均衡問題。解決優(yōu)先做數(shù)據(jù)擴(kuò)充把氣孔樣本通過旋轉(zhuǎn)、裁剪、亮度調(diào)整擴(kuò)到和飛濺接近的數(shù)量。如果實在湊不齊就用 ultralytics 的class_weight參數(shù)調(diào)高樣本少的類別的損失權(quán)重。注意修改完數(shù)據(jù)后重新整理訓(xùn)練集和驗證集不能把同一張圖片既放進(jìn)訓(xùn)練集又放進(jìn)驗證集那屬于數(shù)據(jù)泄漏會讓指標(biāo)虛高但實際應(yīng)用翻車。5.2 標(biāo)簽和圖片沒有對齊txt 文件比圖片多或者少現(xiàn)象訓(xùn)練日志報錯assertion failed: labels.shape (n, 5)或者訓(xùn)練正常結(jié)束了但 mAP 一直是零。原因YOLO 要求每張圖片對應(yīng)一個同名 txt 標(biāo)簽文件標(biāo)簽文件名是圖片名去掉擴(kuò)展名加上.txt。我在實際項目中發(fā)現(xiàn)最常見的情況是 labelme 轉(zhuǎn)換腳本輸出時JSON 文件名里有中文或空格導(dǎo)致生成的 txt 文件名和圖片文件名對不上。YOLO 加載數(shù)據(jù)時按圖片名去找標(biāo)簽文件找不到就跳過這張圖但類別統(tǒng)計里仍然可能出錯。解決做一個腳本核對。遍歷images/train下的每張圖片檢查同名 txt 是否存在。所有沒有標(biāo)簽的圖片要么刪除要么補(bǔ)標(biāo)。同樣地labels/train下有多余的 txt 而對應(yīng)圖片不存在的直接刪掉。這個核對腳本幾十行就能寫完但能省下你排查半天的時間。5.3 推理時把「好焊縫」也框出來二分類思維害人現(xiàn)象模型訓(xùn)練完在正常焊縫上檢測出了大量缺陷框現(xiàn)場完全不可用。你把正常焊縫圖片放進(jìn)訓(xùn)練集了但這沒用。原因你只標(biāo)注了缺陷把無缺陷的圖片當(dāng)作背景但 YOLO 會在這些背景圖上強(qiáng)行找目標(biāo)。模型如果沒有見過「好焊縫」作為負(fù)樣本的概念就會把紋理正常的魚鱗紋反光當(dāng)作特征匹配。解決在標(biāo)注階段明確把正常焊縫定義為good類別并標(biāo)注出來或者專門收集一批完全無缺陷的焊縫圖片放進(jìn)數(shù)據(jù)集的訓(xùn)練集和驗證集圖片沒有對應(yīng) txt 標(biāo)簽時模型會將其視為背景樣本參與訓(xùn)練。建議至少加入 20% 的正常焊縫圖片比例太低模型學(xué)不好太高又稀釋了缺陷樣本的影響。5.4 顯存不足就改小 batch結(jié)果訓(xùn)練不穩(wěn)定現(xiàn)象訓(xùn)練時報錯CUDA out of memory你把 batch 從 16 改成 4 之后能跑了但損失曲線震蕩得像心電圖驗證集精度也上不去。原因過小的 batch 會導(dǎo)致梯度估計方差大模型參數(shù)更新方向不穩(wěn)定。YOLOv8 的 BN 層對小 batch 尤其不友好batch size 小于 8 時歸一化統(tǒng)計量失真導(dǎo)致收斂困難。解決最優(yōu)先的調(diào)整是降低輸入分辨率imgsz從 640 降到 512顯存占用能減少三分之一左右其次是換更小的模型從 m 換到 s最后才考慮減 batch。如果 512 分辨率加 s 模型還爆顯存就把梯度累積打開accumulate4每 4 個小 batch 累積一次梯度更新等效于 batch 做大了。5.5 部署時發(fā)現(xiàn) mAP 高但實際檢測速度慢到無法接受現(xiàn)象訓(xùn)練時 mAP0.5 到 0.95 看著不錯但部署到產(chǎn)線工控機(jī)上YOLOv8m 模型推理一幀要 300 毫秒完全跟不上流水線節(jié)拍。原因精度的提升是有代價的模型越大推理越慢。工控機(jī)的 GPU 往往比訓(xùn)練機(jī)器弱一個檔次或者根本沒有 GPU 只能用 CPU。解決訓(xùn)練完yolo train后用yolo export把權(quán)重導(dǎo)出成 TensorRT 或 ONNX 格式推理速度通常能提升一倍以上。導(dǎo)出前試一下yolov8s對比yolov8m精度可能只降 2-3 個點但速度能快接近一倍。用導(dǎo)出的 ONNX 文件做一次推理驗證確保檢測框位置和 PyTorch 版本一致再上產(chǎn)線。6. 用 TensorRT 導(dǎo)出焊縫模型把推理速度壓到實時的驗證技巧項目做到這一步模型已經(jīng)能用了接下來值得做的一件事是把權(quán)重文件從 PyTorch 格式導(dǎo)出成 TensorRT 引擎部署到 Jetson 或工控機(jī)上。熱詞里經(jīng)常有人搜「rk3588部署yolov8」說明嵌入式部署是焊縫檢測的真實需求方向。# 先用 ONNX 做中間格式 yolo export modelruns/train/weld_det/weights/best.pt formatonnx dynamicTrue # 再用 ONNX 轉(zhuǎn) TensorRT需要 Ubuntu 環(huán)境且已安裝 TensorRT trtexec --onnxbest.onnx \ --saveEngineweld_engine.trt \ --fp16 \ --workspace2048dynamicTrue允許 ONNX 運(yùn)行時動態(tài)輸入圖像尺寸這樣部署到不同分辨率設(shè)備時不用重新導(dǎo)出。--fp16是半精度推理焊縫檢測的缺陷框不涉及自動駕駛那種極端安全場景半精度帶來的精度損失通常在 1% 以內(nèi)速度收益接近翻倍值得開。--workspace2048限制 TensorRT 構(gòu)建時最大使用 2GB 顯存防止構(gòu)建過程中顯存溢出。TensorRT 引擎導(dǎo)出后的推理不能用yolo predict直接跑需要用tensorrt的 Python API 加載。驗證方式是把同一張疑似缺陷圖片分別用 PyTorch 權(quán)重和 TensorRT 引擎各跑一遍對比檢測框坐標(biāo)和置信度。我自己的習(xí)慣是設(shè)置一個容忍度坐標(biāo)偏差不超過 5 個像素、置信度偏差不超過 0.05 就算通過。如果發(fā)現(xiàn) TensorRT 的結(jié)果偏差過大先檢查是不是開了--fp16導(dǎo)致精度損失關(guān)掉后重新導(dǎo)出再對比。最后想說的是焊縫質(zhì)量檢測這個方向真正的核心不在模型選型而在數(shù)據(jù)。YOLOv8 只是把「從數(shù)據(jù)到檢測」的距離縮短了但如果你拿到的sts-hanfeng-data.zip里標(biāo)注質(zhì)量參差不齊花再多時間調(diào)參也是在垃圾上蓋樓。我在第一次跑焊縫數(shù)據(jù)時就吃過這個虧——數(shù)據(jù)增強(qiáng)參數(shù)調(diào)了一整天最后發(fā)現(xiàn)是標(biāo)簽文件里有兩張圖片的類別 ID 標(biāo)錯了。以后拿到任何數(shù)據(jù)集第一件事永遠(yuǎn)是抽查標(biāo)簽第二件事才是訓(xùn)練。希望幫到你。本文還有配套的精品資源點擊獲取