數(shù)據(jù)集實(shí)戰(zhàn):從標(biāo)簽解析到訓(xùn)練的完整指南)
簡(jiǎn)介面向yolo系列目標(biāo)檢測(cè)算法學(xué)習(xí)與實(shí)戰(zhàn)的專用數(shù)據(jù)集適合需要訓(xùn)練半掛車識(shí)別模型的開(kāi)發(fā)者、研究人員及計(jì)算機(jī)視覺(jué)初學(xué)者使用。壓縮包內(nèi)共607個(gè)文件包含546張jpg實(shí)景圖像、30個(gè)txt格式的yolo標(biāo)注文件、30個(gè)xml格式的voc標(biāo)注文件以及1個(gè)data.yaml配置文件整體容量約30.4MB。數(shù)據(jù)已完成訓(xùn)練/驗(yàn)證集劃分標(biāo)簽格式同時(shí)覆蓋yolo與voc兩種主流規(guī)范其中yolo格式包含類別索引、歸一化的中心點(diǎn)坐標(biāo)及寬高值可直接被yolov5、yolov7、yolov8、yolov9、yolov10、yolo11等版本調(diào)用。應(yīng)用時(shí)只需按data.yaml指引修改路徑即可啟動(dòng)模型訓(xùn)練和測(cè)試免去自行采集標(biāo)注的繁瑣過(guò)程。資源當(dāng)前已有191人學(xué)習(xí)適合快速驗(yàn)證模型效果或作為半掛車檢測(cè)方向的起步基準(zhǔn)數(shù)據(jù)。1. 半掛車檢測(cè)數(shù)據(jù)集能解決什么問(wèn)題手頭這個(gè)“yolo算法-半掛車檢測(cè)數(shù)據(jù)集-546張圖像帶標(biāo)簽-半掛車.zip”說(shuō)白了就是一份已經(jīng)按YOLO規(guī)范標(biāo)注好的半掛車圖像包。546張圖聽(tīng)著不多但用在車輛檢測(cè)這類單類別任務(wù)上配合預(yù)訓(xùn)練權(quán)重做遷移學(xué)習(xí)足夠把場(chǎng)景內(nèi)“是不是半掛車、框在哪”這件事學(xué)到八九成。真正貴的是標(biāo)簽——每張圖里掛車輪廓長(zhǎng)、遮擋多、視角跨度大沒(méi)經(jīng)驗(yàn)的人標(biāo)一百?gòu)埦鸵罎?。拿到這個(gè)包你可以直接開(kāi)始訓(xùn)YOLOv8或YOLOv5省掉最耗人的采集和標(biāo)注階段適合做公路貨運(yùn)統(tǒng)計(jì)、廠區(qū)車輛管理、停車位占用檢測(cè)這類偏垂直場(chǎng)景的算法驗(yàn)證和原型落地。半掛車最讓檢測(cè)模型頭疼的是長(zhǎng)寬比極端的車身和車頭牽引車混在一起的類間混淆這份數(shù)據(jù)集的標(biāo)簽質(zhì)量直接決定你能少走多少?gòu)澛贰?. 數(shù)據(jù)集里裝了什么目錄、標(biāo)簽格式與有效樣本判斷2.1 解壓后先確認(rèn)目錄結(jié)構(gòu)常見(jiàn)做法是數(shù)據(jù)集解壓后分成images和labels兩個(gè)兄弟目錄訓(xùn)練腳本通過(guò)給你的YAML文件里的路徑去分別找圖和數(shù)據(jù)標(biāo)注。拿到zip后我第一步永遠(yuǎn)是看目錄而不是急著跑訓(xùn)練因?yàn)楹芏鄻?biāo)好的zip被分享時(shí)會(huì)夾帶多余的讀取層級(jí)比如多套一層${作者名}/images/路徑寫(xiě)錯(cuò)訓(xùn)練會(huì)直接報(bào)空數(shù)據(jù)集錯(cuò)誤而且特別不好排查。unzip yolo算法-半掛車檢測(cè)數(shù)據(jù)集-546張圖像帶標(biāo)簽-半掛車.zip -d semitrailer_data cd semitrailer_data find . -maxdepth 2 -type d | sort如果命令行顯示images/與labels/平級(jí)說(shuō)明目錄結(jié)構(gòu)可以直接給ultralytics用如果出現(xiàn)的是semitrailer/2023/images/這類嵌套后續(xù)寫(xiě)data.yaml時(shí)要寫(xiě)../semitrailer/2023/images。這里還有個(gè)常見(jiàn)隱藏坑zip文件在Windows里解壓常會(huì)出現(xiàn)images與labels里圖片文件名大小寫(xiě)不一致后面標(biāo)簽匹配邏輯全走文本替換碰到大小寫(xiě)不一致就會(huì)靜默丟標(biāo)注。2.2 YOLO標(biāo)簽的取值不是像素而是比例打開(kāi)任意一個(gè)labels/下的txt文件會(huì)看到一行五個(gè)浮點(diǎn)數(shù)例如0 0.582031 0.447656 0.235938 0.134375。第一位是類別ID數(shù)據(jù)只有“半掛車”這一個(gè)類所以全是0后面四位對(duì)應(yīng)歸一化后的中心點(diǎn)x、中心點(diǎn)y、框?qū)抴、框高h(yuǎn)。這四個(gè)數(shù)的分母是圖像寬高所以取值范圍落在0到1之間。判別標(biāo)簽是否健康的初篩方法是任何一維大于1或小于0幾乎可以肯定是標(biāo)注工具或格式轉(zhuǎn)換時(shí)出了問(wèn)題如果出現(xiàn)大于0.9的w值就要警惕是不是把整張圖當(dāng)成了檢測(cè)框。from pathlib import Path import random label_dir Path(semitrailer_data/labels) txts list(label_dir.glob(*.txt)) sample random.sample(txts, 3) for t in sample: with open(t, r, encodingutf-8) as f: for line in f: parts [float(x) for x in line.strip().split()] cls, cx, cy, w, h parts assert 0 cx 1 and 0 cy 1, f{t.name} 越界: {line} assert 0 w 1 and 0 h 1, f{t.name} 越界: {line} print(f{t.name}: class{int(cls)} center({cx:.3f},{cy:.3f}) size({w:.3f},{h:.3f}))我一般還會(huì)順手把w/h的比值打印出來(lái)。半掛車的物理形狀決定了它的標(biāo)注框往往是寬大于高的橫向框這個(gè)比率會(huì)集中在1.5到4之間。若看到大量接近正方形的框多半標(biāo)注對(duì)象不是整車而是車頭或者貨箱的一部分這類標(biāo)簽需要返工。2.3 圖像尺寸決定了訓(xùn)練配置images/里的照片沒(méi)有統(tǒng)一尺寸非常正常數(shù)據(jù)集分享常來(lái)自多個(gè)采集批次。統(tǒng)計(jì)一下最小邊分布可以決定imgsz訓(xùn)練尺寸參數(shù)該給640還是832。如果多數(shù)圖的短邊只有500像素左右硬拉到1280只會(huì)增加顯存和訓(xùn)練時(shí)間檢測(cè)精度提升微乎其微如果圖像較大、細(xì)節(jié)如掛車側(cè)面的輪廓線很銳利那么832是更穩(wěn)妥的選擇。這里需要貼一張簡(jiǎn)易的命令行統(tǒng)計(jì)python -c from PIL import Image from pathlib import Path from collections import Counter c Counter() for p in Path(semitrailer_data/images).glob(*.jpg): with Image.open(p) as im: w, h im.size c[min(w, h) // 100 * 100] 1 print(sorted(c.items())) 這一步的作用和讀標(biāo)簽文件一樣決定訓(xùn)練超參。短邊集中在800到900的imgsz832是默認(rèn)起步短邊大量在400到600的就用640。貼圖時(shí)順帶注意看有沒(méi)有灰圖、異常色偏、EXIF旋轉(zhuǎn)導(dǎo)致PNG和JPG出現(xiàn)寬高互換的情況這類問(wèn)題會(huì)在訓(xùn)練時(shí)隨機(jī)裁剪增強(qiáng)里被放大。提示拿到任何xxx.zip數(shù)據(jù)集第一步永遠(yuǎn)是寫(xiě)這段校驗(yàn)?zāi)_本而不是解壓后立刻開(kāi)訓(xùn)練。標(biāo)簽越界、類別索引錯(cuò)位這兩類問(wèn)題后面排查都很費(fèi)時(shí)。3. 用YOLOv8復(fù)現(xiàn)半掛車檢測(cè)環(huán)境、數(shù)據(jù)劃分與訓(xùn)練參數(shù)3.1 從零搭環(huán)境到讓數(shù)據(jù)被識(shí)別很多朋友習(xí)慣直接把ultralytics裝進(jìn)全局Python但YOLOv8依賴的torch版本和CUDA版本一旦不匹配會(huì)莫名出現(xiàn)訓(xùn)練進(jìn)程崩潰。我的常規(guī)做法是創(chuàng)建獨(dú)立虛擬環(huán)境把依賴和系統(tǒng)Python隔離之后換模型不影響其他項(xiàng)目這個(gè)習(xí)慣在做目標(biāo)檢測(cè)類任務(wù)時(shí)能省下大量時(shí)間conda create -n yolo python3.10 -y conda activate yolo pip install ultralytics python -c import torch; print(torch.cuda.is_available())第三行打印True說(shuō)明GPU可用打印False請(qǐng)回去檢查CUDA。數(shù)據(jù)劃分只要寫(xiě)一段極簡(jiǎn)腳本把images里的文件名按8:1:1拆成train/val/test三個(gè)目錄同時(shí)把labels對(duì)應(yīng)文件名同步復(fù)制。注意這里一定不能只復(fù)制圖片要讓圖片和標(biāo)簽始終同目錄名因?yàn)閅OLO訓(xùn)練腳本在讀取標(biāo)簽時(shí)是拿著圖片路徑把/images/替換成/labels/去定位txt的。import random from pathlib import Path import shutil images sorted(Path(semitrailer_data/images).glob(*.jpg)) random.seed(42) random.shuffle(images) train_ratio, val_ratio 0.8, 0.1 cut1 int(len(images) * train_ratio) cut2 int(len(images) * (train_ratio val_ratio)) for subset, imgs in zip([train, val, test], [images[:cut1], images[cut1:cut2], images[cut2:]]): for img in imgs: img_out Path(fdata/{subset}/images) / img.name lbl_out Path(fdata/{subset}/labels) / img.name shutil.copy(img, img_out) shutil.copy(Path(semitrailer_data/labels) / img.name.replace(.jpg, .txt), lbl_out.replace(.jpg, .txt)) print(train:, len(images[:cut1]), val:, len(images[cut1:cut2]), test:, len(images[cut2:]))用shutil.copy而不是move是為了如果后期發(fā)現(xiàn)某個(gè)子集有臟標(biāo)簽還能回溯原包重新取。復(fù)制完后寫(xiě)一個(gè)semitrailer.yaml放到項(xiàng)目根目錄內(nèi)容只需包含圖片根目錄路徑、類別數(shù)和類名三行足夠。path: data train: train/images val: val/images nc: 1 names: [semitrailer]path字段接受絕對(duì)路徑或相對(duì)路徑相對(duì)路徑是相對(duì)于你這個(gè)YAML文件所在目錄。我見(jiàn)過(guò)不少人把path直接填成絕對(duì)路徑換臺(tái)機(jī)器訓(xùn)練就報(bào)路徑不存在所以建議寫(xiě)相對(duì)路徑然后把整個(gè)項(xiàng)目目錄打包給別人復(fù)現(xiàn)時(shí)才不會(huì)出這種問(wèn)題。3.2 訓(xùn)練最小命令與參數(shù)選擇邏輯訓(xùn)練開(kāi)頭前兩輪會(huì)輸出一張字符畫(huà)的網(wǎng)絡(luò)結(jié)構(gòu)摘要同時(shí)打印pytorch_model_weights或coco128預(yù)訓(xùn)練權(quán)重已經(jīng)自動(dòng)下載。這里直接給參數(shù)最克制的一個(gè)版本跑起來(lái)不加任何花哨增強(qiáng)先拿到基線yolo detect train datasemitrailer.yaml modelyolov8s.pt epochs100 imgsz640 batch16 patience15 projectruns namesemibaselineyolov8s.pt是兼顧精度和速度的起步選擇yolov8n更快但小目標(biāo)召回掉得快yolov8m對(duì)這546張數(shù)據(jù)來(lái)說(shuō)容易過(guò)擬合到這個(gè)數(shù)據(jù)集本身的光照和場(chǎng)景里。imgsz640匹配我們之前統(tǒng)計(jì)的主要短邊batch16要根據(jù)顯存來(lái)定顯卡是12G顯存時(shí)16沒(méi)問(wèn)題8G時(shí)降到8或4否則顯存溢出報(bào)CUDA out of memory。patience15表示驗(yàn)證集mAP連續(xù)15輪不漲就早停對(duì)小數(shù)據(jù)集特別實(shí)用因?yàn)榈?0輪左右就會(huì)開(kāi)始過(guò)擬合。訓(xùn)練完成后看runs/semibaseline/weights/best.pt是否存在。一個(gè)值得一開(kāi)始就養(yǎng)成的判斷習(xí)慣不要只盯訓(xùn)練集loss曲線loss下降很漂亮不代表模型在驗(yàn)證集上框得準(zhǔn)過(guò)擬合的特征就是訓(xùn)練loss繼續(xù)降而驗(yàn)證mAP停滯。YOLOv8會(huì)把每輪的預(yù)測(cè)樣例圖寫(xiě)到runs/semibaseline/下直接打開(kāi)最后一張看框的貼合度比看任何指標(biāo)都直觀。用這個(gè)最小命令能驗(yàn)證整條鏈路是否打通。如果全部正常再回頭按下一節(jié)處理隱藏問(wèn)題。4. 常見(jiàn)問(wèn)題排查標(biāo)簽、訓(xùn)練與驗(yàn)證三大環(huán)節(jié)4.1 標(biāo)簽文件有內(nèi)容但訓(xùn)練報(bào)“found no labels”現(xiàn)象解壓后打開(kāi)labels/*.txt每個(gè)文件都有數(shù)據(jù)data.yaml也指定的路徑正確但訓(xùn)練開(kāi)局就打印WARNING: No labels found in data/train/images/xxx.jpg最終一輪都沒(méi)訓(xùn)就退出。原因訓(xùn)練腳本定位標(biāo)簽的方式是把圖片路徑里的/images/字符串直接替換成/labels/后再把后綴改成txt。如果數(shù)據(jù)集文件夾命名是扁平的images_flat/或者標(biāo)簽?zāi)夸浗衋nnotations/替換規(guī)則就失效腳本找不到txt就自動(dòng)跳過(guò)這張圖跳過(guò)數(shù)量過(guò)多直接判定為空數(shù)據(jù)集。解決把目錄統(tǒng)一改成data/train/images/與data/train/labels/這種YOLO約定結(jié)構(gòu)并在替換后打印一條實(shí)際查找路徑確認(rèn)存在。用腳本做一次雙向校驗(yàn)統(tǒng)計(jì)“有圖片無(wú)標(biāo)簽”和“有標(biāo)簽無(wú)圖片”的文件數(shù)量。4.2 檢查類別數(shù)時(shí)報(bào)錯(cuò) index 0 is out of bounds現(xiàn)象訓(xùn)練剛讀到第一張圖就拋異常提示index 0 is out of bounds for axis 0 with size 0看起來(lái)像是數(shù)組越界問(wèn)題。原因txt里每一行第一個(gè)數(shù)字是類別IDYOLO按0起始計(jì)數(shù)你nc1自然只有類別0合法。出現(xiàn)這個(gè)報(bào)錯(cuò)往往不是txt第一位寫(xiě)成了1而是共享包里的標(biāo)簽文件混有別的類標(biāo)注比如有個(gè)txt第一行是1 0.5 0.5 0.3 0.3這個(gè)類別ID超過(guò)了nc范圍就被當(dāng)成越界。解決先統(tǒng)計(jì)所有txt文件的類別ID最大值再看是否有標(biāo)簽行殘留其他類別。把非0類別的行刪掉或者去原包確認(rèn)是不是多類別標(biāo)簽誤混進(jìn)單類別數(shù)據(jù)集。這個(gè)操作建議寫(xiě)代碼批量完成不要手動(dòng)開(kāi)txt編輯。4.3 驗(yàn)證集AP等于1但測(cè)試集效果極差現(xiàn)象訓(xùn)練結(jié)束后驗(yàn)證集mAP 0.95以上看著非常漂亮一部署到現(xiàn)場(chǎng)攝像頭拍回來(lái)的圖就開(kāi)始漏檢。原因數(shù)據(jù)集劃分前沒(méi)有打亂546張圖是按采集時(shí)間或拍攝路段排序的前80%都是白天晴天驗(yàn)證集是傍晚雨天模型實(shí)際上只學(xué)會(huì)了晴天場(chǎng)景的特征驗(yàn)證指標(biāo)是“背題”式的假高分。另一個(gè)常見(jiàn)原因是同一臺(tái)半掛車出現(xiàn)在連續(xù)多幀圖像里劃分后同一輛車同時(shí)存在于訓(xùn)練集和驗(yàn)證集模型等于提前見(jiàn)過(guò)答案。解決在劃分?jǐn)?shù)據(jù)前先按hash(文件名)做分組隨機(jī)保證同一場(chǎng)景的近似重復(fù)幀不會(huì)跨集合如果照片帶有采集位置信息盡量按路段分組而不是按文件夾隨機(jī)切。判斷這種慘案還有個(gè)技巧——訓(xùn)練和驗(yàn)證非常接近時(shí)把test目錄拿出來(lái)跑一次model.val(data...)測(cè)試集分?jǐn)?shù)明顯低于驗(yàn)證集基本就是劃分泄漏。4.4 訓(xùn)練到中途loss變成NaN現(xiàn)象訓(xùn)練在某一輪突然損失值變成nan后續(xù)所有指標(biāo)跟著全亂早停機(jī)制有時(shí)會(huì)把這輪保存成best。原因最常見(jiàn)的是學(xué)習(xí)率初始值在遷移學(xué)習(xí)場(chǎng)景下偏大半掛車數(shù)據(jù)量小特征分布和預(yù)訓(xùn)練數(shù)據(jù)差得遠(yuǎn)較大的梯度更新直接沖爆了數(shù)值穩(wěn)定性其次可能是某些標(biāo)注框坐標(biāo)為0讓損失計(jì)算里的對(duì)數(shù)項(xiàng)出現(xiàn)無(wú)效值。解決重啟訓(xùn)練時(shí)把初始學(xué)習(xí)率lr00.005降到0.001或0.0005同時(shí)加warmup_epochs5讓前幾輪慢熱。順手跑一遍前面寫(xiě)的坐標(biāo)越界檢查腳本排除標(biāo)簽本身的問(wèn)題。這兩個(gè)排查都不費(fèi)時(shí)間但能有效避免反復(fù)白訓(xùn)幾小時(shí)。注意小數(shù)據(jù)集的“驗(yàn)證集指標(biāo)漂亮”有相當(dāng)概率是劃分運(yùn)氣而不是模型能力。測(cè)試集才是用來(lái)下結(jié)論的。5. 部署前必須做的驗(yàn)證用混淆矩陣和預(yù)測(cè)圖確認(rèn)半掛車確實(shí)被識(shí)別5.1 在全部數(shù)據(jù)上重新評(píng)估并輸出指標(biāo)訓(xùn)練結(jié)束后用best.pt做一次帶驗(yàn)證集的評(píng)估輸出的是你在項(xiàng)目匯報(bào)里真正能寫(xiě)進(jìn)去的數(shù)字yolo detect val modelruns/semibaseline/weights/best.pt datasemitrailer.yaml imgsz640重點(diǎn)關(guān)注一個(gè)數(shù)字mAP50。低于0.7說(shuō)明當(dāng)前模型和數(shù)據(jù)集結(jié)合后還不夠可靠需要考慮第6章的增強(qiáng)手法在0.8到0.9之間說(shuō)明模型基本學(xué)到了半掛車最顯著的特征可以進(jìn)入業(yè)務(wù)試運(yùn)行。同時(shí)看per-class部分里的精確率和召回率如果精確率奇高而召回率低說(shuō)明模型是保守型寧可不框也不誤框做數(shù)量統(tǒng)計(jì)類業(yè)務(wù)希望召回率更高寧可多框幾個(gè)非半掛車物體人工復(fù)核。5.2 可視化預(yù)測(cè)結(jié)果和標(biāo)簽差異指標(biāo)是匯總數(shù)字但一定要抽具體圖片看框與真實(shí)邊界的貼合度。用如下命令跑一個(gè)包含20張圖的文件夾然后逐張看yolo predict modelruns/semibaseline/weights/best.pt sourcetest_samples imgsz640 save_txtTrue save_confTrue重點(diǎn)要看三種情況運(yùn)輸車頭帶掛的車頭是否被框了進(jìn)去、掛車局部被電線桿遮擋時(shí)框是否縮水、遠(yuǎn)景中的半掛車是否被漏掉。半掛車數(shù)據(jù)集最典型的錯(cuò)誤就是局部遮擋時(shí)預(yù)測(cè)框只框住可見(jiàn)部分導(dǎo)致框中心偏移。如果這類問(wèn)題頻繁且你的業(yè)務(wù)場(chǎng)景里遮擋是常態(tài)可以考慮把conf閾值降低到0.2來(lái)提升召回率代價(jià)是誤檢率上升需要用下一節(jié)的業(yè)務(wù)指標(biāo)做權(quán)衡。5.3 把mAP換算成業(yè)務(wù)可驗(yàn)收指標(biāo)做項(xiàng)目交付時(shí)甲方不會(huì)關(guān)心mAP他們問(wèn)的是“一天下來(lái)漏了多少臺(tái)車”。假設(shè)你的模型跑一個(gè)實(shí)時(shí)視頻流每輛車在視野內(nèi)出現(xiàn)約5秒幀率10fps那么每輛車約產(chǎn)生50個(gè)檢測(cè)幀。即便單幀召回率只有0.85用簡(jiǎn)單的滑窗邏輯把連續(xù)超過(guò)15幀被檢測(cè)到判定為一輛車最終漏掉的車輛數(shù)會(huì)遠(yuǎn)低于單幀指標(biāo)。這里給一個(gè)輕量級(jí)計(jì)數(shù)邏輯示例輸出車輛出現(xiàn)次數(shù)frame_detected [1,1,1,0,0,1,1,1,1,1,1,0,0,0,1,1] count 0 hit 0 for v in frame_detected: if v: hit 1 else: if hit 15: count 1 hit 0 print(檢測(cè)到車輛出現(xiàn)次數(shù):, count)這個(gè)簡(jiǎn)單示例的意義在于讓檢測(cè)結(jié)果與業(yè)務(wù)場(chǎng)景指標(biāo)耦合起來(lái)。單幀判斷和連續(xù)幀判斷完全是兩回事不要在單幀精度還差的時(shí)候急著上業(yè)務(wù)至少用這樣的連續(xù)幀消抖邏輯扛過(guò)第一輪現(xiàn)場(chǎng)測(cè)試。6. 擴(kuò)充數(shù)據(jù)集與訓(xùn)練增強(qiáng)從546張走到穩(wěn)定可用半掛車檢測(cè)的標(biāo)準(zhǔn)痛點(diǎn)在于場(chǎng)景多樣性和極端長(zhǎng)寬比。546張圖大概率只能覆蓋晴天鋪裝路和停車場(chǎng)兩類場(chǎng)景現(xiàn)場(chǎng)要用的夜間、雨天、彎道視角基本是空白。要邁過(guò)這個(gè)坎我不建議去公開(kāi)數(shù)據(jù)集胡亂混采優(yōu)先做的是在已有數(shù)據(jù)基礎(chǔ)上做增強(qiáng)。YOLOv8內(nèi)置了Mosaic和Copy-Paste但對(duì)半掛車這種細(xì)長(zhǎng)目標(biāo)這兩個(gè)增強(qiáng)會(huì)直接把長(zhǎng)車切碎反而毀掉標(biāo)簽。我通常只開(kāi)輕度旋轉(zhuǎn)和翻轉(zhuǎn)并在YAML里關(guān)閉Mosaicaugment: true mosaic: 0.0 degrees: 10 fliplr: 0.5 scale: 0.3mosaic: 0.0對(duì)半掛車來(lái)說(shuō)是關(guān)鍵因?yàn)樗膹垐D拼貼后掛車車身被多道切割線截?cái)嗾Z(yǔ)義遭到破壞模型學(xué)到的是殘缺特征。degrees: 10是有限度旋轉(zhuǎn)半掛車幾乎不會(huì)以45度角出現(xiàn)在路面畫(huà)面里。另一個(gè)實(shí)用做法是把模型的預(yù)測(cè)結(jié)果配上人工確認(rèn)快速積累新場(chǎng)景數(shù)據(jù)拿訓(xùn)練好的模型跑一遍現(xiàn)場(chǎng)新拍攝的圖片用save_txtTrue輸出預(yù)標(biāo)簽人工只做修正。這個(gè)半自動(dòng)標(biāo)注流程能把新場(chǎng)景的數(shù)據(jù)補(bǔ)充成本降一個(gè)量級(jí)。我自己通常會(huì)準(zhǔn)備一個(gè)修正目錄新場(chǎng)景圖片扔進(jìn)去模型跑完預(yù)標(biāo)注人工逐張抽檢而不是全部人工框選。兩三輪迭代之后半掛車檢測(cè)模型基本能覆蓋到實(shí)際業(yè)務(wù)與場(chǎng)景。需要提醒的是如果你最后要跑的是嵌入式設(shè)備增強(qiáng)別開(kāi)得過(guò)猛大尺度平移旋轉(zhuǎn)會(huì)讓模型復(fù)雜度上升部署時(shí)的TensorRT轉(zhuǎn)換會(huì)更加敏感記得在增強(qiáng)和部署權(quán)衡之間留出余地。半掛車檢測(cè)這類任務(wù)難在目標(biāo)形態(tài)極端、采集場(chǎng)景封閉而不在模型結(jié)構(gòu)本身。546張圖足夠起步但真正穩(wěn)定的模型永遠(yuǎn)要多方場(chǎng)景的數(shù)據(jù)疊加。我每次訓(xùn)完一批新數(shù)據(jù)都會(huì)把真正挑出來(lái)驗(yàn)證效果的五張現(xiàn)場(chǎng)圖順著訓(xùn)練流程回放一遍確保人是真的看過(guò)而不是只信指標(biāo)。可能有讀者已經(jīng)注意到這次分享通篇都在強(qiáng)調(diào)“標(biāo)簽與劃分的正確性優(yōu)于模型結(jié)構(gòu)”這也是做檢測(cè)數(shù)據(jù)集項(xiàng)目最容易忽視的一點(diǎn)。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取