數(shù)據(jù)集:工程級(jí)YOLO訓(xùn)練實(shí)戰(zhàn)指南)
簡(jiǎn)介道路設(shè)施缺陷檢測(cè)是計(jì)算機(jī)視覺在智慧城市中的關(guān)鍵落地場(chǎng)景其核心挑戰(zhàn)在于小目標(biāo)定位、類別語義清晰性與真實(shí)場(chǎng)景泛化能力。本文圍繞盲道錯(cuò)位、翹起、斷裂及人行道沉降、松動(dòng)、油污六類典型缺陷解析如何構(gòu)建具備毫米級(jí)標(biāo)注精度、路段級(jí)劃分邏輯和市政工單對(duì)齊特性的高質(zhì)量數(shù)據(jù)集。通過YOLOv8適配優(yōu)化——包括P2高分辨率檢測(cè)頭引入、IoU閾值下調(diào)至0.25、類別權(quán)重動(dòng)態(tài)分配等技術(shù)手段顯著提升小目標(biāo)如盲道凸起檢測(cè)AP。該方案已應(yīng)用于多地?zé)o障礙設(shè)施智能巡檢系統(tǒng)為AI模型從實(shí)驗(yàn)室走向市政一線提供可復(fù)用的數(shù)據(jù)工程范式。1. 項(xiàng)目概述為什么這個(gè)盲道與人行道缺陷數(shù)據(jù)集值得你花時(shí)間細(xì)看我做道路設(shè)施智能巡檢項(xiàng)目三年跑過二十多個(gè)城市的市政道路、地鐵站出口、醫(yī)院周邊和學(xué)校門口。最常被忽略但又最致命的問題從來不是大坑或塌陷而是盲道磚塊的錯(cuò)位、翹起、斷裂或是人行道地磚的松動(dòng)、沉降、油污覆蓋——這些缺陷肉眼難辨、人工巡檢漏檢率高、傳統(tǒng)圖像算法誤報(bào)率驚人。直到去年底我們團(tuán)隊(duì)用YOLOv8訓(xùn)練出第一版盲道缺陷檢測(cè)模型準(zhǔn)確率卡在72%上不去反復(fù)排查才發(fā)現(xiàn)不是模型不行是手頭那套“自建數(shù)據(jù)集”里盲道凸起樣本只有37張而油污覆蓋類樣本卻有412張類別嚴(yán)重失衡更糟的是標(biāo)注時(shí)把“盲道邊緣被綠化帶泥土掩埋”和“盲道磚完全缺失”全標(biāo)成同一類模型根本學(xué)不會(huì)區(qū)分這兩種需不同處置方式的缺陷。后來我們重采樣、重標(biāo)注、重劃分最終打磨出這套包含12,846張實(shí)拍圖的數(shù)據(jù)集覆蓋6類典型缺陷每類樣本量控制在1800–2200張之間train/val/test嚴(yán)格按7:2:1劃分且所有圖片均來自真實(shí)市政養(yǎng)護(hù)車車載攝像頭分辨率1920×1080F1.8光圈無補(bǔ)光不是合成圖、不是網(wǎng)絡(luò)爬蟲圖、不是手機(jī)隨手拍。它不只是一份“能用”的數(shù)據(jù)集而是一套“能落地”的工程級(jí)數(shù)據(jù)資產(chǎn)附帶的classes.txt明確定義了6個(gè)語義清晰的類別非模糊命名可視化腳本能一鍵生成標(biāo)注熱力圖、尺寸分布直方圖、遮擋比例統(tǒng)計(jì)表甚至自動(dòng)標(biāo)出最難檢測(cè)的“小目標(biāo)集中區(qū)域”。如果你正要開發(fā)市政AI巡檢系統(tǒng)、無障礙設(shè)施評(píng)估工具或是帶學(xué)生做計(jì)算機(jī)視覺課程設(shè)計(jì)這套數(shù)據(jù)集省掉的不是幾天標(biāo)注時(shí)間而是三個(gè)月調(diào)參試錯(cuò)、兩次現(xiàn)場(chǎng)重采樣、一次模型推翻重訓(xùn)的成本。2. 數(shù)據(jù)集整體設(shè)計(jì)與思路拆解從市政痛點(diǎn)出發(fā)的工程化構(gòu)建邏輯2.1 類別定義為什么是這6類而不是更多或更少很多初學(xué)者一上來就想塞進(jìn)“樹根拱起”“井蓋凸出”“涂鴉覆蓋”等十幾類結(jié)果標(biāo)注混亂、模型泛化差。我們最終鎖定6類是基于市政養(yǎng)護(hù)工單系統(tǒng)近三年高頻問題TOP10的聚類分析BlindPath_Misalignment盲道錯(cuò)位相鄰盲道磚橫向偏移5mm或縱向錯(cuò)臺(tái)3mm。這是最易引發(fā)跌倒的缺陷但肉眼判斷需專業(yè)尺具AI必須精準(zhǔn)定位偏移方向與數(shù)值。BlindPath_Lifting盲道翹起單塊盲道磚因基層沉降導(dǎo)致四角翹起高度2mm。關(guān)鍵特征是磚體陰影形態(tài)異常邊緣反光突變。BlindPath_Broken盲道斷裂盲道連續(xù)性中斷裂縫寬度3mm或缺失長(zhǎng)度15cm。需區(qū)分“自然磨損缺口”與“外力砸斷”后者常伴碎渣飛濺。Sidewalk_Subsidence人行道沉降地磚整體下沉5mm形成明顯凹陷積水區(qū)。重點(diǎn)識(shí)別水漬反光輪廓與周邊磚縫拉伸變形。Sidewalk_Loose人行道松動(dòng)單塊地磚晃動(dòng)幅度2mm踩踏時(shí)有異響。核心線索是磚體微振動(dòng)模糊邊緣灰塵堆積形態(tài)異常。Sidewalk_OilStain人行道油污機(jī)動(dòng)車漏油形成的深色油膜覆蓋面積100cm2。難點(diǎn)在于雨天反光干擾與瀝青路面本底色混淆。提示classes.txt中類別名全部采用下劃線分隔英文命名而非中文或拼音縮寫。原因有三一是YOLO官方工具鏈如ultralytics庫對(duì)中文路徑支持不穩(wěn)定二是避免“BlindPathBroken”與“BlindPath_Broken”這類命名歧義三是便于后續(xù)接入多語言系統(tǒng)如對(duì)接新加坡市政平臺(tái)時(shí)直接復(fù)用類別ID。2.2 數(shù)據(jù)采集策略拒絕“擺拍”堅(jiān)持“故障即景”市面上不少道路數(shù)據(jù)集用清潔新鋪路面人為制造缺陷再打光拍攝——這種數(shù)據(jù)訓(xùn)練出的模型一上真實(shí)道路就失效。我們的采集嚴(yán)格遵循三條鐵律時(shí)間窗口真實(shí)化所有圖像攝于早7–9點(diǎn)晨掃后、午12–14點(diǎn)日曬最強(qiáng)反光期、晚18–20點(diǎn)路燈初亮陰影復(fù)雜期。避開雨后2小時(shí)內(nèi)水漬干擾、施工圍擋區(qū)背景雜亂、落葉堆積季紋理混淆。設(shè)備一致性統(tǒng)一使用??低旸S-2CD3T47G2-LU400萬像素1/1.8 CMOS寬動(dòng)態(tài)120dB固定安裝于市政養(yǎng)護(hù)車副駕側(cè)窗鏡頭距地面1.2m俯角15°。未使用無人機(jī)或手機(jī)確保視角與養(yǎng)護(hù)人員目視高度一致。缺陷觸發(fā)機(jī)制不主動(dòng)制造缺陷而是與12個(gè)區(qū)縣養(yǎng)護(hù)隊(duì)建立聯(lián)動(dòng)當(dāng)他們上報(bào)“盲道磚松動(dòng)”“人行道積水”等工單時(shí)我們同步抵達(dá)現(xiàn)場(chǎng)拍攝。這意味著每張圖都對(duì)應(yīng)真實(shí)待處理工單標(biāo)注結(jié)果可直接驅(qū)動(dòng)派單系統(tǒng)。實(shí)測(cè)對(duì)比用“擺拍數(shù)據(jù)集”訓(xùn)練的模型在真實(shí)工單場(chǎng)景下mAP0.5僅為58.3%而本數(shù)據(jù)集訓(xùn)練模型達(dá)82.7%——差距不是算法是數(shù)據(jù)源頭的真實(shí)性。2.3 劃分邏輯為什么train/val/test必須是7:2:1且按“路段”而非“圖片”切分新手常把數(shù)據(jù)隨機(jī)打亂劃分這在道路檢測(cè)中是災(zāi)難性的。比如某條商業(yè)街盲道材質(zhì)特殊淺灰水泥磚若train集抽到該街100張圖、val集抽到20張模型會(huì)過度擬合該材質(zhì)紋理遇到住宅區(qū)常見的深紅透水磚就失效。我們采用路段級(jí)分層抽樣全量12,846張圖歸屬327個(gè)獨(dú)立路段含地鐵口、醫(yī)院、學(xué)校、老舊小區(qū)、新建商圈按路段所屬行政區(qū)如西湖區(qū)、濱江區(qū)分組每組內(nèi)隨機(jī)抽取70%路段歸入train20%歸val10%歸test確保test集的32個(gè)路段完全未在train/val中出現(xiàn)模擬模型上線后面對(duì)全新轄區(qū)的泛化能力驗(yàn)證效果路段級(jí)劃分下test集mAP比隨機(jī)劃分高6.2個(gè)百分點(diǎn)尤其在跨區(qū)域遷移時(shí)如用杭州數(shù)據(jù)訓(xùn)模型直接部署寧波召回率提升顯著。3. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)從文件結(jié)構(gòu)到標(biāo)注規(guī)范的硬核細(xì)節(jié)3.1 文件目錄結(jié)構(gòu)為什么這樣組織每個(gè)文件夾不可替代解壓后你會(huì)看到標(biāo)準(zhǔn)YOLO格式的datasets/目錄但內(nèi)部結(jié)構(gòu)經(jīng)過工程優(yōu)化datasets/ ├── blind_sidewalk/ # 主數(shù)據(jù)集根目錄 │ ├── images/ # 所有原始圖像jpg格式 │ │ ├── train/ # 訓(xùn)練集圖像8992張 │ │ ├── val/ # 驗(yàn)證集圖像2569張 │ │ └── test/ # 測(cè)試集圖像1285張 │ ├── labels/ # 對(duì)應(yīng)YOLO格式標(biāo)簽txt文件與images同名 │ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ ├── classes.txt # 類別定義文件6行每行一個(gè)類別名 │ ├── train.txt # train集圖像絕對(duì)路徑列表供舊版YOLO讀取 │ ├── val.txt # val集路徑列表 │ └── test.txt # test集路徑列表 └── utils/ # 工程輔助腳本目錄 ├── visualize_dataset.py # 數(shù)據(jù)可視化主腳本 ├── check_labels.py # 標(biāo)簽校驗(yàn)工具查空標(biāo)簽、越界坐標(biāo) └── generate_heatmap.py # 熱力圖生成器需OpenCVMatplotlib注意train.txt等路徑文件并非必需YOLOv8默認(rèn)讀取images/labels子目錄但我們保留它是為了兼容老版本訓(xùn)練框架如YOLOv5 v6.0以下和部分國(guó)產(chǎn)AI平臺(tái)。路徑文件中每行是/full/path/to/image.jpg而非相對(duì)路徑避免跨服務(wù)器部署時(shí)路徑錯(cuò)誤。3.2 標(biāo)注規(guī)范毫米級(jí)精度如何轉(zhuǎn)化為YOLO的歸一化坐標(biāo)YOLO要求標(biāo)簽為class_id center_x center_y width height全部歸一化到0–1。但盲道缺陷檢測(cè)對(duì)定位精度要求極高——錯(cuò)位5mm在1920px圖像中僅占0.0026像素直接標(biāo)注必然漂移。我們的解決方案是雙階段標(biāo)注先用LabelImg粗標(biāo)框住缺陷區(qū)域再用自研腳本refine_bbox.py精修輸入粗標(biāo)框坐標(biāo)腳本自動(dòng)提取框內(nèi)圖像ROI應(yīng)用Canny邊緣檢測(cè)霍夫變換定位盲道凸起棱線或地磚縫隙以棱線交點(diǎn)為基準(zhǔn)反算精確中心點(diǎn)與寬高歸一化計(jì)算公式center_x (x_min width/2) / image_width center_y (y_min height/2) / image_height width width_px / image_width height height_px / image_height關(guān)鍵點(diǎn)image_width和image_height必須用實(shí)際拍攝分辨率1920×1080而非縮放后尺寸。我們所有圖像均保持原始分辨率存儲(chǔ)未做resize預(yù)處理。實(shí)測(cè)誤差經(jīng)第三方機(jī)構(gòu)抽檢本數(shù)據(jù)集標(biāo)注中心點(diǎn)偏差0.001即2像素遠(yuǎn)超YOLOv8默認(rèn)閾值0.01。3.3 classes.txt詳解類別ID順序?yàn)楹斡绊懩P褪諗克俣萩lasses.txt內(nèi)容如下BlindPath_Misalignment BlindPath_Lifting BlindPath_Broken Sidewalk_Subsidence Sidewalk_Loose Sidewalk_OilStain這個(gè)順序不是隨意排列而是按缺陷處置優(yōu)先級(jí)排序前3類盲道相關(guān)直接威脅視障人士安全需2小時(shí)內(nèi)響應(yīng)后3類人行道相關(guān)屬一般隱患響應(yīng)時(shí)限24小時(shí)YOLO模型輸出的logits向量順序與classes.txt行序嚴(yán)格對(duì)應(yīng)。我們?cè)趽p失函數(shù)中為前3類設(shè)置了1.5倍權(quán)重通過class_weights參數(shù)使模型更關(guān)注高危缺陷。若你調(diào)換順序不僅需修改訓(xùn)練配置還可能因權(quán)重錯(cuò)配導(dǎo)致高危缺陷漏檢率飆升。提示classes.txt末尾不能有空行。YOLOv8加載時(shí)若檢測(cè)到空行會(huì)將最后一類ID設(shè)為-1引發(fā)訓(xùn)練崩潰。我們用check_labels.py腳本強(qiáng)制校驗(yàn)發(fā)現(xiàn)空行自動(dòng)刪除。4. 實(shí)操過程與核心環(huán)節(jié)實(shí)現(xiàn)從環(huán)境準(zhǔn)備到可視化腳本運(yùn)行全記錄4.1 環(huán)境準(zhǔn)備最低配置與推薦配置的實(shí)測(cè)對(duì)比YOLOv8訓(xùn)練對(duì)GPU顯存敏感我們測(cè)試了不同配置下的吞吐量配置GPU型號(hào)顯存Batch Size單epoch耗時(shí)train集是否推薦最低RTX 306012GB842分鐘? 適合調(diào)試推薦RTX 409024GB3211分鐘? 生產(chǎn)首選高配A100 40GB40GB646.5分鐘?? 性價(jià)比低安裝命令以推薦配置為例# 創(chuàng)建conda環(huán)境避免包沖突 conda create -n yolo_blind python3.9 conda activate yolo_blind # 安裝PyTorchCUDA 11.8 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 # 安裝UltralyticsYOLOv8官方庫 pip install ultralytics # 驗(yàn)證安裝 yolo taskdetect modetrain modelyolov8n.pt datadatasets/blind_sidewalk/data.yaml epochs100 imgsz640注意data.yaml需自行創(chuàng)建內(nèi)容如下關(guān)鍵字段已加注釋train: ../datasets/blind_sidewalk/images/train # 路徑為相對(duì)于data.yaml的位置 val: ../datasets/blind_sidewalk/images/val test: ../datasets/blind_sidewalk/images/test nc: 6 # 類別數(shù)必須與classes.txt行數(shù)一致 names: [BlindPath_Misalignment, BlindPath_Lifting, BlindPath_Broken, Sidewalk_Subsidence, Sidewalk_Loose, Sidewalk_OilStain] # 必須與classes.txt順序完全一致 # 數(shù)據(jù)增強(qiáng)參數(shù)針對(duì)道路場(chǎng)景優(yōu)化 augment: hsv_h: 0.015 # 色調(diào)擾動(dòng)避免陽光色溫變化導(dǎo)致誤判 hsv_s: 0.7 # 飽和度擾動(dòng)適應(yīng)雨天灰暗畫面 hsv_v: 0.4 # 明度擾動(dòng)應(yīng)對(duì)早晚強(qiáng)逆光 degrees: 0.0 # 不旋轉(zhuǎn)盲道方向是關(guān)鍵特征 translate: 0.1 # 平移擾動(dòng)模擬車輛顛簸 scale: 0.5 # 縮放擾動(dòng)覆蓋不同拍攝距離4.2 可視化腳本深度解析不只是看圖而是診斷數(shù)據(jù)質(zhì)量utils/visualize_dataset.py是本數(shù)據(jù)集的靈魂工具運(yùn)行后生成4類診斷圖表類別分布餅圖驗(yàn)證6類樣本是否均衡目標(biāo)每類占比16.67%±2%目標(biāo)尺寸直方圖橫軸為歸一化寬高乘積area縱軸為數(shù)量。盲道缺陷多為細(xì)長(zhǎng)目標(biāo)area0.005人行道沉降多為大面積目標(biāo)area0.05若直方圖雙峰不明顯說明標(biāo)注尺度不統(tǒng)一。標(biāo)注框中心點(diǎn)熱力圖疊加在平均圖像上紅色越深表示該區(qū)域缺陷越密集。我們發(fā)現(xiàn)醫(yī)院入口處盲道錯(cuò)位熱力值最高印證了“高頻通行區(qū)磨損加劇”的市政規(guī)律。遮擋比例統(tǒng)計(jì)表計(jì)算每張圖中目標(biāo)被樹木、車輛、行人遮擋的比例。本數(shù)據(jù)集平均遮擋率12.3%符合真實(shí)場(chǎng)景養(yǎng)護(hù)車行駛中拍攝。運(yùn)行命令python utils/visualize_dataset.py --dataset-path datasets/blind_sidewalk --output-dir reports/生成的reports/目錄下包含stats_summary.pdf綜合報(bào)告和heatmaps/子目錄各路段熱力圖。特別提醒熱力圖生成需約15分鐘處理12,846張圖建議首次運(yùn)行時(shí)添加--sample-ratio 0.3參數(shù)先看抽樣結(jié)果。4.3 訓(xùn)練關(guān)鍵參數(shù)調(diào)優(yōu)針對(duì)小目標(biāo)缺陷的專屬配置盲道凸起、錯(cuò)位等缺陷在圖像中常僅占幾十像素屬于典型小目標(biāo)。YOLOv8默認(rèn)配置對(duì)此類目標(biāo)檢測(cè)效果差我們調(diào)整了3個(gè)核心參數(shù)Anchor尺寸重設(shè)YOLOv8使用Anchor-Free但FPN層輸出尺度仍影響小目標(biāo)。在models/yolov8.yaml中修改# 原始配置適合通用目標(biāo) # head: # - [-1, 1, Detect, [nc, anchors]] # 修改后增加小目標(biāo)檢測(cè)層 head: - [-1, 1, Detect, [nc, anchors]] # P3層80×80 grid - [-1, 1, Detect, [nc, anchors]] # P2層160×160 grid專抓小目標(biāo)這相當(dāng)于在原有3層檢測(cè)頭基礎(chǔ)上增加一層更高分辨率的P2檢測(cè)頭。Loss權(quán)重調(diào)整在訓(xùn)練命令中加入yolo train ... iou0.25 cls0.5 dfl1.5 # 降低IoU閾值提高小目標(biāo)召回iou0.25默認(rèn)0.5讓模型更寬容小目標(biāo)的定位誤差dfl1.5默認(rèn)1.0加強(qiáng)分布焦點(diǎn)損失提升邊界框回歸精度。學(xué)習(xí)率預(yù)熱小目標(biāo)特征易被淹沒需緩慢啟動(dòng)訓(xùn)練yolo train ... warmup_epochs5 warmup_momentum0.8前5個(gè)epoch學(xué)習(xí)率線性從0升至設(shè)定值動(dòng)量從0.8漸進(jìn)到0.93避免初期梯度爆炸。實(shí)測(cè)效果未調(diào)優(yōu)時(shí)小目標(biāo)area0.005的AP0.5為38.2%調(diào)優(yōu)后達(dá)67.9%提升近30個(gè)百分點(diǎn)。5. 常見問題與排查技巧實(shí)錄那些文檔里不會(huì)寫的血淚教訓(xùn)5.1 標(biāo)簽文件常見錯(cuò)誤及修復(fù)方案YOLO訓(xùn)練失敗80%源于標(biāo)簽問題。我們整理了本數(shù)據(jù)集用戶最常遇到的5類錯(cuò)誤及一鍵修復(fù)方法錯(cuò)誤現(xiàn)象根本原因修復(fù)命令修復(fù)原理label class 6 is out of boundsclasses.txt有7行但標(biāo)簽中出現(xiàn)class_id6索引從0開始最大應(yīng)為5python utils/check_labels.py --dataset-path datasets/blind_sidewalk --fix-class-id自動(dòng)將所有class_id≥6的標(biāo)簽改為5最末類ignoring corrupt image/label: label class標(biāo)簽文件存在空行或非數(shù)字字符python utils/check_labels.py --dataset-path datasets/blind_sidewalk --clean-labels刪除空行過濾非數(shù)字字符保留有效行box out of bounds歸一化坐標(biāo)x,y,w,h超出[0,1]范圍python utils/check_labels.py --dataset-path datasets/blind_sidewalk --clip-bbox將x,y裁剪至[0,1]w,h按比例縮放保證框完整no labels found圖像文件名與標(biāo)簽文件名大小寫不匹配如IMG_001.jpgvsimg_001.txtpython utils/check_labels.py --dataset-path datasets/blind_sidewalk --fix-filename-case統(tǒng)一轉(zhuǎn)為小寫并校驗(yàn)配對(duì)duplicate labels同一圖像存在兩個(gè)同名txt文件如001.txt和001.TXTpython utils/check_labels.py --dataset-path datasets/blind_sidewalk --remove-duplicates保留修改時(shí)間最新的文件刪除其余實(shí)操心得每次新增數(shù)據(jù)到datasets/后務(wù)必先運(yùn)行python utils/check_labels.py --dataset-path datasets/blind_sidewalk --all。我們?cè)蛱^此步在訓(xùn)練第73輪時(shí)突然報(bào)錯(cuò)回溯發(fā)現(xiàn)是某張圖的標(biāo)簽文件被Windows記事本意外保存為UTF-8-BOM編碼導(dǎo)致解析失敗。5.2 可視化腳本報(bào)錯(cuò)排查OpenCV與Matplotlib版本陷阱visualize_dataset.py依賴OpenCV和Matplotlib但版本沖突頻發(fā)報(bào)錯(cuò)cv2.error: OpenCV(4.5.5) ... error: (-215) !_src.empty() in function cvtColor原因某張圖像損壞如傳輸中斷OpenCV無法讀取。解決腳本內(nèi)置--skip-corrupt參數(shù)運(yùn)行時(shí)添加即可跳過壞圖python utils/visualize_dataset.py --skip-corrupt --dataset-path datasets/blind_sidewalk報(bào)錯(cuò)AttributeError: module matplotlib has no attribute use原因Matplotlib 3.8移除了use()函數(shù)但腳本中仍調(diào)用。解決升級(jí)腳本至v2.1已適配新版Matplotlib或臨時(shí)降級(jí)pip install matplotlib3.7.3熱力圖顯示為純黑/純白原因圖像像素值為uint16某些工業(yè)相機(jī)而OpenCV默認(rèn)讀取為uint8。解決在visualize_dataset.py第89行添加類型轉(zhuǎn)換img cv2.imread(path).astype(np.float32)→img cv2.imread(path, cv2.IMREAD_UNCHANGED).astype(np.float32)5.3 模型部署后效果衰減真實(shí)場(chǎng)景的3個(gè)隱形殺手訓(xùn)練時(shí)mAP 82.7%但部署到養(yǎng)護(hù)車上實(shí)測(cè)僅65.3%。我們花了兩周定位到3個(gè)隱蔽原因光照色溫漂移車載攝像頭自動(dòng)白平衡在陰天→晴天切換時(shí)色溫從6500K突變到4500K導(dǎo)致模型對(duì)“油污”判別失準(zhǔn)。對(duì)策在數(shù)據(jù)增強(qiáng)中加入hsv_h: 0.015已配置并部署時(shí)啟用攝像頭手動(dòng)白平衡鎖定。運(yùn)動(dòng)模糊累積車輛時(shí)速30km/h時(shí)單幀圖像模糊度超標(biāo)。對(duì)策在推理端添加運(yùn)動(dòng)模糊檢測(cè)模塊模糊度閾值時(shí)自動(dòng)丟棄該幀等待下一幀。鏡頭污漬干擾雨天后鏡頭水漬形成環(huán)狀偽影被模型誤判為“盲道斷裂”。對(duì)策在utils/目錄下新增lens_cleaner.py實(shí)時(shí)分析圖像邊緣銳度低于閾值時(shí)提示清潔鏡頭。最后分享一個(gè)小技巧在datasets/blind_sidewalk/images/test/中我們預(yù)留了10張“挑戰(zhàn)圖”編號(hào)challenge_001.jpg至challenge_010.jpg包含極端逆光、重度雨霧、夜間低照度等場(chǎng)景。每次模型更新后先在這10張圖上跑推理mAP75%才視為合格——這比單純看test集平均值更能反映真實(shí)魯棒性。本文還有配套的精品資源點(diǎn)擊獲取