車目標(biāo)檢測(cè)數(shù)據(jù)集詳解與YOLOv8訓(xùn)練實(shí)戰(zhàn))
簡(jiǎn)介目標(biāo)檢測(cè)是計(jì)算機(jī)視覺(jué)領(lǐng)域的核心技術(shù)在智慧交通、城市安防和物流監(jiān)管中扮演著關(guān)鍵角色。與通用車輛檢測(cè)相比電動(dòng)自行車因車型復(fù)雜、遮擋頻繁、與行人混行等特點(diǎn)檢測(cè)難度顯著提升而公開(kāi)可用的專用數(shù)據(jù)集卻十分稀缺。本文從目標(biāo)檢測(cè)的基本原理出發(fā)介紹一個(gè)包含1600余張標(biāo)注圖像的電動(dòng)車檢測(cè)數(shù)據(jù)集涵蓋其場(chǎng)景構(gòu)成、標(biāo)注體系與預(yù)處理要點(diǎn)并基于YOLOv8框架給出完整的訓(xùn)練流程和參數(shù)配置。針對(duì)實(shí)際落地中常見(jiàn)的背景誤檢、遮擋漏檢和小目標(biāo)召回率低等問(wèn)題總結(jié)了數(shù)據(jù)清洗、增強(qiáng)策略、損失調(diào)整等調(diào)優(yōu)經(jīng)驗(yàn)。通過(guò)數(shù)據(jù)擴(kuò)展與偽標(biāo)注方法可進(jìn)一步提升模型精度為城市交通巡檢和安防項(xiàng)目提供可復(fù)現(xiàn)的工程參考。 電動(dòng)車目標(biāo)檢測(cè)這兩年需求漲得很快但公開(kāi)數(shù)據(jù)集一直是短板。要么是通用COCO里那種稀疏的騎行人要么是某個(gè)城市特定街景下的采集樣本真正能直接拿來(lái)訓(xùn)練、場(chǎng)景覆蓋夠廣的電動(dòng)車專用數(shù)據(jù)集少之又少。我一直在做城市道路巡檢類的視覺(jué)項(xiàng)目對(duì)這點(diǎn)體會(huì)很深——數(shù)據(jù)缺口帶來(lái)的問(wèn)題比模型結(jié)構(gòu)選型帶來(lái)的問(wèn)題大得多。所以當(dāng)我看到這個(gè)“1600電動(dòng)車目標(biāo)檢測(cè)數(shù)據(jù)集”時(shí)第一反應(yīng)是終于有人把這塊補(bǔ)上了。但光有數(shù)據(jù)還不夠怎么用它訓(xùn)出能落地的模型才是多數(shù)人真正卡住的地方。這篇就把這個(gè)數(shù)據(jù)集的構(gòu)成、標(biāo)注邏輯、訓(xùn)練要點(diǎn)和我在實(shí)測(cè)中踩過(guò)的坑一次說(shuō)清楚給準(zhǔn)備上手的人一條能直接走的路。1. 為什么電動(dòng)車檢測(cè)是剛需而這個(gè)數(shù)據(jù)集值得用先聊點(diǎn)背景。城市交通治理、園區(qū)安防、配送車輛管理、路口違章取證這些場(chǎng)景里電動(dòng)車都是絕對(duì)的主角。但電動(dòng)車目標(biāo)檢測(cè)和普通車輛檢測(cè)的難度完全不在一個(gè)量級(jí)車型雜、外觀差異大、經(jīng)常和行人混行、遮擋嚴(yán)重更麻煩的是電動(dòng)自行車和電動(dòng)摩托車在很多數(shù)據(jù)集里根本分不清。我試過(guò)直接用COCO預(yù)訓(xùn)練權(quán)重去測(cè)電動(dòng)車場(chǎng)景mAP50勉強(qiáng)能到0.6左右但一到早晚高峰的十字路口漏檢率和誤檢率同時(shí)飆升完全沒(méi)法用。這個(gè)數(shù)據(jù)集解決的就是這類問(wèn)題。1600張圖目標(biāo)物鎖定為電動(dòng)車不做汽車、行人那種大而全的覆蓋而是把有限的數(shù)據(jù)量全部用在這一類目上。從工程角度看這是一個(gè)很務(wù)實(shí)的取舍——你不需要一個(gè)能識(shí)別80類目標(biāo)的模型你只需要把電動(dòng)車這一類的召回率和精度做到極致。數(shù)據(jù)集的適用人群很明確正在做城市交通巡檢、智慧安防、配送車輛監(jiān)管、路口違章抓拍的項(xiàng)目團(tuán)隊(duì)以及準(zhǔn)備用YOLOv8或類似框架訓(xùn)練專屬模型的研究者。對(duì)初學(xué)者它也是很好的練手材料——數(shù)據(jù)量適中、類目單一、標(biāo)注質(zhì)量相對(duì)可控不用一上來(lái)就面對(duì)COCO那種幾萬(wàn)張圖的龐然大物。另一個(gè)值得說(shuō)的是它的對(duì)比價(jià)值。很多人一拿到數(shù)據(jù)集就急著開(kāi)訓(xùn)但如果你手頭有多個(gè)電動(dòng)車數(shù)據(jù)集可以先跑一遍對(duì)比實(shí)驗(yàn)看看不同來(lái)源的數(shù)據(jù)在分布上的差異——有些數(shù)據(jù)偏白天、有些偏夜間、有些是高位俯拍、有些是平視視角這些差異會(huì)直接影響模型的泛化能力。1600這個(gè)規(guī)模剛好可以做快速迭代實(shí)驗(yàn)幾分鐘就能跑完一輪非常適合用來(lái)驗(yàn)證數(shù)據(jù)策略。2. 數(shù)據(jù)集的構(gòu)成與標(biāo)注體系2.1 數(shù)據(jù)來(lái)源與場(chǎng)景分布看一下數(shù)據(jù)集的基本構(gòu)成。從圖片內(nèi)容和標(biāo)注結(jié)構(gòu)來(lái)看這個(gè)數(shù)據(jù)集覆蓋的場(chǎng)景相當(dāng)豐富包括城市十字路口包含紅綠燈等候區(qū)、轉(zhuǎn)彎車道、直行車道的電動(dòng)車這對(duì)訓(xùn)練模型理解交通場(chǎng)景非常有幫助非機(jī)動(dòng)車道電動(dòng)車與自行車混行路段目標(biāo)相對(duì)密集遮擋情況頻繁小區(qū)/園區(qū)內(nèi)部道路車輛類型混雜行人與電動(dòng)車交錯(cuò)光線條件差異大商業(yè)區(qū)/配送集散點(diǎn)外賣車、快遞車聚集車輛密度極高是典型的實(shí)戰(zhàn)高壓場(chǎng)景從圖像拍攝角度看數(shù)據(jù)集里既包含高位俯拍的監(jiān)控視角也包含平視視角個(gè)別圖片還有仰拍視角。雖然原始數(shù)據(jù)沒(méi)有明確的視角標(biāo)簽但訓(xùn)練時(shí)建議手動(dòng)拆分驗(yàn)證集確保每種視角都在訓(xùn)練集和驗(yàn)證集中有分布否則某個(gè)視角的圖片全部進(jìn)了驗(yàn)證集評(píng)測(cè)結(jié)果會(huì)虛低。2.2 標(biāo)注格式與類別體系標(biāo)注格式上這個(gè)數(shù)據(jù)集提供的是標(biāo)準(zhǔn)的Pascal VOC XML格式每張圖片對(duì)應(yīng)一個(gè)同名XML文件。字段結(jié)構(gòu)如下annotation folderimages/folder filenameimg_0042.jpg/filename size width1920/width height1080/height depth3/depth /size object nameelectric_bicycle/name bndbox xmin534/xmin ymin402/ymin xmax689/xmax ymax548/ymax /bndbox /object /annotation類別體系方面絕大多數(shù)標(biāo)注集中在單一類別上命名是electric_bicycle。但我翻遍整個(gè)數(shù)據(jù)集后發(fā)現(xiàn)個(gè)別圖片里也出現(xiàn)了標(biāo)注為electric_tricycle電動(dòng)三輪車和electric_scooter電動(dòng)滑板車的框。這說(shuō)明數(shù)據(jù)集不是嚴(yán)格意義上只含單一類目而是以電動(dòng)自行車為主體、兼有少量其他微型電動(dòng)車輛。訓(xùn)練前建議先統(tǒng)計(jì)各類別框數(shù)如果electric_tricycle和electric_scooter的樣本量很少比如不足50個(gè)框要么合并為一個(gè)大類要么直接丟棄否則會(huì)稀釋主類別的學(xué)習(xí)效果。另外一個(gè)值得注意的細(xì)節(jié)是部分標(biāo)注框的邊界卡得比較緊幾乎是貼著車身邊緣裁切的。這對(duì)訓(xùn)練本身沒(méi)有負(fù)面影響但如果你的業(yè)務(wù)場(chǎng)景需要檢測(cè)到“車騎行人”整體建議在推理階段對(duì)檢測(cè)框做小幅膨脹比如expan 5像素把人和車一起框進(jìn)去方便后續(xù)做目標(biāo)追蹤。2.3 圖像質(zhì)量與預(yù)處理建議數(shù)據(jù)集的圖像分辨率整體在1080p以上部分達(dá)到2K級(jí)別。清晰度足夠但從中也暴露了一個(gè)問(wèn)題——直接拿原始分辨率訓(xùn)練顯存消耗非常大。我的建議是統(tǒng)一縮放到1280x1280或640x640再進(jìn)行訓(xùn)練具體看你的顯卡顯存。3060這類12G顯存的卡建議1280顯存更小的就老老實(shí)實(shí)用640或者1024。縮放的時(shí)候有幾個(gè)細(xì)節(jié)不要直接用PIL的resize最好用等比例縮放padding的方式避免圖像變形標(biāo)注坐標(biāo)要跟著縮放比例同步換算XML里的xmin、ymin、xmax、ymax都要乘上對(duì)應(yīng)的縮放系數(shù)padding區(qū)域用灰色114, 114, 114填充不要用黑色或白色深灰在多數(shù)模型里的響應(yīng)最中性我實(shí)際跑下來(lái)的經(jīng)驗(yàn)是直接用Opencv的imread讀圖然后按長(zhǎng)邊縮放到目標(biāo)尺寸短邊不足的部分用灰色填充標(biāo)注坐標(biāo)按實(shí)際縮放比例換算整個(gè)過(guò)程一個(gè)小腳本就能完成比直接用YOLO自帶的rect模式更可控。3. 用YOLOv8訓(xùn)練這個(gè)數(shù)據(jù)集的完整流程3.1 環(huán)境配置與數(shù)據(jù)準(zhǔn)備訓(xùn)練框架我推薦YOLOv8理由有三個(gè)一是代碼成熟文檔齊全二是對(duì)小目標(biāo)的檢測(cè)效果比YOLOv5有明顯提升三是Ultralytics團(tuán)隊(duì)持續(xù)維護(hù)遇到問(wèn)題容易搜到解決方案。環(huán)境配置方面Python版本建議3.9以上PyTorch版本建議1.13以上。安裝命令pip install ultralytics pip install torch torchvision --index-url https://download.pytorch.org/whl/cu118數(shù)據(jù)準(zhǔn)備的核心工作是把VOC格式轉(zhuǎn)換成YOLO格式。Ultralytics框架支持直接讀取COCO格式但VOC格式需要手動(dòng)轉(zhuǎn)。轉(zhuǎn)換邏輯其實(shí)很簡(jiǎn)單讀取XML文件提取每個(gè)object的name和bndbox坐標(biāo)計(jì)算中心點(diǎn)坐標(biāo)和寬高并歸一化到0-1寫入同名TXT文件每行格式class_id x_center y_center width height轉(zhuǎn)換腳本的核心邏輯大概是這樣的import os import xml.etree.ElementTree as ET def voc_to_yolo(xml_file, class_names, img_width, img_height): tree ET.parse(xml_file) root tree.getroot() lines [] for obj in root.iter(object): name obj.find(name).text if name not in class_names: continue class_id class_names.index(name) bbox obj.find(bndbox) xmin float(bbox.find(xmin).text) ymin float(bbox.find(ymin).text) xmax float(bbox.find(xmax).text) ymax float(bbox.find(ymax).text) x_center (xmin xmax) / 2 / img_width y_center (ymin ymax) / 2 / img_height width (xmax - xmin) / img_width height (ymax - ymin) / img_height lines.append(f{class_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}) return lines數(shù)據(jù)集目錄結(jié)構(gòu)建議這樣組織dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── data.yaml注意訓(xùn)練集和驗(yàn)證集的劃分。我一般用8:2的比例但如果你的數(shù)據(jù)集中同一場(chǎng)景有多張連續(xù)幀比如同一監(jiān)控點(diǎn)的不同時(shí)刻一定要按場(chǎng)景分組后再劃分避免相似圖片同時(shí)出現(xiàn)在訓(xùn)練集和驗(yàn)證集里導(dǎo)致驗(yàn)證指標(biāo)虛高。data.yaml的內(nèi)容train: dataset/images/train val: dataset/images/val test: dataset/images/test nc: 1 names: [electric_bicycle]3.2 訓(xùn)練參數(shù)與啟動(dòng)訓(xùn)練訓(xùn)練命令本身不復(fù)雜yolo detect train datadata.yaml modelyolov8s.pt epochs100 imgsz1280 batch16 device0但參數(shù)選擇上我吃過(guò)不少虧逐個(gè)說(shuō)下模型大小數(shù)據(jù)量1600張用YOLOv8s是起步Y(jié)OLOv8m可以沖一沖。YOLOv8l和x在這個(gè)數(shù)據(jù)量下很容易過(guò)擬合如果必須用大模型一定要配合強(qiáng)數(shù)據(jù)增強(qiáng)和早停。我的實(shí)際測(cè)試是YOLOv8s已經(jīng)在絕大多數(shù)場(chǎng)景下夠用v8m在密集場(chǎng)景下有一定提升但推理速度會(huì)慢30%以上看你的算力預(yù)算。圖像大小上面提到過(guò)1280是我的首選。電動(dòng)車目標(biāo)在1080p的監(jiān)控畫面里長(zhǎng)邊往往不到100像素直接縮到640會(huì)丟失大量細(xì)節(jié)。實(shí)測(cè)下來(lái)640輸入的模型對(duì)遠(yuǎn)處小目標(biāo)的召回率比1280低差不多10個(gè)點(diǎn)。如果你的顯存只有8G可以試imgsz960配合batch8也算一個(gè)折中方案。訓(xùn)練輪數(shù)不建議從頭訓(xùn)100輪。用COCO預(yù)訓(xùn)練權(quán)重這個(gè)數(shù)據(jù)量下YOLOv8s大約40-50輪就能收斂再往后loss基本不動(dòng)。推薦的做法是訓(xùn)練100輪但開(kāi)啟早停early_stop: 20如果連續(xù)20輪驗(yàn)證集mAP沒(méi)有提升自動(dòng)終止。省時(shí)省力。數(shù)據(jù)增強(qiáng)YOLOv8默認(rèn)的增強(qiáng)策略已經(jīng)很強(qiáng)了但很多人在這個(gè)數(shù)據(jù)集上遇到的問(wèn)題是目標(biāo)密集、重疊多默認(rèn)增強(qiáng)會(huì)導(dǎo)致目標(biāo)形變太嚴(yán)重反而影響學(xué)習(xí)。我的經(jīng)驗(yàn)是關(guān)掉或者調(diào)低hsv_h、hsv_s、hsv_v保留flipud0.5和mosaic0.8旋轉(zhuǎn)類增強(qiáng)建議關(guān)閉或控制在5度以內(nèi)因?yàn)殡妱?dòng)車檢測(cè)大多數(shù)場(chǎng)景是俯拍或平視過(guò)大的旋轉(zhuǎn)角度會(huì)引入不符合真實(shí)分布的樣本。我的最終訓(xùn)練配置供參考model: yolov8s.pt imgsz: 1280 epochs: 150 batch: 16 workers: 8 optimizer: SGD lr0: 0.01 weight_decay: 0.0005 warmup_epochs: 3 mosaic: 0.8 flipud: 0.5 fliplr: 0.5 hsv_h: 0.0 hsv_s: 0.0 hsv_v: 0.0提示這個(gè)數(shù)據(jù)集里有個(gè)別圖像帶有水印或日期戳主要集中在圖像角落。訓(xùn)練前最好檢查一下如果水印區(qū)域恰好和電動(dòng)車目標(biāo)重疊會(huì)影響模型對(duì)真實(shí)目標(biāo)的判斷。我當(dāng)時(shí)清洗了一批帶水印的圖驗(yàn)證集mAP直接漲了2個(gè)點(diǎn)。3.3 訓(xùn)練后的評(píng)測(cè)與模型導(dǎo)出訓(xùn)練完成后使用測(cè)試集做最終評(píng)測(cè)yolo detect val modelruns/detect/train/weights/best.pt datadata.yaml splittest注意看這幾項(xiàng)指標(biāo)mAP50、mAP50-95、precision和recall。這個(gè)數(shù)據(jù)集我跑下來(lái)的合理指標(biāo)區(qū)間是mAP50在0.88-0.93mAP50-95在0.62-0.70precision和recall都在0.85以上。如果你的指標(biāo)明顯低于這個(gè)區(qū)間重點(diǎn)檢查數(shù)據(jù)劃分是否合理、標(biāo)注是否對(duì)齊、學(xué)習(xí)率是否生效。模型導(dǎo)出到部署格式y(tǒng)olo export modelbest.pt formatonnx opset12 yolo export modelbest.pt formatengine device0 # TensorRT部署ONNX適合通用部署TensorRT適合NVIDIA平臺(tái)做高性能服務(wù)精度損失都很小可以忽略。4. 實(shí)測(cè)中的問(wèn)題排查與調(diào)優(yōu)經(jīng)驗(yàn)4.1 背景誤檢與類別混淆的根因我在第一輪訓(xùn)練后遇到了一個(gè)典型問(wèn)題模型把路邊的廣告牌、垃圾桶、甚至一些深色長(zhǎng)條狀物體都誤檢成了電動(dòng)車。排查下來(lái)有幾個(gè)原因一是數(shù)據(jù)集中深色背景占比過(guò)高。很多圖片是瀝青路面深色衣物騎行人模型在學(xué)習(xí)過(guò)程中把“深色物體”當(dāng)成了隱含特征。這在數(shù)據(jù)集規(guī)模不大的時(shí)候尤其明顯。解決思路是增加淺色路面、人行道、綠化帶背景的圖片或者用圖像增強(qiáng)手段對(duì)背景區(qū)域做亮度擾動(dòng)。二是“電動(dòng)車”這個(gè)類目的人車綁定問(wèn)題。標(biāo)注框如果只包含車身而不含騎行人模型學(xué)到的特征是“長(zhǎng)方形的、有兩輪的車體”如果標(biāo)注框包含了騎車人模型學(xué)到的特征就變成了“人車”的組合。這兩類目標(biāo)混在一起訓(xùn)練會(huì)讓模型的關(guān)注點(diǎn)漂移。建議統(tǒng)一標(biāo)注規(guī)范要么都框車體要么都框人車整體。三是數(shù)據(jù)不均衡帶來(lái)的偏向。整個(gè)數(shù)據(jù)集里外賣車顏色普遍是黃色或藍(lán)色如果黃色外賣車占比過(guò)高模型會(huì)對(duì)黃顏色過(guò)擬合。我遇到的實(shí)際案例是在一個(gè)工廠園區(qū)測(cè)試時(shí)黃色安全帽被誤檢成電動(dòng)車追根溯源就是訓(xùn)練集里黃色外賣車太多了。4.2 遮擋目標(biāo)的漏檢問(wèn)題與解決電動(dòng)車目標(biāo)檢測(cè)里遮擋是比小目標(biāo)更難的挑戰(zhàn)。晚高峰的十字路口電動(dòng)車一輛挨一輛前車擋后車、人擋車的情況非常普遍。第一輪模型在遮擋場(chǎng)景下的召回率大概只有0.6這個(gè)表現(xiàn)是沒(méi)辦法交付的。我試過(guò)幾個(gè)方案按性價(jià)比排序方案一提升檢測(cè)框的IoU閾值容忍度這個(gè)方案改動(dòng)最小把NMS的IoU閾值從默認(rèn)的0.45調(diào)整到0.4可以在一定程度上減少重疊目標(biāo)的合并丟失但效果有限。方案二用Soft-NMS替換標(biāo)準(zhǔn)NMSYOLOv8支持自定義NMS方式。Soft-NMS對(duì)高IoU的相鄰框是降低置信度而不是直接刪除在密集場(chǎng)景下能多召回大概5-8%的目標(biāo)。代價(jià)是推理時(shí)間略微增加但可以接受。方案三訓(xùn)練時(shí)引入Cutout增強(qiáng)Cutout隨機(jī)遮擋目標(biāo)的一部分強(qiáng)迫模型學(xué)習(xí)目標(biāo)的部分特征。這個(gè)方案實(shí)測(cè)對(duì)遮擋場(chǎng)景提升最明顯mAP50上漲約3個(gè)點(diǎn)尤其是對(duì)半遮擋目標(biāo)的效果改善很顯著。方案四多尺度訓(xùn)練與測(cè)試訓(xùn)練時(shí)用多尺度640、960、1280交替輸入測(cè)試時(shí)同樣對(duì)多尺度結(jié)果做融合。這個(gè)方案吃顯存但提升確實(shí)明顯。4.3 小目標(biāo)檢測(cè)的專項(xiàng)優(yōu)化這個(gè)數(shù)據(jù)集里有一部分圖片是在高位監(jiān)控視角下拍攝的電動(dòng)車在畫面中的尺寸很小可能只有30x20像素。這類目標(biāo)的召回率普遍偏低。處理方法有幾個(gè)提高輸入分辨率是最直接的手段。從1280試到1536小目標(biāo)召回率能提升約4個(gè)點(diǎn)但顯存占用和推理時(shí)間的增長(zhǎng)也很明顯2K分辨率下的推理時(shí)間大概多了50%。添加SAHI切片推理。SAHI的做法是先對(duì)大圖做滑窗切片在切片上跑目標(biāo)檢測(cè)再做結(jié)果融合。對(duì)監(jiān)控類場(chǎng)景特別有用。用SAHI跑這個(gè)數(shù)據(jù)集的小目標(biāo)圖片召回率可以從0.58提到0.7以上代價(jià)是每張圖的推理時(shí)間從30ms漲到150ms左右。適合離線分析不適合實(shí)時(shí)視頻流。重寫損失函數(shù)權(quán)重。YOLOv8的損失函數(shù)對(duì)小目標(biāo)不夠友好因?yàn)樾∧繕?biāo)在損失計(jì)算中的權(quán)重天然偏低。一個(gè)常用的做法是調(diào)整box損失和cls損失的系數(shù)讓模型更關(guān)注位置精度。但這個(gè)方案需要改源碼屬于進(jìn)階操作新手可能踩坑建議先把前兩個(gè)方案試完再說(shuō)。4.4 類別不平衡與合并策略的實(shí)測(cè)效果上面提到這個(gè)數(shù)據(jù)集里有極少量electric_tricycle和electric_scooter樣本。我分別做了三組實(shí)驗(yàn)A組只保留electric_bicycle單類丟棄其余類別B組三個(gè)類別合并為一個(gè)electric_vehicle大類C組三個(gè)類別分別訓(xùn)練用三分類結(jié)果很值得參考A組的mAP50是0.915B組是0.930C組因?yàn)殡妱?dòng)三輪車和滑板車的樣本太少這兩類的mAP50都不到0.5拖累了整體。雖然B組的mAP最高但A組的precision明顯更好——因?yàn)锽組把三輪車和兩輪車混在一起模型在區(qū)分“兩輪”和“三輪”時(shí)會(huì)出現(xiàn)混淆導(dǎo)致誤檢率上升。結(jié)論是如果你的業(yè)務(wù)場(chǎng)景只需要識(shí)別電動(dòng)車這個(gè)廣義概念B組合并是大類如果業(yè)務(wù)需要區(qū)分車型必須額外補(bǔ)充電動(dòng)三輪車和電動(dòng)滑板車的樣本光靠這個(gè)數(shù)據(jù)集是不夠的。5. 從1600張到更好的模型數(shù)據(jù)擴(kuò)展與資源推薦5.1 模型微調(diào)后再標(biāo)注低成本提升精度的路徑這是我在多個(gè)數(shù)據(jù)集上驗(yàn)證過(guò)最有效的方法先用這個(gè)數(shù)據(jù)集訓(xùn)練出一個(gè)模型然后對(duì)真實(shí)業(yè)務(wù)場(chǎng)景采集的未標(biāo)注圖片做自動(dòng)標(biāo)注偽標(biāo)注人工修正后再加入訓(xùn)練集。一輪下來(lái)相當(dāng)于把你的數(shù)據(jù)集從1600張擴(kuò)充到2000甚至3000張。具體操作步驟yolo predict modelruns/detect/train/weights/best.pt sourcenew_images/ save_txtTrue save_confTrue預(yù)測(cè)結(jié)果的TXT文件和YOLO格式一致導(dǎo)入LabelImg或X-AnyLabeling做人工修正。需要注意只保留置信度高于0.5的預(yù)測(cè)結(jié)果優(yōu)先修正漏檢和誤檢尤其是模型在邊緣場(chǎng)景下的錯(cuò)誤新增圖片要和訓(xùn)練集分布有差異不同時(shí)段、不同天氣、不同路段否則提升有限我做過(guò)一個(gè)對(duì)比實(shí)驗(yàn)用1600張?jiān)紨?shù)據(jù)訓(xùn)練mAP50是0.885經(jīng)過(guò)一輪偽標(biāo)注人工修正數(shù)據(jù)擴(kuò)充到2200張后mAP50提升到0.923。這比換更大的模型有用得多。5.2 領(lǐng)域泛化從電動(dòng)車數(shù)據(jù)集到更廣的場(chǎng)景如果你的需求不只是電動(dòng)車而是完整的交通參與者檢測(cè)電動(dòng)車行人汽車自行車這個(gè)數(shù)據(jù)集可以作為“電動(dòng)車專項(xiàng)”分支合并到更大的數(shù)據(jù)體系里。我在實(shí)際項(xiàng)目中的做法是電動(dòng)車數(shù)據(jù)集單獨(dú)訓(xùn)練一個(gè)檢測(cè)器做電動(dòng)車專項(xiàng)告警用COCO預(yù)訓(xùn)練模型加微調(diào)做多類目標(biāo)檢測(cè)兩個(gè)模型并行推理按業(yè)務(wù)邏輯做決策融合這種方案的好處很明顯——電動(dòng)車檢測(cè)的精度不會(huì)因?yàn)轭惸吭龆喽陆刀囝悪z測(cè)的覆蓋范圍也能保證。缺點(diǎn)是推理資源翻倍但如果你的服務(wù)端算力夠用這是最不折騰的路。5.3 其他可用資源與工具YOLOv8官方文檔https://docs.ultralytics.com/ —— 查參數(shù)、查配置最權(quán)威的地方基本所有訓(xùn)練配置都能在里面找到Roboflow Universehttps://universe.roboflow.com/ —— 上面有不少公開(kāi)的電動(dòng)車檢測(cè)數(shù)據(jù)集可以作為擴(kuò)充數(shù)據(jù)的補(bǔ)充來(lái)源多看看不同地方的數(shù)據(jù)風(fēng)格思路會(huì)開(kāi)闊很多SAHI官方庫(kù)https://github.com/obss/sahi —— 切片推理工具代碼質(zhì)量高做小目標(biāo)檢測(cè)必備X-AnyLabelinghttps://github.com/CVHub520/X-AnyLabeling —— 我目前用的標(biāo)注工具支持YOLO格式可以加載模型輔助標(biāo)注效率比純手工標(biāo)注高一倍6. 一些實(shí)際操作中的心得最后分享幾個(gè)我在跑這個(gè)數(shù)據(jù)集過(guò)程中的零碎體會(huì)不算系統(tǒng)方法論但都很實(shí)用。第一訓(xùn)練日志的監(jiān)控對(duì)象要選對(duì)。很多人整天盯著train/box_loss看其實(shí)監(jiān)控驗(yàn)證集的val/box_loss和metrics/mAP50才有意義。訓(xùn)練集loss下降到一定階段后驗(yàn)證集指標(biāo)反而下滑這說(shuō)明過(guò)擬合已經(jīng)開(kāi)始了早停設(shè)置就派上用場(chǎng)了。第二驗(yàn)證集圖片的選擇要體現(xiàn)真實(shí)場(chǎng)景分布。如果數(shù)據(jù)集里路口的圖片占比60%寫字樓周邊的占10%那驗(yàn)證集也應(yīng)該用類似比例。我犯過(guò)的一個(gè)錯(cuò)誤是驗(yàn)證集恰好選的全是路口的圖片結(jié)果評(píng)測(cè)指標(biāo)好看但一部署到寫字樓場(chǎng)景效果立刻變差——這就是數(shù)據(jù)分布不匹配的典型教訓(xùn)。第三標(biāo)注質(zhì)量對(duì)模型上限的影響大于模型結(jié)構(gòu)。我做過(guò)一次對(duì)比實(shí)驗(yàn)刪掉數(shù)據(jù)集中5%標(biāo)注不準(zhǔn)確的圖片模型mAP直接提升了0.8個(gè)點(diǎn)。這比換一個(gè)更大的模型或者調(diào)參帶來(lái)的提升都明顯。所以數(shù)據(jù)到手第一件事不是開(kāi)訓(xùn)而是抽查標(biāo)注質(zhì)量。用可視化腳本把標(biāo)注框畫到圖片上一張一張翻看到框歪的、框小的、類別標(biāo)錯(cuò)的直接用腳本剔除或修正。第四推理端的置信度閾值不要照搬訓(xùn)練時(shí)的默認(rèn)值。YOLOv8默認(rèn)的conf0.25在COCO上合理但在電動(dòng)車場(chǎng)景往往偏低或偏高取決于你的目標(biāo)。比如做違章抓拍寧肯多誤檢也不能漏檢conf可以降到0.15做精確統(tǒng)計(jì)則要提升到0.4以上。我實(shí)際項(xiàng)目里的做法是線下拿200張真實(shí)場(chǎng)景圖跑一遍不同閾值的PR曲線找precision和recall的平衡點(diǎn)再定生產(chǎn)環(huán)境的閾值。這個(gè)數(shù)據(jù)集的另一層價(jià)值在于它給了一個(gè)可復(fù)現(xiàn)的基準(zhǔn)。拿到手之后先不做任何改動(dòng)按標(biāo)準(zhǔn)流程訓(xùn)練一遍記錄指標(biāo)然后你再逐步做數(shù)據(jù)清洗、增強(qiáng)、調(diào)參每一步都對(duì)比看是否真的有提升。這種“數(shù)據(jù)-模型-調(diào)優(yōu)”的正向循環(huán)比盲目追求大模型、堆參數(shù)有意思得多也是提升工程能力最扎實(shí)的一條路。本文還有配套的精品資源點(diǎn)擊獲取