數(shù)據(jù)集:YOLO訓(xùn)練與小目標(biāo)調(diào)優(yōu)實(shí)戰(zhàn))
簡(jiǎn)介面向目標(biāo)檢測(cè)學(xué)習(xí)與研究的高爾夫場(chǎng)景數(shù)據(jù)集聚焦高爾夫球、球桿手柄、球桿頭三個(gè)類別共包含一萬三千一百三十四張JPEG圖片以及對(duì)應(yīng)的Pascal VOC格式XML標(biāo)注和YOLO格式TXT標(biāo)注適合需要訓(xùn)練高爾夫檢測(cè)模型的開發(fā)者和學(xué)生使用也可用于算法驗(yàn)證、數(shù)據(jù)增強(qiáng)效果對(duì)比等場(chǎng)景。壓縮包共兩千個(gè)文件以XML標(biāo)注文件為主另包含說明文本整體大小約九百零七兆字節(jié)其中XML便于Pascal VOC解析TXT可直接用于YOLO系列模型訓(xùn)練。標(biāo)注使用labelImg工具繪制矩形框三個(gè)類別合計(jì)三萬三千四百一十三個(gè)目標(biāo)框球桿手柄框數(shù)最多圖片包含增強(qiáng)版本下載前請(qǐng)留意。高爾夫場(chǎng)景中目標(biāo)尺寸差異大、背景復(fù)雜本數(shù)據(jù)集可為小目標(biāo)檢測(cè)、遮擋處理等相關(guān)研究提供基礎(chǔ)標(biāo)注支持。目前已有三百二十六人學(xué)習(xí)下載數(shù)據(jù)僅保證標(biāo)注合理準(zhǔn)確不承諾模型訓(xùn)練精度請(qǐng)根據(jù)實(shí)際任務(wù)評(píng)估后使用。 做目標(biāo)檢測(cè)項(xiàng)目這些年我養(yǎng)成了一個(gè)習(xí)慣拿到一個(gè)新數(shù)據(jù)集先不做訓(xùn)練而是先做“體檢”。最近剛好在整理一批體育場(chǎng)景的數(shù)據(jù)其中這套高爾夫球、球桿、球頭檢測(cè)數(shù)據(jù)集讓我印象挺深——13100張圖3個(gè)類別VOC和YOLO兩種格式全部就位還帶增強(qiáng)版本。光看配置這已經(jīng)算是一個(gè)可以“開箱即用”的中小規(guī)模數(shù)據(jù)集了。為什么我對(duì)這種細(xì)分場(chǎng)景這么上心因?yàn)橥ㄓ脭?shù)據(jù)集大家都跑膩了真正到了實(shí)際項(xiàng)目里你面對(duì)的都是高爾夫球這樣“不那么標(biāo)準(zhǔn)”的目標(biāo)小、顏色和背景接近、運(yùn)動(dòng)模糊、光照變化大。一套干凈、標(biāo)注準(zhǔn)確的行業(yè)數(shù)據(jù)集比十套通用數(shù)據(jù)集更能幫你把模型調(diào)扎實(shí)。這篇文章不打算寫成廣告貼而是想借這套數(shù)據(jù)把體育場(chǎng)景目標(biāo)檢測(cè)從數(shù)據(jù)檢查、格式理解到訓(xùn)練調(diào)參的完整鏈路捋一遍給正在找數(shù)據(jù)集、或者剛?cè)胧諽OLO訓(xùn)練自定義數(shù)據(jù)的同學(xué)做個(gè)參考。1. 數(shù)據(jù)集的定位與整體設(shè)計(jì)思路1.1 為什么單把“球、桿、球頭”拎出來做檢測(cè)高爾夫場(chǎng)景里的檢測(cè)任務(wù)和車牌識(shí)別、工業(yè)質(zhì)檢這類場(chǎng)景相比有個(gè)明顯特點(diǎn)目標(biāo)的尺度跨度極大而且類別之間有強(qiáng)關(guān)聯(lián)。高爾夫球典型小目標(biāo)直徑在圖像里可能只有二三十像素。白球在陽光下還容易過曝黃球在草地上的對(duì)比度又不夠這對(duì)模型的紋理特征提取能力要求很高。高爾夫球桿長(zhǎng)條形目標(biāo)整體占比大但細(xì)長(zhǎng)結(jié)構(gòu)對(duì)邊界框回歸不友好。球桿在揮桿動(dòng)作中會(huì)有大幅度旋轉(zhuǎn)框的寬高比變化劇烈。球頭桿頭球桿末端的金屬部件體積小、反光強(qiáng)還經(jīng)常被手部或桿身遮擋屬于“小目標(biāo)部分遮擋”的復(fù)合難題。這三個(gè)類別放在同一個(gè)數(shù)據(jù)集里等于逼著檢測(cè)器同時(shí)解決多尺度、強(qiáng)反光、旋轉(zhuǎn)變化、部分遮擋四類問題。用網(wǎng)上下載的通用預(yù)訓(xùn)練權(quán)重直接跑大概率會(huì)在球和球頭這兩類上翻車——不是漏檢就是誤檢。從這個(gè)角度看這套數(shù)據(jù)的價(jià)值不只是“能用來訓(xùn)練”更是給模型做針對(duì)性調(diào)優(yōu)的絕佳測(cè)試床。1.2 13100張的量級(jí)意味著什么先算一筆賬13100張圖3個(gè)類別平均下來每類約4300張。這個(gè)規(guī)模在行業(yè)數(shù)據(jù)集里是什么水平對(duì)比一下就清楚了數(shù)據(jù)集圖像數(shù)量類別數(shù)定位PASCAL VOC 20072012約2萬張20類通用物體檢測(cè)標(biāo)準(zhǔn)測(cè)試集COCO約33萬張80類大規(guī)模通用檢測(cè)訓(xùn)練集這套高爾夫數(shù)據(jù)集13100張3類行業(yè)垂直場(chǎng)景專精數(shù)據(jù)13100張的量級(jí)做遷移學(xué)習(xí)完全夠用。我的經(jīng)驗(yàn)是垂直場(chǎng)景下單類目標(biāo)有3000張以上高質(zhì)量標(biāo)注圖配合預(yù)訓(xùn)練權(quán)重做微調(diào)mAP0.5就有機(jī)會(huì)沖到0.9以上如果到了8000張以上基本可以覆蓋絕大多數(shù)現(xiàn)場(chǎng)光照和角度變化。這套數(shù)據(jù)正好卡在“夠用且不冗余”的甜點(diǎn)區(qū)訓(xùn)練時(shí)間可控迭代速度快特別適合做算法的快速驗(yàn)證和上線前評(píng)估。還有一個(gè)細(xì)節(jié)值得注意標(biāo)題里寫了“含增強(qiáng)”。這是行業(yè)數(shù)據(jù)集的常見做法——原始圖片之外再通過翻轉(zhuǎn)、旋轉(zhuǎn)、亮度調(diào)節(jié)、馬賽克拼接等離線增強(qiáng)手段擴(kuò)展樣本量。增強(qiáng)后的圖片需要同步做標(biāo)注框變換很多小數(shù)據(jù)集之所以不好用就是因?yàn)樵鰪?qiáng)圖和標(biāo)注沒對(duì)齊。這套數(shù)據(jù)既然標(biāo)注了含增強(qiáng)說明作者在數(shù)據(jù)生產(chǎn)的完整性上是有意識(shí)的這對(duì)使用方來說能省掉不少數(shù)據(jù)清洗的功夫。1.3 VOC和YOLO雙格式為什么重要PASCAL VOC格式的標(biāo)注文件是XML結(jié)構(gòu)目標(biāo)信息放在object節(jié)點(diǎn)里框坐標(biāo)用bndbox里的xmin、ymin、xmax、ymax四個(gè)整數(shù)表示直觀、可讀性強(qiáng)適合在標(biāo)注工具里二次編輯也是MMDetection、Detectron2這些檢測(cè)框架偏好的輸入格式。YOLO格式則完全不同每張圖對(duì)應(yīng)一個(gè)同名txt文件每行代表一個(gè)目標(biāo)格式是class_id x_center y_center width height坐標(biāo)全部歸一化到0~1區(qū)間類別id從0開始編號(hào)。這種格式犧牲了可讀性但換來的是訓(xùn)練時(shí)的讀取效率YOLOv5、YOLOv8這些主流版本直接吃這種格式。實(shí)際項(xiàng)目里最怕的就是“格式鎖死”。你從網(wǎng)上下載的訓(xùn)練腳本要VOC你手上的數(shù)據(jù)是YOLO轉(zhuǎn)換時(shí)稍不注意坐標(biāo)就偏了。雙格式發(fā)布意味著拿到手之后不管是走YOLO系列快速出效果還是切到MMDetection做對(duì)比實(shí)驗(yàn)都不用自己寫轉(zhuǎn)換腳本。這個(gè)看起來很不起眼的點(diǎn)真到工程落地上能省半天時(shí)間。2. 核心細(xì)節(jié)解析與實(shí)操要點(diǎn)2.1 數(shù)據(jù)質(zhì)量檢查的五個(gè)維度拿到任何數(shù)據(jù)集我建議先花一小時(shí)做靜態(tài)檢查不要急著開訓(xùn)練。檢查維度就五條類別分布統(tǒng)計(jì)每個(gè)類別的目標(biāo)數(shù)量。如果球類有2萬個(gè)框球頭只有6000個(gè)這就是典型的類別不平衡訓(xùn)練時(shí)要做focal loss或者過采樣不然模型會(huì)偏向樣本量大的類別。圖像分辨率確認(rèn)所有圖片是否統(tǒng)一尺寸還是大小混雜。分辨率不一致的情況下訓(xùn)練時(shí)resize策略會(huì)影響小目標(biāo)的檢測(cè)效果。標(biāo)注框質(zhì)量抽查圖片重點(diǎn)看邊界框是否緊貼目標(biāo)邊緣、有沒有漏標(biāo)、有沒有把背景框進(jìn)來。特別是運(yùn)動(dòng)模糊的球有些人標(biāo)注喜歡框大一圈這會(huì)對(duì)模型的定位精度產(chǎn)生負(fù)面影響。坐標(biāo)合法性檢查有沒有越界坐標(biāo)比如xmax大于圖片寬度、坐標(biāo)出現(xiàn)負(fù)值。這類臟數(shù)據(jù)訓(xùn)練時(shí)會(huì)導(dǎo)致loss異常甚至訓(xùn)練崩潰。數(shù)據(jù)劃分合理性確認(rèn)train/val/test是按場(chǎng)景隨機(jī)劃分的而不是按目錄簡(jiǎn)單切分。如果同一段連續(xù)拍攝的圖片全進(jìn)了訓(xùn)練集驗(yàn)證集就失去了意義。分享一個(gè)我自己寫的數(shù)據(jù)集統(tǒng)計(jì)小腳本可以用幾行代碼快速過一遍前四項(xiàng)import os from pathlib import Path from collections import Counter label_dir Path(labels/train) class_counter Counter() boxes [] for txt_file in label_dir.glob(*.txt): with open(txt_file, r) as f: lines f.readlines() class_counter[len(lines)] # 每圖目標(biāo)數(shù)分布 for line in lines: parts line.strip().split() if len(parts) ! 5: print(f格式錯(cuò)誤: {txt_file} - {line}) continue cls, x_c, y_c, w, h map(float, parts) boxes.append((w, h)) if w 0 or h 0 or x_c 1 or y_c 1: print(f疑似越界框: {txt_file} - {line}) print(類別分布:, class_counter)跑完這個(gè)腳本哪些類別少、哪些框異常一眼就能看出來。數(shù)據(jù)質(zhì)量不過關(guān)后面所有努力都白費(fèi)。2.2 數(shù)據(jù)增強(qiáng)的“度”怎么把握數(shù)據(jù)增強(qiáng)是提升模型泛化能力的有效手段但很多人容易走極端。我的建議是增強(qiáng)的幅度要符合目標(biāo)本身的物理規(guī)律。高爾夫球的圓形特征決定了它對(duì)翻轉(zhuǎn)、大角度旋轉(zhuǎn)天然魯棒多加旋轉(zhuǎn)增強(qiáng)幾乎沒有副作用。但球桿不行——球桿是細(xì)長(zhǎng)條結(jié)構(gòu)雖然旋轉(zhuǎn)后還是球桿但如果增強(qiáng)策略里包含極端的長(zhǎng)寬比拉伸會(huì)讓模型對(duì)“正常球桿就該是細(xì)長(zhǎng)的”這個(gè)先驗(yàn)產(chǎn)生混淆反而降低檢測(cè)精度。光照調(diào)整對(duì)高爾夫場(chǎng)景特別重要。戶外球場(chǎng)的光照變化很大晴天、陰天、逆光、陰影下同一個(gè)球拍出來的顏色差異非常大。在HSV空間做適度的飽和度、亮度擾動(dòng)能顯著提升模型在不同天氣條件下的魯棒性。這比單純加噪聲有效得多。還有一點(diǎn)值得提醒增強(qiáng)數(shù)據(jù)要控制比例。如果訓(xùn)練集里80%都是增強(qiáng)圖原始圖只占20%模型容易記住增強(qiáng)引入的偽特征。我的經(jīng)驗(yàn)是增強(qiáng)圖占比控制在30%~50%并且確保驗(yàn)證集只用原始圖片否則你評(píng)估的指標(biāo)根本反映不了真實(shí)場(chǎng)景的表現(xiàn)。2.3 檢測(cè)難度的“鄙視鏈”球球桿球頭同樣是數(shù)據(jù)集里的三個(gè)類別訓(xùn)練難度天差地別。我習(xí)慣用一張表格快速判斷調(diào)優(yōu)優(yōu)先級(jí)類別目標(biāo)尺寸主要干擾因素預(yù)期難點(diǎn)高爾夫球極小與背景對(duì)比度低、運(yùn)動(dòng)模糊、密集排列小目標(biāo)漏檢球桿大長(zhǎng)寬比極端、旋轉(zhuǎn)、場(chǎng)景中其他長(zhǎng)條物體誤檢、定位偏移球頭小反光、遮擋、與桿身顏色混淆漏檢定位不精確這里說的“小目標(biāo)”在COCO的定義里是指像素面積小于32×32的物體。高爾夫球在遠(yuǎn)距離鏡頭下正好卡在這個(gè)臨界值附近。所以如果直接用COCO預(yù)訓(xùn)練權(quán)重去推理球這類的召回率通常不理想。想要提升就得從訓(xùn)練分辨率、檢測(cè)頭結(jié)構(gòu)、數(shù)據(jù)增強(qiáng)三個(gè)方向下功夫后面第四章會(huì)展開講。3. 實(shí)操過程與核心環(huán)節(jié)實(shí)現(xiàn)3.1 訓(xùn)練前的數(shù)據(jù)準(zhǔn)備完整流程拿到壓縮包解壓后建議先按下面的目錄結(jié)構(gòu)整理。YOLOv5和YOLOv8都原生支持這種組織方式golf_dataset/ ├── images/ │ ├── train/ │ ├── val/ │ └── test/ ├── labels/ │ ├── train/ │ ├── val/ │ └── test/ └── golf.yaml如果原始包的圖片和標(biāo)簽是放在同一個(gè)目錄下或者圖片集是整體一份、標(biāo)簽按格式分了兩份那就需要先寫一個(gè)小腳本把train和val拆分出來。常見做法是8:1:1比例劃分但要注意劃分前先對(duì)圖片文件名做shuffle避免連續(xù)拍攝的相似圖片全部堆到訓(xùn)練集或者驗(yàn)證集里。目錄就緒后寫golf.yaml配置文件這是YOLOv8訓(xùn)練的核心入口之一# golf.yaml path: /path/to/golf_dataset # 數(shù)據(jù)集的絕對(duì)路徑 train: images/train val: images/val test: images/test names: 0: golf_ball 1: golf_club 2: golf_club_head一個(gè)容易踩的坑是path路徑寫錯(cuò)。YOLOv8在Linux下對(duì)相對(duì)路徑的處理比較嚴(yán)格如果你的目錄結(jié)構(gòu)是標(biāo)準(zhǔn)的train: images/train沒問題但如果你把images和labels拆到了兩個(gè)頂層目錄就要寫成train: ../images/train這種相對(duì)路徑否則路徑拼接會(huì)找不到文件。3.2 YOLOv8訓(xùn)練自定義數(shù)據(jù)集的完整流程假設(shè)你已經(jīng)裝好了ultralytics庫和對(duì)應(yīng)版本的PyTorch訓(xùn)練命令非常簡(jiǎn)潔yolo detect train datagolf.yaml modelyolov8s.pt epochs100 imgsz640 batch16 device0幾個(gè)參數(shù)選擇背后的邏輯說一下modelyolov8s.pt用s版本做遷移學(xué)習(xí)。這套數(shù)據(jù)只有3類s模型參數(shù)量約1100萬在消費(fèi)級(jí)顯卡上訓(xùn)練速度合適精度也夠。先跑通流程、拿到基線指標(biāo)之后再往m或l版本升級(jí)對(duì)比。如果你顯卡顯存充足12GB以上也可以直接上yolov8m.pt。imgsz640默認(rèn)值。但如果你發(fā)現(xiàn)高爾夫球這類小目標(biāo)檢測(cè)效果差后面可以單獨(dú)提升到960或1280做對(duì)比實(shí)驗(yàn)。代價(jià)是訓(xùn)練時(shí)間幾乎翻倍。batch16根據(jù)顯存動(dòng)態(tài)調(diào)整。8GB顯存建議816GB顯存可以試16顯存不夠就報(bào)OOM這是最常見的報(bào)錯(cuò)點(diǎn)。epochs100對(duì)于遷移學(xué)習(xí)100輪基本能讓loss充分收斂。如果50輪后val loss就不再下降可以提前終止。訓(xùn)練過程中需要盯的兩個(gè)指標(biāo)是box_loss和cls_loss。正常情況兩者應(yīng)該持續(xù)下降并在后期趨于平緩。如果box_loss一直震蕩不降優(yōu)先排查學(xué)習(xí)率設(shè)置和數(shù)據(jù)標(biāo)注質(zhì)量不要盲目堆訓(xùn)練輪數(shù)。對(duì)于AMD顯卡用戶這里多說一句RX 580這類老顯卡顯存只有4GB或8GB跑YOLOv8不是不行但不支持CUDA需要使用ROCm版本的PyTorch或者干脆用CPU跑。CPU跑yolov8s、imgsz640一個(gè)epoch大概要多花幾倍的時(shí)間100輪訓(xùn)練可能要跑到一天以上。我的建議是AMD老顯卡用戶先用Colab等在線Notebook做實(shí)驗(yàn)本地機(jī)器留作數(shù)據(jù)標(biāo)注和后期推理測(cè)試。3.3 訓(xùn)練后評(píng)估指標(biāo)怎么解讀訓(xùn)練結(jié)束后runs/detect/train目錄下會(huì)生成results.png、confusion_matrix.png、F1_curve.png等一系列圖表。重點(diǎn)看四類指標(biāo)mAP0.5IoU閾值0.5下的平均精度。這是目標(biāo)檢測(cè)領(lǐng)域最常用的“及格線”指標(biāo)一般0.85以上算可用水平。mAP0.5:0.95從0.5到0.95逐檔計(jì)算IoU下的平均精度對(duì)定位精度要求更苛刻。如果你發(fā)現(xiàn)mAP0.5高但mAP0.5:0.95低說明模型存在定位偏差——框雖然框住了目標(biāo)但不夠緊湊。Precision和Recall兩個(gè)指標(biāo)要一起看。Precision高說明誤檢少Recall高說明漏檢少。高爾夫球類如果Precision高但Recall低大概率是球目標(biāo)被漏掉了需要從數(shù)據(jù)增強(qiáng)和小目標(biāo)策略入手?;煜仃囍攸c(diǎn)看球桿和球頭之間是否存在系統(tǒng)性誤檢。這兩個(gè)類別物理上相鄰球桿的桿頭部分經(jīng)常被同時(shí)框出如果混淆矩陣?yán)镉幸粔K明顯的非對(duì)稱亮區(qū)就要考慮是不是標(biāo)注邊界不清晰導(dǎo)致的。這里給一個(gè)經(jīng)驗(yàn)參考區(qū)間以這套高爾夫數(shù)據(jù)集的規(guī)模和場(chǎng)景復(fù)雜度YOLOv8s訓(xùn)練100輪后mAP0.5達(dá)到0.88~0.93是正常的如果低于0.85先檢查數(shù)據(jù)質(zhì)量再考慮調(diào)參不要急著換更大的模型。4. 常見問題與排查技巧實(shí)錄4.1 VOC轉(zhuǎn)YOLO的格式陷阱雖然這套數(shù)據(jù)集提供了雙格式但難免遇到其他數(shù)據(jù)集只有VOC格式的情況。轉(zhuǎn)換時(shí)最常見的坑有三個(gè)第一類別id從0還是從1開始。YOLO要求從0開始PASCAL VOC沒有硬性規(guī)定但很多標(biāo)注工具的類別列表是從1開始的。轉(zhuǎn)換時(shí)忘記減1會(huì)導(dǎo)致所有標(biāo)簽系統(tǒng)性錯(cuò)位。第二坐標(biāo)歸一化越界。XML里的xmax、ymax偶爾會(huì)超出圖片尺寸歸一化后得到大于1的值訓(xùn)練時(shí)會(huì)被當(dāng)作無效框丟棄。轉(zhuǎn)換腳本里必須加越界判斷和截?cái)嗵幚?。第三空?biāo)注文件處理。YOLO格式允許空txt文件表示該圖沒有目標(biāo)但有些訓(xùn)練框架對(duì)此支持不佳。穩(wěn)妥的做法是檢測(cè)到空XML時(shí)生成一個(gè)內(nèi)容為空的txt文件同時(shí)確認(rèn)圖片沒有被錯(cuò)誤地排除。下面這個(gè)轉(zhuǎn)換函數(shù)是正確邏輯的參考import xml.etree.ElementTree as ET def voc_to_yolo(xml_file, img_width, img_height, class_names): tree ET.parse(xml_file) root tree.getroot() lines [] for obj in root.findall(object): name obj.find(name).text if name not in class_names: continue cls_id class_names.index(name) box obj.find(bndbox) xmin max(float(box.find(xmin).text), 0) ymin max(float(box.find(ymin).text), 0) xmax min(float(box.find(xmax).text), img_width) ymax min(float(box.find(ymax).text), img_height) 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{cls_id} {x_center:.6f} {y_center:.6f} {width:.6f} {height:.6f}) return lines這里對(duì)坐標(biāo)做了雙向截?cái)嘈∮?的歸0大于寬高的歸寬高能從根源上避免越界問題。4.2 訓(xùn)練不收斂或精度低的排查順序我見過太多人一上來就調(diào)學(xué)習(xí)率、換優(yōu)化器、堆數(shù)據(jù)增強(qiáng)結(jié)果問題出在最基礎(chǔ)的地方。分享一下我排查“模型精度低”的標(biāo)準(zhǔn)順序確認(rèn)數(shù)據(jù)劃分train和val圖片有沒有重疊或者val集本身包含異常困難樣本。先跑一遍yolo detect val看val loss和train loss的差距如果val loss遠(yuǎn)高于train loss那就是過擬合或分布不一致。檢查類別失衡如果球頭樣本量只有球的五分之一模型很容易為了降低整體loss而犧牲球頭的檢測(cè)精度。這時(shí)優(yōu)先做類別加權(quán)采樣或者對(duì)球頭小目標(biāo)做Copy-Paste增強(qiáng)擴(kuò)充數(shù)量。確認(rèn)錨框匹配YOLOv5和YOLOv8的自適應(yīng)錨框機(jī)制會(huì)自動(dòng)計(jì)算但如果你的數(shù)據(jù)集目標(biāo)尺寸分布極度不均勻建議手動(dòng)指定anchors參數(shù)。實(shí)測(cè)下來對(duì)于高爾夫球這種小目標(biāo)占比較高的場(chǎng)景適當(dāng)減少大尺度錨框數(shù)量會(huì)有一定提升。調(diào)整訓(xùn)練分辨率這是提升小目標(biāo)最直接的手段。從640提升到960球類目標(biāo)的檢測(cè)精度往往能提升3到5個(gè)點(diǎn)。代價(jià)是顯存占用增加和訓(xùn)練時(shí)間變長(zhǎng)。排查有一個(gè)原則一次只動(dòng)一個(gè)變量。很多人喜歡同時(shí)改數(shù)據(jù)增強(qiáng)、改學(xué)習(xí)率、改模型結(jié)構(gòu)結(jié)果精度提升了也不知道是哪個(gè)改動(dòng)起的作用后面復(fù)現(xiàn)又出問題。4.3 小目標(biāo)檢測(cè)的幾條實(shí)戰(zhàn)調(diào)優(yōu)路徑高爾夫球這類小目標(biāo)檢測(cè)光靠調(diào)參數(shù)很難達(dá)到完美效果需要組合拳。我梳理過一套實(shí)戰(zhàn)路徑按成本從低到高排序SAHI切片推理推理時(shí)把大圖切成小塊對(duì)每個(gè)小塊單獨(dú)檢測(cè)再合并結(jié)果。對(duì)小目標(biāo)檢測(cè)效果提升明顯而且不需要重新訓(xùn)練。缺點(diǎn)是推理時(shí)間變長(zhǎng)適合離線處理。提高訓(xùn)練分辨率把imgsz從640提到960或1280。相當(dāng)于讓模型在高分辨率下看到更多小目標(biāo)的細(xì)節(jié)。增加P2檢測(cè)層YOLOv8的檢測(cè)頭P3/P4/P5對(duì)應(yīng)下采樣8/16/32倍特征圖。增加P2層下采樣4倍后模型對(duì)小目標(biāo)的感知能力會(huì)增強(qiáng)代價(jià)是計(jì)算量上升。針對(duì)小目標(biāo)的過采樣訓(xùn)練時(shí)對(duì)包含小目標(biāo)較多的圖片提高采樣概率讓模型在每輪迭代中看到更多小目標(biāo)樣本。最后再分享一個(gè)細(xì)節(jié)訓(xùn)練完保存best.pt之后導(dǎo)出模型時(shí)如果要用TensorRT加速記得在導(dǎo)出命令里也把imgsz參數(shù)調(diào)成和訓(xùn)練時(shí)一致。實(shí)測(cè)很多人在這一步偷懶沒改導(dǎo)致導(dǎo)出后的模型推理精度和訓(xùn)練時(shí)對(duì)不上排查半天發(fā)現(xiàn)是輸入分辨率不一致?;氐介_頭那句話數(shù)據(jù)集是目標(biāo)檢測(cè)項(xiàng)目的地基。這套13100張的高爾夫球、球桿、球頭檢測(cè)數(shù)據(jù)集無論從規(guī)模、類別設(shè)計(jì)還是雙格式發(fā)布的角度都算得上乘。但真正決定項(xiàng)目成敗的不是哪一份數(shù)據(jù)集而是你拿到數(shù)據(jù)之后有沒有做嚴(yán)格的體檢、有沒有理解每類目標(biāo)的物理特性、有沒有針對(duì)小目標(biāo)做系統(tǒng)性的調(diào)優(yōu)。把這套方法論吃透你會(huì)發(fā)現(xiàn)換到其他垂直場(chǎng)景也照樣管用。本文還有配套的精品資源點(diǎn)擊獲取