檢測(cè)優(yōu)化實(shí)踐)
搞目標(biāo)檢測(cè)的人應(yīng)該有個(gè)共識(shí)一場(chǎng)足球比賽視頻可能是計(jì)算機(jī)視覺最容易讓模型當(dāng)場(chǎng)破防的場(chǎng)景之一。鏡頭拉遠(yuǎn)的時(shí)候場(chǎng)上的球員縮成一小團(tuán)特寫推進(jìn)之后同一個(gè)球員直接頂滿畫面而足球依然只有幾十個(gè)像素。更別提草地、球衣、陰影混在一起的顏色噪聲以及頻繁切換的轉(zhuǎn)播機(jī)位。我最近把這件事當(dāng)成一個(gè)正經(jīng)的檢測(cè)工程來(lái)做就是標(biāo)題里這套YOLO11-C3k2-ConverseB方案目標(biāo)是同時(shí)穩(wěn)定識(shí)別運(yùn)動(dòng)員、足球和場(chǎng)地三類目標(biāo)。這篇文章會(huì)完整講清楚改進(jìn)思路、數(shù)據(jù)標(biāo)注方式、訓(xùn)練調(diào)參過程、踩過的坑和最終落地效果適合那些想復(fù)現(xiàn)足球場(chǎng)景檢測(cè)、或者正在處理“小目標(biāo)尺度跨度極大”檢測(cè)任務(wù)的工程師參考。先說(shuō)結(jié)論在公開賽事轉(zhuǎn)播素材和自制比賽錄像混合集上這套結(jié)構(gòu)比原版YOLO11s在足球小目標(biāo)上的mAP50-95提升了接近6個(gè)點(diǎn)運(yùn)動(dòng)員類別在高分辨率輸入下也有可感知的改善同時(shí)推理速度沒有明顯劣化。但整個(gè)工程里最折磨人的其實(shí)不是模型結(jié)構(gòu)而是數(shù)據(jù)。下面按我的實(shí)際流程往下拆。1. 足球場(chǎng)景目標(biāo)檢測(cè)難點(diǎn)到底在哪1.1 三類目標(biāo)在尺度上的巨大鴻溝看一場(chǎng)足球轉(zhuǎn)播畫面你會(huì)發(fā)現(xiàn)模型面對(duì)的根本不是“三個(gè)普通類別”而是三類尺度天差地別的物體。把國(guó)際標(biāo)準(zhǔn)球場(chǎng)尺寸放進(jìn)去算一筆賬足球場(chǎng)長(zhǎng)約105米寬約68米。轉(zhuǎn)播廣角鏡頭通常能覆蓋半場(chǎng)甚至大半場(chǎng)假設(shè)畫面中有約50米寬的區(qū)域映射到1920像素的傳感器寬度上那么每米對(duì)應(yīng)約38像素。一個(gè)1.8米高的球員在畫面里大約只有68像素高而足球直徑只有22厘米左右換算下來(lái)只有8個(gè)像素出頭。8個(gè)像素意味著下采樣到P3特征層stride 8的時(shí)候足球已經(jīng)只剩下大約1個(gè)像素的特征響應(yīng)基本等于被洗掉了。這還不算高速運(yùn)動(dòng)產(chǎn)生的拖影和模糊。場(chǎng)地則走上另一個(gè)極端。如果標(biāo)注整個(gè)草皮區(qū)域或完整的場(chǎng)地標(biāo)線它在畫面中通常占據(jù)幾千甚至上萬(wàn)像素屬于極端大目標(biāo)。絕大多數(shù)目標(biāo)檢測(cè)框的回歸頭是為中小物體設(shè)計(jì)的對(duì)這類“鋪滿全圖”的大目標(biāo)反而容易框得歪歪扭扭邊界抖動(dòng)嚴(yán)重。我最初用640×640輸入訓(xùn)練時(shí)運(yùn)動(dòng)員和場(chǎng)地都能跑到不錯(cuò)的指標(biāo)唯獨(dú)足球類的mAP50只有0.35左右基本不可用。這就是尺度鴻溝帶來(lái)的直接后果也決定了后面所有技術(shù)選型都要圍繞“如何讓小目標(biāo)活下來(lái)”展開。1.2 鏡頭切換與光照波動(dòng)帶來(lái)的分布漂移足球視頻還有一個(gè)隱藏屬性鏡頭一直在變。轉(zhuǎn)播會(huì)在大遠(yuǎn)景、中景、特寫之間反復(fù)橫跳同一個(gè)球員在不同鏡頭下的尺度可能相差10倍以上。模型在訓(xùn)練時(shí)如果只吃一種尺度的樣本推理時(shí)就很容易在另一種鏡頭上翻車。光照問題同樣麻煩。日?qǐng)?、夜?chǎng)、陰天、燈光不均勻的業(yè)余球場(chǎng)草皮顏色從深綠到偏黃都有。球衣顏色更是五花八門。我一開始只用某幾場(chǎng)比賽的幀做訓(xùn)練結(jié)果換到另一場(chǎng)比賽時(shí)球員漏檢率直接漲了十幾個(gè)點(diǎn)。這說(shuō)明足球場(chǎng)景的數(shù)據(jù)增強(qiáng)不是隨便做做而是要刻意制造“跨場(chǎng)地、跨光照、跨鏡頭尺度”的多樣性。這也是為什么后來(lái)我堅(jiān)持把輸入分辨率抬到960甚至1280單純從檢測(cè)精度角度看這個(gè)選擇帶來(lái)的收益比換任何模塊都大。2. 模型選型與改進(jìn)思路為什么是YOLO11 C3k2 ConverseB2.1 基線YOLO11底子里的優(yōu)勢(shì)選YOLO11而不是更早的YOLOv8或YOLOv5主要看中它在骨架和頸部上的兩個(gè)變化。一是用C3k2模塊替代了之前的C2f整體參數(shù)更省、計(jì)算更集中二是它保留了anchor-free解耦檢測(cè)頭和任務(wù)對(duì)齊學(xué)習(xí)機(jī)制對(duì)尺度變化和遮擋的適應(yīng)能力比老一代強(qiáng)不少。在實(shí)際對(duì)比中YOLO11s在同等輸入下比YOLOv8s的參數(shù)量少約15%推理速度快一點(diǎn)mAP還略高。對(duì)于需要在轉(zhuǎn)播流上做實(shí)時(shí)或準(zhǔn)實(shí)時(shí)檢測(cè)的項(xiàng)目這個(gè)底子是劃算的。但直接拿原版模型跑足球場(chǎng)景會(huì)暴露兩個(gè)痛點(diǎn)一是足球這類小目標(biāo)在下采樣過程中信息損耗太嚴(yán)重二是普通Bottleneck結(jié)構(gòu)對(duì)不同尺度目標(biāo)的特征表達(dá)“一視同仁”沒有對(duì)大目標(biāo)和小目標(biāo)做差異化處理。我的改進(jìn)就落在這兩個(gè)點(diǎn)上分別對(duì)應(yīng)C3k2的調(diào)整和ConverseB模塊的引入。2.2 C3k2模塊輕量CSP結(jié)構(gòu)里的關(guān)鍵參數(shù)先補(bǔ)個(gè)背景。C3k2是YOLO11里核心的CSP風(fēng)格模塊名字里的k指代內(nèi)部Bottleneck的卷積核尺寸。結(jié)構(gòu)上看它把輸入通道分成兩個(gè)分支一個(gè)分支直接通過1×1卷積映射另一個(gè)分支經(jīng)過1×1卷積后串聯(lián)k個(gè)Bottleneck塊最后再拼接起來(lái)。k越大模塊感受野越大、非線性表達(dá)能力越強(qiáng)但計(jì)算量也線性上漲。原版YOLO11默認(rèn)在淺層用k2的Bottleneck深層用k3。我在復(fù)現(xiàn)時(shí)保留了這種分層策略但針對(duì)場(chǎng)地這類大目標(biāo)、以及球員這類中等目標(biāo)把深層網(wǎng)絡(luò)的兩個(gè)C3k2模塊內(nèi)部的Bottleneck卷積核從3×3擴(kuò)大到了5×5和7×7的組合。代價(jià)是FLOPs增加了一點(diǎn)但換來(lái)了對(duì)大范圍上下文更好的聚合能力。實(shí)驗(yàn)證明場(chǎng)地標(biāo)線檢測(cè)的邊界完整性明顯變好不再頻繁出現(xiàn)“框出去半截”的情況。這里有個(gè)容易忽略的細(xì)節(jié)C3k2內(nèi)部的Bottleneck通常帶殘差連接而殘差連接要求輸入輸出通道數(shù)一致。所以調(diào)整卷積核尺寸時(shí)要同步檢查shortcut分支的通道對(duì)齊否則一改就報(bào)錯(cuò)。2.3 ConverseB模塊為三類目標(biāo)定制的特征融合塊ConverseB是這次復(fù)現(xiàn)的項(xiàng)目里比較關(guān)鍵的自定義模塊名字是我自己起的含義是“卷積殘差變體塊”。核心思路很簡(jiǎn)單原本C3k2內(nèi)部的Bottleneck是“1×1降維→3×3卷積→1×1升維”的結(jié)構(gòu)對(duì)中等目標(biāo)友好但小目標(biāo)經(jīng)過兩次降維升維后空間細(xì)節(jié)丟得厲害。我把它改成類倒殘差設(shè)計(jì)先做1×1升維再用分組卷積做3×3或者5×5的空間特征提取最后1×1降維到目標(biāo)通道。這個(gè)結(jié)構(gòu)最早在移動(dòng)端網(wǎng)絡(luò)里被驗(yàn)證過特點(diǎn)是“先漲維度再提特征”能保留更多空間細(xì)節(jié)。同時(shí)在殘差邊上加了一個(gè)可選的通道注意力分支用全局平均池化算出通道權(quán)重對(duì)足球這類微弱目標(biāo)進(jìn)行通道級(jí)增強(qiáng)。復(fù)現(xiàn)時(shí)我寫過一個(gè)最小實(shí)現(xiàn)核心邏輯長(zhǎng)這樣import torch import torch.nn as nn class ConverseB(nn.Module): def __init__(self, in_channels, out_channels, kernel_size3, stride1, expand_ratio2.0, use_seTrue): super().__init__() hidden_dim int(in_channels * expand_ratio) self.conv1 nn.Conv2d(in_channels, hidden_dim, 1, 1, biasFalse) self.bn1 nn.BatchNorm2d(hidden_dim) self.act1 nn.SiLU(inplaceTrue) self.conv2 nn.Conv2d(hidden_dim, hidden_dim, kernel_size, stride, kernel_size // 2, groupshidden_dim, biasFalse) self.bn2 nn.BatchNorm2d(hidden_dim) self.act2 nn.SiLU(inplaceTrue) self.conv3 nn.Conv2d(hidden_dim, out_channels, 1, 1, biasFalse) self.bn3 nn.BatchNorm2d(out_channels) self.use_se use_se if use_se: self.se nn.Sequential( nn.AdaptiveAvgPool2d(1), nn.Conv2d(out_channels, out_channels // 4, 1), nn.SiLU(inplaceTrue), nn.Conv2d(out_channels // 4, out_channels, 1), nn.Sigmoid() ) self.shortcut nn.Identity() if (stride 1 and in_channels out_channels) else None def forward(self, x): identity x out self.act1(self.bn1(self.conv1(x))) out self.act2(self.bn2(self.conv2(out))) out self.bn3(self.conv3(out)) if self.use_se: out out * self.se(out) if self.shortcut is not None: out out identity return out這個(gè)塊替換掉了C3k2內(nèi)部部分Bottleneck重點(diǎn)是放在backbone的P3層和neck的上采樣拼接位置。原因很簡(jiǎn)單P3層是stride 8分辨率相對(duì)最高最適合救小目標(biāo)而上采樣拼接位置決定了下游檢測(cè)頭拿到的特征質(zhì)量。模塊替換后我對(duì)足球類別做了單類驗(yàn)證mAP50從0.35漲到了0.42效果確實(shí)有但遠(yuǎn)不如輸入分辨率從640提到960帶來(lái)的0.15漲幅明顯。這也是我想強(qiáng)調(diào)的一點(diǎn)模塊改進(jìn)是“錦上添花”輸入分辨率和數(shù)據(jù)質(zhì)量才是足球小目標(biāo)檢測(cè)的地基。3. 數(shù)據(jù)集與標(biāo)注比模型更難的準(zhǔn)備工作3.1 數(shù)據(jù)來(lái)源與視頻切幀方案我使用的訓(xùn)練數(shù)據(jù)分兩部分一部分來(lái)自公開可獲取的足球賽事轉(zhuǎn)播錄像和公開數(shù)據(jù)集另一部分是用設(shè)備自己錄制的業(yè)余比賽視頻。公開素材覆蓋頂級(jí)聯(lián)賽、杯賽、青年隊(duì)比賽分辨率從720p到1080p都有自制素材則集中在中低機(jī)位視角、夜場(chǎng)燈光、草地質(zhì)量一般的場(chǎng)地專門用來(lái)模擬真實(shí)落地場(chǎng)景。切幀不是簡(jiǎn)單按固定間隔抽。我先按每秒2幀抽一輪再對(duì)運(yùn)動(dòng)劇烈的片段追加每秒5幀的密集采樣最后做一遍相似度去重。相似度去重很關(guān)鍵否則連續(xù)幀高度重復(fù)訓(xùn)練集看起來(lái)很大有效信息量其實(shí)沒多少。我按結(jié)構(gòu)相似度閾值0.85去重最終從約4000段視頻片段中篩出約12000張有效幀。3.2 標(biāo)注規(guī)范球要標(biāo)、人要標(biāo)、場(chǎng)地怎么標(biāo)三類目標(biāo)標(biāo)注規(guī)則各有坑。運(yùn)動(dòng)員標(biāo)注相對(duì)常規(guī)但規(guī)定必須“緊貼人體外輪廓”。遮擋嚴(yán)重時(shí)寧可把框縮到可見部分也不要憑想象把被擋住的位置畫進(jìn)去。這直接影響后續(xù)NMS合并效果。足球標(biāo)注是整個(gè)任務(wù)的核心。標(biāo)準(zhǔn)是只要畫面里能看到完整球體或超過一半的球體輪廓就必須標(biāo)注。哪怕只有6個(gè)像素也要畫一個(gè)很緊的框。過程中最忌諱“漏標(biāo)”因?yàn)槁?biāo)的足球會(huì)變成難負(fù)樣本讓模型學(xué)會(huì)忽略小目標(biāo)。我后期復(fù)檢時(shí)發(fā)現(xiàn)凡是標(biāo)注稀疏的視頻片段模型在該片段上的足球召回率幾乎都會(huì)崩掉。場(chǎng)地標(biāo)注我采用的方案是按“場(chǎng)地標(biāo)線”處理包括邊線、底線、中線、中圈、禁區(qū)線。由于檢測(cè)框是矩形對(duì)線狀目標(biāo)天然不合適實(shí)際操作中是把每條標(biāo)線分割成若干段每段用外接矩形標(biāo)注類別統(tǒng)一叫pitch_line。這樣既不增加像素級(jí)分割的標(biāo)注成本又能讓模型學(xué)會(huì)“這里有場(chǎng)地元素”的空間定位。標(biāo)注工具用通用的開源圖像標(biāo)注工具就行導(dǎo)出成YOLO的txt格式。這里有一個(gè)容易出錯(cuò)的地方Y(jié)OLO格式要求坐標(biāo)全部歸一化到0-1之間且框中心點(diǎn)坐標(biāo)是相對(duì)寬高的比例。我見過很多人在標(biāo)注工具里直接把像素坐標(biāo)填進(jìn)去訓(xùn)練時(shí)維度對(duì)不上各種報(bào)錯(cuò)。導(dǎo)出后務(wù)必抽檢幾個(gè)文件手工核對(duì)歸一化坐標(biāo)是否落在合理區(qū)間。3.3 數(shù)據(jù)增強(qiáng)既要Mosaic又要“去Mosaic”YOLO系列默認(rèn)的Mosaic增強(qiáng)對(duì)小目標(biāo)檢測(cè)很有幫助它把四張圖拼在一起等效于制造了大量小尺度目標(biāo)。但無(wú)腦開Mosaic也有反效果場(chǎng)地標(biāo)線這種大目標(biāo)在拼接時(shí)會(huì)被裁得支離破碎模型學(xué)到的東西是殘缺的。我的策略是把增強(qiáng)分成兩組。第一組用來(lái)提升小目標(biāo)Mosaic、MixUp、隨機(jī)透視、HSV擾動(dòng)全開概率設(shè)為0.5第二組用來(lái)保大目標(biāo)對(duì)包含場(chǎng)地標(biāo)線的樣本關(guān)閉Mosaic改用隨機(jī)平移縮放、水平翻轉(zhuǎn)和輕度旋轉(zhuǎn)概率設(shè)為0.3。同時(shí)在訓(xùn)練后期關(guān)閉Mosaic讓模型在接近真實(shí)分布的數(shù)據(jù)上精調(diào)。另外針對(duì)足球小目標(biāo)稀疏的問題額外加了一個(gè)Copy-Paste增強(qiáng)把同一張圖里已標(biāo)注的足球復(fù)制到無(wú)球區(qū)域增加了小目標(biāo)出現(xiàn)的頻率。這個(gè)操作要注意控制粘貼位置不能跑到人身上或者場(chǎng)地之外。4. 訓(xùn)練配置與關(guān)鍵調(diào)參實(shí)錄4.1 遷移學(xué)習(xí)路徑與加載權(quán)重策略我沒有從零開始訓(xùn)練而是加載了COCO預(yù)訓(xùn)練權(quán)重作為起點(diǎn)。不過因?yàn)閎ackbone結(jié)構(gòu)里插入了ConverseB模塊特征層和原版權(quán)重并不能完全對(duì)齊直接整體加載會(huì)報(bào)形狀不匹配。我的處理方式是分兩步走先把改進(jìn)模塊和neck部分的參數(shù)隨機(jī)初始化backbone其余層加載原版權(quán)重再凍結(jié)backbone前幾層只訓(xùn)練新增模塊和檢測(cè)頭先跑20個(gè)epoch讓結(jié)構(gòu)穩(wěn)定下來(lái)。之后解凍全部參數(shù)用較低學(xué)習(xí)率微調(diào)。這套流程基本不會(huì)出現(xiàn)初期loss爆炸的問題。4.2 關(guān)鍵超參數(shù)與訓(xùn)練策略訓(xùn)練配置我用的是自己調(diào)整過的YAML核心項(xiàng)如下task: detect mode: train model: yolov11s_custom.yaml data: soccer_court.yaml hyp: lr0: 0.005 lrf: 0.01 momentum: 0.937 weight_decay: 0.0005 warmup_epochs: 3 warmup_momentum: 0.8 box: 7.5 cls: 0.5 dfl: 1.5 hsv_h: 0.015 hsv_s: 0.7 hsv_v: 0.4 mosaic: 0.5 mixup: 0.1 epochs: 150 batch: 8 imgsz: 960 workers: 8 optimizer: SGD說(shuō)幾個(gè)調(diào)參中驗(yàn)證過的點(diǎn)。輸入分辨率選了960而不是更大是因?yàn)橛?xùn)練顯存和推理速度的折中。1280分辨率對(duì)足球類確實(shí)更好但batch size會(huì)掉一半訓(xùn)練時(shí)間翻倍最終在轉(zhuǎn)播流上做實(shí)時(shí)推理也比較吃力。學(xué)習(xí)率用的SGD初始0.005配合warmup。我試過AdamW收斂確實(shí)快但最后mAP普遍比SGD低一點(diǎn)可能和檢測(cè)任務(wù)的稀疏標(biāo)注特性有關(guān)。類別權(quán)重沒做特殊調(diào)整因?yàn)?0%時(shí)間花在調(diào)分辨率、數(shù)據(jù)、訓(xùn)練節(jié)奏上遠(yuǎn)比調(diào)cls loss權(quán)重有效。4.3 訓(xùn)練過程觀察三大階段特征整個(gè)訓(xùn)練過程我盯的是三類指標(biāo)總loss、驗(yàn)證集mAP50、足球類別單獨(dú)AP50。前20個(gè)epoch是“結(jié)構(gòu)穩(wěn)定期”loss從十幾迅速降到7左右但驗(yàn)證集mAP基本沒動(dòng)尤其是足球類完全不漲。這時(shí)候千萬(wàn)別慌我在這個(gè)階段加練過幾次最后證明是浪費(fèi)時(shí)間。新增模塊在冷啟動(dòng)階段本來(lái)就需要先學(xué)會(huì)提取基礎(chǔ)特征。20到60個(gè)epoch是“主漲期”運(yùn)動(dòng)員和場(chǎng)地mAP快速上升足球類開始緩慢爬升。到60輪時(shí)三類mAP50基本能達(dá)到最終水平的85%左右。60到120個(gè)epoch是“精修期”漲幅變得很慢但足球類mAP50-95會(huì)在這個(gè)階段穩(wěn)步改善。這其實(shí)是回歸精度在變好邊界框更貼合了。我的經(jīng)驗(yàn)是小目標(biāo)檢測(cè)任務(wù)一定不要早停太早足球這類目標(biāo)需要較長(zhǎng)時(shí)間才能把框回歸做準(zhǔn)。我最終在第120輪左右保存了best模型繼續(xù)訓(xùn)練到150輪時(shí)驗(yàn)證指標(biāo)基本持平。5. 實(shí)驗(yàn)結(jié)果與問題診斷5.1 對(duì)比實(shí)驗(yàn)基線與改進(jìn)模型的差距我在相同數(shù)據(jù)集上對(duì)比了三個(gè)配置都采用統(tǒng)一增強(qiáng)策略模型配置輸入尺寸mAP50mAP50-95足球AP50參數(shù)量推理耗時(shí)(ms)YOLO11s 原版6400.6810.4230.3529.4M2.8YOLO11s 原版9600.7130.4510.4839.4M6.1YOLO11-C3k2-ConverseB9600.7260.4680.5419.8M6.8表格里的推理耗時(shí)是在同一張顯卡上、batch size為1、FP16精度下測(cè)的。結(jié)論很直接輸入分辨率提升帶來(lái)的增益最大足球AP從0.35拉到0.48引入C3k2-ConverseB后足球AP又漲到0.54運(yùn)動(dòng)員和場(chǎng)地的mAP也有小幅提升參數(shù)量只多了0.4M推理只慢了0.7毫秒這個(gè)代價(jià)完全可以接受。5.2 足球小目標(biāo)漏檢與現(xiàn)場(chǎng)修正精度最高時(shí)足球類mAP50是0.54mAP50-95是0.31。說(shuō)實(shí)話這個(gè)數(shù)字距離“完美”還遠(yuǎn)漏檢主要集中在三種情況高速飛行的球、被球員身體遮擋超過一半的球、以及遠(yuǎn)景畫面里不足6像素的球。對(duì)第一個(gè)問題我試過在數(shù)據(jù)增強(qiáng)里加入運(yùn)動(dòng)模糊模擬有一定效果對(duì)第二個(gè)問題本質(zhì)上需要時(shí)序信息單幀檢測(cè)物理上無(wú)法解決對(duì)第三個(gè)問題只能靠提高輸入分辨率或切圖推理。切圖推理是立竿見影的手段把1080p畫面切成2×2的四塊每塊縮放到960分辨率分別檢測(cè)再合并結(jié)果。足球召回率能再漲幾個(gè)點(diǎn)但推理耗時(shí)翻倍不止。我的結(jié)論是如果業(yè)務(wù)上對(duì)“球”的召回有硬指標(biāo)就得上切圖或者做一個(gè)專門的球追蹤器做時(shí)序補(bǔ)償如果只是做粗粒度事件分析單幀的0.54基本夠用。5.3 運(yùn)動(dòng)員密集人群遮擋問題處理運(yùn)動(dòng)員聚集在禁區(qū)內(nèi)爭(zhēng)頂頭球時(shí)框會(huì)疊成一大團(tuán)。NMS閾值默認(rèn)0.45在重疊率極高的場(chǎng)景下會(huì)把大量有效框直接合并掉漏檢率明顯上升。我做了兩個(gè)調(diào)整一是把NMS的IoU閾值提高到0.5保留更多重疊框二是在后處理時(shí)限制單張圖最大檢測(cè)數(shù)量從默認(rèn)300調(diào)到200因?yàn)檫@類場(chǎng)景大量高置信度的重復(fù)框會(huì)拖慢后處理。調(diào)整之后擁擠場(chǎng)景的運(yùn)動(dòng)員召回率從0.71提升到0.78代價(jià)是少量誤檢屬于可接受的范圍。6. 工程落地與避坑建議6.1 推理速度優(yōu)化與模型導(dǎo)出訓(xùn)練完成后需要把模型導(dǎo)出到ONNX再做TensorRT加速。我在導(dǎo)出時(shí)固定了輸入尺寸960×960開FP16精度。實(shí)測(cè)TensorRT FP16比PyTorch FP16推理快1.8倍左右mAP損失在0.5個(gè)點(diǎn)以內(nèi)可以忽略。有一個(gè)細(xì)節(jié)轉(zhuǎn)播流畫面比例是16:9而我的輸入是1:1。直接resize會(huì)把畫面拉伸變形檢測(cè)框坐標(biāo)還要做逆變換。更好的做法是在預(yù)處理時(shí)做letterbox填充保持原比例預(yù)測(cè)后再按填充比例映射回原圖。沒有做這一步的話場(chǎng)地標(biāo)線的檢測(cè)框位置會(huì)系統(tǒng)性偏移。6.2 易錯(cuò)點(diǎn)速查表現(xiàn)象原因解決方案足球類AP始終不高輸入分辨率不足、足球標(biāo)注漏標(biāo)多提升imgsz到960以上復(fù)檢標(biāo)注質(zhì)量場(chǎng)地標(biāo)線框邊緣抖動(dòng)大目標(biāo)回歸不穩(wěn)定、標(biāo)注框不一致分線段標(biāo)注統(tǒng)一標(biāo)注粒度換一場(chǎng)比賽后漏檢率暴增過擬合單一場(chǎng)地顏色和光照增強(qiáng)HSV擾動(dòng)加入多場(chǎng)地樣本訓(xùn)練前期loss不降新增模塊隨機(jī)初始化權(quán)重未對(duì)齊分階段凍結(jié)/解凍訓(xùn)練推理時(shí)邊界框偏移預(yù)處理resize未還原坐標(biāo)用letterbox逆映射多人重疊漏檢NMS閾值過低IoU閾值調(diào)至0.5限制max_det6.3 后續(xù)擴(kuò)展方向這套檢測(cè)模型實(shí)際是上層應(yīng)用的底座。我接下來(lái)的計(jì)劃是在檢測(cè)結(jié)果上疊加一個(gè)輕量級(jí)多目標(biāo)跟蹤器對(duì)球員和足球分別做軌跡追蹤然后基于軌跡計(jì)算跑動(dòng)距離、控球時(shí)間和傳接球事件。這些數(shù)據(jù)在半自動(dòng)比賽分析、青訓(xùn)輔助評(píng)估這些方向上都有實(shí)用價(jià)值。場(chǎng)地標(biāo)線檢測(cè)也可以進(jìn)一步換成語(yǔ)義分割分支但工程成本會(huì)高不少暫時(shí)不在計(jì)劃內(nèi)。最后說(shuō)一句個(gè)人體會(huì)我踩過最大的坑是把太多精力花在改模塊上直到把輸入分辨率提上去、把標(biāo)注質(zhì)量揪起來(lái)才意識(shí)到足球小目標(biāo)檢測(cè)的瓶頸往往在數(shù)據(jù)和預(yù)處理環(huán)節(jié)。YOLO11-C3k2-ConverseB這套結(jié)構(gòu)能在精度和速度之間站住腳但真正讓它發(fā)揮作用的是一整套圍繞數(shù)據(jù)、訓(xùn)練節(jié)奏和推理部署的組合拳。如果你的項(xiàng)目也在啃類似“小目標(biāo)大目標(biāo)同框”的硬骨頭建議先檢查數(shù)據(jù)和輸入尺寸再回頭審視模型結(jié)構(gòu)這個(gè)順序能幫你少走很多彎路。