指南)
簡介目標檢測是計算機視覺的核心任務之一旨在識別圖像或視頻中的特定物體并定位其位置。其原理通?;谏疃葘W習模型通過卷積神經(jīng)網(wǎng)絡提取特征并利用檢測頭預測邊界框和類別。這項技術在安防監(jiān)控、自動駕駛和工業(yè)質(zhì)檢等領域具有極高的技術價值。在智慧交通和城市管理等應用場景中從高空視角進行車輛檢測成為關鍵需求它能有效分析交通流和停車分布。本文圍繞一個包含6770張圖片的無人機高空拍攝路面車輛數(shù)據(jù)集展開詳細解析了其VOC和YOLO標注格式并提供了基于YOLOv8模型進行訓練、優(yōu)化及部署到邊緣設備如NVIDIA Jetson的完整工程實踐流程特別針對小目標檢測和模型輕量化等挑戰(zhàn)給出了解決方案。1. 項目概述一份來自天空的“交通體檢報告”最近在整理硬盤時翻出了一個壓箱底的寶貝——一個名為“無人機高空拍攝路面車輛數(shù)據(jù)集”的壓縮包。這個數(shù)據(jù)集包含了6770張圖片并且已經(jīng)貼心地轉(zhuǎn)換好了VOC和YOLO兩種格式。對于任何一個正在入門或深耕計算機視覺特別是目標檢測領域的朋友來說這無疑是一份極具價值的“實戰(zhàn)彈藥”。它不像那些經(jīng)典的MNIST、CIFAR-10更像是一份直接從現(xiàn)實世界、從特定視角采集的“一手資料”。簡單來說這個數(shù)據(jù)集的核心價值在于它提供了一個從高空俯視的獨特視角專門用于訓練模型識別路面上的車輛目標。為什么這個視角如此特別我們?nèi)粘=佑|的車輛檢測數(shù)據(jù)集比如KITTI、BDD100K大多是從車載攝像頭或地面固定攝像頭拍攝的視角是平視或略帶俯角。而無人機高空拍攝帶來了截然不同的挑戰(zhàn)與機遇。挑戰(zhàn)在于車輛目標變得更小、更密集且受光照、天氣、建筑遮擋的影響更為復雜機遇則在于這種“上帝視角”能一覽無余地觀察交通流、停車場車輛分布、路口擁堵情況對于智慧交通管理、城市規(guī)劃分析、應急車輛調(diào)度等領域有著不可替代的應用價值。這份6770張的數(shù)據(jù)集就是打開這扇應用大門的鑰匙。無論你是想復現(xiàn)論文、完成課程設計、參加算法競賽還是為自己的無人機巡檢項目尋找訓練數(shù)據(jù)它都能提供一個扎實的起點。2. 數(shù)據(jù)集深度解析從數(shù)據(jù)構(gòu)成到格式內(nèi)涵拿到一個數(shù)據(jù)集第一步絕不是急著扔進模型里跑。就像廚師做菜前要了解食材的特性一樣我們需要先徹底“解剖”這份數(shù)據(jù)明白它里面到底有什么以及為什么以這樣的形式存在。2.1 數(shù)據(jù)內(nèi)容與采集場景猜想雖然原始描述沒有給出詳細的采集參數(shù)但根據(jù)“無人機高空拍攝”和“路面車輛”這兩個核心信息我們可以推斷出數(shù)據(jù)的一些關鍵特征拍攝高度與尺度既然是“高空”高度可能在50米至200米之間。這個高度下轎車在圖像中可能只占據(jù)幾十到一百多個像素屬于典型的“小目標檢測”范疇。數(shù)據(jù)集中很可能包含不同高度拍攝的圖片導致目標尺度有較大變化這對檢測模型的尺度魯棒性提出了要求。場景多樣性路面車輛的場景可以非常豐富??赡馨ǔ鞘械缆钒致房?、主干道、輔路車輛密度高存在大量遮擋被樹木、高架橋、其他車輛遮擋。高速公路車輛行駛速度快車型相對單一轎車、卡車、客車背景相對干凈。停車場車輛靜止排列規(guī)整但密度極高是檢測模型區(qū)分相鄰車輛的“考場”。郊區(qū)或鄉(xiāng)村道路車輛稀疏但背景可能更復雜包含農(nóng)田、樹木、建筑物等。環(huán)境與天氣一個魯棒的數(shù)據(jù)集應該包含多種光照條件清晨、正午、傍晚、陰天和天氣狀況晴天、多云、輕度霧霾。這對于模型在實際部署中應對復雜環(huán)境至關重要。標注類別核心類別無疑是“車輛”vehicle。一個更精細的數(shù)據(jù)集可能會將車輛細分為“轎車”car、“卡車”truck、“巴士”bus、“摩托車”motorcycle等。從6770張的規(guī)模來看很可能只包含“車輛”這一個通用類別或者2-4個主要車型類別。這對于初期的模型訓練和驗證是足夠的。注意在實際使用前務必用腳本或工具如labelImg打開幾個標注文件快速瀏覽一下標注的類別名稱和邊界框質(zhì)量確認是否符合你的項目需求。有時數(shù)據(jù)提供者定義的類別名可能是“car”而你的代碼里期待的是“vehicle”這會導致訓練失敗。2.2 VOC與YOLO格式詳解與轉(zhuǎn)換邏輯這個數(shù)據(jù)集同時提供了PASCAL VOC和YOLO格式這非常貼心因為它覆蓋了兩種最主流的標注格式生態(tài)。PASCAL VOC格式 這是一種基于XML文件的標注格式。每個圖像對應一個.xml文件。我們以一個假設的000001.xml為例看看它的典型結(jié)構(gòu)annotation folderimages/folder filename000001.jpg/filename size width1920/width height1080/height depth3/depth /size object namecar/name bndbox xmin500/xmin ymin300/ymin xmax600/xmax ymax380/ymax /bndbox /object !-- 可能有更多object標簽 -- /annotation優(yōu)點結(jié)構(gòu)清晰人類可讀性強除了邊界框還可以方便地擴展其他信息如姿態(tài)、難度、是否被截斷。缺點文件體積相對較大每個圖片一個XML讀取和解析速度比純文本慢。YOLO格式 這是一種非常簡潔的純文本格式。每個圖像對應一個同名的.txt文件。例如000001.jpg對應000001.txt其內(nèi)容可能如下0 0.520833 0.314815 0.052083 0.074074這一行數(shù)據(jù)表示類別索引 x_center y_center width height。所有坐標都是歸一化的即相對于圖像寬度和高度的比例值范圍在0到1之間。x_center, y_center是邊界框中心的坐標。width, height是邊界框的寬度和高度。0是類別索引需要在另一個名為classes.txt的文件中查找對應關系例如0對應“car”。優(yōu)點文件小巧讀取解析極快是YOLO系列模型訓練時的原生格式效率高。缺點信息承載量少不直觀。為什么需要兩種格式這體現(xiàn)了數(shù)據(jù)集的實用性。VOC格式通用性強方便使用各種框架如TensorFlow Object Detection API, MMDetection提供的轉(zhuǎn)換工具。YOLO格式則是為了直接服務于YOLOv5/v7/v8等當下最流行的檢測框架開箱即用。提供者很可能先完成了VOC格式的精細標注然后通過腳本批量轉(zhuǎn)換為YOLO格式。理解這兩種格式的轉(zhuǎn)換關系至關重要因為在實際項目中你很可能需要將自己的數(shù)據(jù)從一種格式轉(zhuǎn)為另一種。轉(zhuǎn)換公式VOC - YOLO 假設圖像寬度為img_w高度為img_hVOC標注框為(xmin, ymin, xmax, ymax)。計算邊界框中心點x_center (xmin xmax) / 2.0,y_center (ymin ymax) / 2.0計算邊界框?qū)捀遙ox_w xmax - xmin,box_h ymax - ymin歸一化x_center / img_w,y_center / img_h,box_w / img_w,box_h / img_h用Python實現(xiàn)這個轉(zhuǎn)換是數(shù)據(jù)預處理中的常規(guī)操作。拿到這個數(shù)據(jù)集你可以直接使用YOLO格式進行訓練省去了轉(zhuǎn)換步驟。3. 基于此數(shù)據(jù)集的YOLOv8模型訓練全流程實操假設我們現(xiàn)在要利用這個數(shù)據(jù)集訓練一個最新的YOLOv8模型來檢測無人機畫面中的車輛。以下是詳細的步驟和核心要點。3.1 環(huán)境準備與數(shù)據(jù)組織首先我們需要一個清晰的目錄結(jié)構(gòu)。假設你將下載的無人機高空拍攝路面車輛數(shù)據(jù)集6770張VOCYOLO格式.zip解壓到名為UAV_Vehicle的文件夾中。經(jīng)過整理目錄應如下所示UAV_Vehicle/ ├── images/ │ ├── train/ # 存放訓練集圖片例如 000001.jpg, 000002.jpg... │ └── val/ # 存放驗證集圖片 ├── labels/ │ ├── train/ # 存放訓練集標簽 (YOLO格式的 .txt 文件) │ └── val/ # 存放驗證集標簽 └── dataset.yaml # YOLO模型訓練所需的配置文件關鍵操作數(shù)據(jù)劃分6770張圖片不能全部用于訓練需要劃分出驗證集通常占10%-20%用于在訓練過程中評估模型性能防止過擬合。你可以使用簡單的Python腳本進行隨機劃分import os import random import shutil # 假設所有圖片和對應的標簽文件都在一個文件夾里 image_dir “path/to/all_images” label_dir “path/to/all_labels” all_images [f for f in os.listdir(image_dir) if f.endswith(‘.jpg’)] random.shuffle(all_images) split_ratio 0.8 # 80%訓練20%驗證 train_count int(len(all_images) * split_ratio) train_images all_images[:train_count] val_images all_images[train_count:] # 將圖片和標簽分別移動到train/val文件夾 for img_list, subset in zip([train_images, val_images], [‘train’, ‘val’]): os.makedirs(os.path.join(‘images’, subset), exist_okTrue) os.makedirs(os.path.join(‘labels’, subset), exist_okTrue) for img_name in img_list: # 移動圖片 src_img os.path.join(image_dir, img_name) dst_img os.path.join(‘images’, subset, img_name) shutil.copy(src_img, dst_img) # 移動標簽同名.txt文件 label_name img_name.replace(‘.jpg’, ‘.txt’) src_label os.path.join(label_dir, label_name) dst_label os.path.join(‘labels’, subset, label_name) if os.path.exists(src_label): shutil.copy(src_label, dst_label)創(chuàng)建dataset.yaml這是YOLO模型的“數(shù)據(jù)說明書”。內(nèi)容如下# UAV_Vehicle/dataset.yaml path: /path/to/UAV_Vehicle # 數(shù)據(jù)集根目錄 train: images/train # 訓練集圖片路徑相對path val: images/val # 驗證集圖片路徑 # 類別數(shù)量和名稱 nc: 1 # 假設這個數(shù)據(jù)集只有‘vehicle’一個類別。如果是多類別改為對應數(shù)字。 names: [‘vehicle’] # 類別名稱列表索引號對應YOLO標簽文件中的類別ID。實操心得path最好使用絕對路徑避免在復雜目錄下運行時出現(xiàn)路徑錯誤。names列表的順序必須與標注文件中使用的類別ID嚴格對應。如果數(shù)據(jù)集中類別ID 0是car1是truck那么names就應該是[‘car’, ‘truck’]。3.2 模型選擇與訓練參數(shù)調(diào)優(yōu)YOLOv8提供了從輕量到高精度的多種預訓練模型n, s, m, l, x。對于無人機車輛檢測這種小目標居多的任務我的經(jīng)驗是YOLOv8s (Small)是一個非常好的起點。它在精度和速度之間取得了平衡參數(shù)量適中在消費級GPU如RTX 3060上也能快速訓練和推理。對于6770張圖的數(shù)據(jù)集規(guī)模v8s通常能取得不錯的效果且不易過擬合。YOLOv8m (Medium)如果您的GPU顯存充足如RTX 4090并且追求更高的精度可以選擇v8m。它擁有更深的網(wǎng)絡和更多的參數(shù)對小目標的特征提取能力更強但訓練時間會更長。謹慎使用v8l/v8x對于萬張以下的數(shù)據(jù)集過大的模型容量極易導致過擬合即模型在訓練集上表現(xiàn)完美在驗證集或新數(shù)據(jù)上表現(xiàn)糟糕。除非你有辦法進行大量的數(shù)據(jù)增強或正則化否則不建議起步就用大型號。啟動訓練 安裝Ultralytics庫后訓練命令非常簡單yolo taskdetect modetrain modelyolov8s.pt data/path/to/UAV_Vehicle/dataset.yaml epochs100 imgsz640 batch16核心參數(shù)解析與調(diào)優(yōu)建議epochs100迭代輪數(shù)。對于6000多張圖100輪通常是一個合理的起點??梢酝ㄟ^觀察訓練曲線后文會講來決定是否提前停止或增加輪數(shù)。imgsz640輸入圖像的尺寸。YOLOv8會將所有圖片統(tǒng)一縮放到此尺寸。這是影響小目標檢測性能的關鍵參數(shù)無人機圖像原始分辨率可能很高如4K直接縮放到640會丟失大量小目標細節(jié)。建議嘗試更大的尺寸如1024甚至1280。命令可以改為imgsz1024。代價是訓練速度變慢顯存消耗增大。batch16批大小。取決于你的GPU顯存。在顯存允許的情況下使用更大的batch size如32, 64有時能使訓練更穩(wěn)定。如果出現(xiàn)CUDA out of memory錯誤就減小這個值。數(shù)據(jù)增強YOLOv8默認開啟了豐富的數(shù)據(jù)增強如 mosaic, mixup, 色彩抖動隨機翻轉(zhuǎn)等這對于增加數(shù)據(jù)多樣性、防止過擬合非常有效。對于無人機數(shù)據(jù)我建議在dataset.yaml中或通過代碼額外關注小目標增強可以嘗試啟用copy_paste增強將一些小目標復制粘貼到圖像中這對提升小目標召回率有幫助。旋轉(zhuǎn)與尺度無人機視角下車輛姿態(tài)相對固定但輕微的旋轉(zhuǎn)和尺度變化增強依然有益。3.3 訓練過程監(jiān)控與模型評估訓練開始后Ultralytics會在runs/detect/train目錄下生成大量有用的文件和可視化結(jié)果。關鍵文件解讀weights/best.pt訓練過程中在驗證集上表現(xiàn)最好的模型權(quán)重。weights/last.pt最后一輪的模型權(quán)重。args.yaml保存了本次訓練的所有參數(shù)便于復現(xiàn)。results.csv記錄了每一輪訓練和驗證的詳細指標損失、精度、召回率等??梢暬瘓D表分析重中之重results.png這是訓練過程的“儀表盤”。你需要重點關注幾條曲線train/box_loss和val/box_loss邊界框回歸損失。理想情況下兩者都應穩(wěn)步下降并最終趨于平穩(wěn)。如果val_loss在中間開始上升而train_loss繼續(xù)下降這是典型的過擬合信號。metrics/precision(B)和metrics/recall(B)精度和召回率。我們希望兩者都高。召回率低意味著很多目標沒被檢測出來漏檢這對無人機巡檢等任務是不可接受的。metrics/mAP50(B)和metrics/mAP50-95(B)mAP是綜合衡量指標。mAP50是IoU閾值為0.5時的平均精度mAP50-95是從0.5到0.95步長0.05多個IoU閾值下的平均值后者更嚴格。對于車輛檢測我們通常更關注mAP50。confusion_matrix.png混淆矩陣。對于多分類任務非常有用可以看哪些類別容易混淆。對于單類別“車輛”它的意義不大。val_batchX_labels.jpg和val_batchX_pred.jpg隨機抽取的驗證集批次圖片分別顯示真實標簽和模型預測結(jié)果。這是最直觀的評估方式務必仔細查看模型在哪些場景下會漏檢小目標、密集目標、遮擋目標哪些地方會誤檢將陰影、井蓋誤認為車輛避坑技巧不要只看最后的mAP數(shù)字就判斷模型好壞。一定要看預測圖片一個mAP很高的模型可能在你的實際應用場景如夜間、雨天中表現(xiàn)很差因為數(shù)據(jù)集中這類場景不足。通過預測圖你能快速定位模型的弱點。4. 模型優(yōu)化與部署實戰(zhàn)讓檢測器真正“飛起來”訓練出一個基礎模型只是第一步。要讓它在真實的無人機端或邊緣計算設備上穩(wěn)定、高效地運行還需要一系列的優(yōu)化和部署工作。4.1 針對小目標與密集場景的優(yōu)化策略無人機數(shù)據(jù)集的先天特點就是小目標多、目標可能密集。如果基礎模型在這些場景表現(xiàn)不佳可以嘗試以下策略調(diào)整模型結(jié)構(gòu)更換檢測頭YOLOv8的檢測頭Head對于不同尺度目標的敏感度不同。雖然官方不直接支持更換但你可以關注社區(qū)改進。有些工作會修改特征金字塔網(wǎng)絡FPN和路徑聚合網(wǎng)絡PAN的結(jié)構(gòu)增強淺層特征包含更多小目標細節(jié)向檢測頭的流動。注意力機制在Backbone或Neck部分引入輕量化的注意力模塊如CBAM、ECA-Net讓模型更關注圖像中可能存在小目標的區(qū)域。優(yōu)化錨框AnchorYOLOv8是Anchor-Free的但它的回歸機制仍然隱式地學習目標的先驗分布。你可以使用數(shù)據(jù)集中所有標注框的寬高信息通過K-means聚類重新計算一組更適合你數(shù)據(jù)集的“先驗尺寸”并在模型配置中替換。這對于目標尺寸分布特殊的數(shù)據(jù)集如無人機視角下車輛都是細長的矩形可能有奇效。針對性數(shù)據(jù)增強Mosaic增強YOLO默認開啟。它將四張圖拼成一張能極大地增加小目標出現(xiàn)的上下文多樣性非常有效。隨機裁剪與縮放可以更激進一些模擬無人機在不同高度拍攝的效果。生成對抗網(wǎng)絡GAN如果某些極端場景如大雨、大雪的數(shù)據(jù)稀缺可以考慮使用GAN來生成逼真的困難樣本補充進訓練集。4.2 模型輕量化與加速部署無人機機載計算平臺如NVIDIA Jetson系列、華為Atlas、高通芯片的算力和功耗都有限。必須對模型進行壓縮和加速。模型剪枝Pruning移除網(wǎng)絡中冗余的通道或神經(jīng)元??梢允褂靡恍╅_源工具如Torch-Pruning對訓練好的best.pt進行結(jié)構(gòu)化剪枝然后在原數(shù)據(jù)集上進行少量輪次的微調(diào)Fine-tune以恢復精度。知識蒸餾Knowledge Distillation用一個龐大的、精度高的模型教師模型去指導一個小模型學生模型的訓練。你可以先用完整數(shù)據(jù)集訓練一個YOLOv8l作為教師再用它來指導一個YOLOv8n或更小自定義模型的訓練讓小模型獲得接近大模型的性能。量化Quantization將模型權(quán)重和激活從32位浮點數(shù)FP32轉(zhuǎn)換為8位整數(shù)INT8。這能顯著減少模型體積、提升推理速度且對精度損失通??煽?。PyTorch和TensorRT都提供了成熟的量化工具。TensorRT部署這是工業(yè)界在NVIDIA平臺上的首選。流程是PyTorch模型 - ONNX格式 - TensorRT引擎。在轉(zhuǎn)換過程中可以同時進行INT8量化。量化需要一個小規(guī)模的校準數(shù)據(jù)集可以從你的驗證集中抽取幾百張圖來統(tǒng)計激活值的分布。一個簡化的TensorRT部署流程示例# 1. 將YOLOv8模型導出為ONNX格式 from ultralytics import YOLO model YOLO(‘path/to/best.pt’) model.export(format‘onnx’, imgsz640, simplifyTrue) # 得到 best.onnx # 2. 使用TensorRT的trtexec工具需安裝TensorRT將ONNX轉(zhuǎn)換為TensorRT引擎 # 以下命令在裝有TensorRT的Linux系統(tǒng)終端中執(zhí)行 trtexec --onnxbest.onnx --saveEnginebest.engine --fp16 --workspace4096 # --fp16 表示使用半精度浮點數(shù)進一步加速。如果硬件支持INT8且要求極致速度可以使用 --int8需提供校準數(shù)據(jù)集。生成的best.engine文件就是優(yōu)化后的模型可以直接用TensorRT的C或Python API在Jetson等設備上加載實現(xiàn)超低延遲的推理。4.3 集成到無人機系統(tǒng)從檢測框到業(yè)務邏輯模型在視頻流上跑出檢測框只是第一步。要形成一個完整的解決方案還需要視頻流處理無人機通常通過RTMP或RTSP流傳輸視頻。你需要使用OpenCV或GStreamer等庫來捕獲視頻流并按幀送入模型推理。跟蹤與去重連續(xù)幀中同一輛車會被重復檢測。需要使用目標跟蹤算法如ByteTrack, DeepSORT為每個檢測目標分配一個唯一的ID實現(xiàn)跨幀追蹤。這對于統(tǒng)計車流量、判斷車輛軌跡至關重要。地理映射Georeferencing這是無人機應用的核心附加值。如果無人機搭載了高精度GPS和IMU并且相機參數(shù)已知理論上可以將圖像中車輛的像素坐標通過透視變換和地理配準換算成真實世界的地理坐標經(jīng)緯度。這需要復雜的標定和傳感器融合技術。業(yè)務邏輯與報警基于檢測和跟蹤結(jié)果實現(xiàn)業(yè)務功能。例如交通監(jiān)控統(tǒng)計指定區(qū)域的車流量、平均車速、車輛密度。違章檢測識別車輛是否違章停車在禁停區(qū)域停留超過N秒、是否占用應急車道。園區(qū)巡檢統(tǒng)計停車場空車位檢測區(qū)域是否有異常車輛闖入。5. 常見問題與排查技巧實錄在實際操作中你一定會遇到各種各樣的問題。下面是我在多次類似項目中踩過的坑和總結(jié)的排查思路。問題1訓練時loss特別是val_loss不下降或者震蕩非常厲害??赡茉蚺c排查學習率lr不合適這是最常見的原因。YOLOv8有自動調(diào)整學習率的功能但有時仍需手動干預。如果loss居高不下嘗試在訓練命令中顯式設置一個更小的學習率如lr00.001默認是0.01。如果loss震蕩可能是學習率太大嘗試減小它。數(shù)據(jù)有問題這是第二大常見原因。請務必檢查你的標簽文件使用labelImg之類的工具隨機打開幾十張圖片查看標注框是否準確有沒有漏標、錯標、框過大或過小。特別是YOLO格式的標簽要檢查歸一化后的坐標值是否在[0,1]區(qū)間內(nèi)有沒有出現(xiàn)x_center width/2 1.0這種錯誤。模型與數(shù)據(jù)不匹配你用的是COCO預訓練的權(quán)重但你的數(shù)據(jù)只有“車輛”一個類別且尺度、外觀與COCO中的車輛差異巨大。這可能導致模型初期學習困難??梢試L試凍結(jié)Backbone只訓練檢測頭一段時間讓模型先適應新的分類任務。使用更小的模型如YOLOv8n從頭開始訓練有時效果反而比用大模型微調(diào)更好。批次大小Batch Size太小在顯存允許范圍內(nèi)增大batch size可以使梯度估計更準確訓練更平穩(wěn)。如果batch size只能設為2或4loss震蕩是正常的可以考慮使用梯度累積Gradient Accumulation來模擬大batch的效果。問題2模型召回率Recall很低很多車檢不出來??赡茉蚺c排查小目標問題這是無人機數(shù)據(jù)的通病。首先檢查訓練時輸入的imgsz是否太小。如果原圖是4K你壓縮到640小車輛可能只剩下幾個像素特征完全丟失。務必嘗試增大imgsz到1024或1280。置信度閾值過高模型在推理時有一個置信度閾值conf默認可能是0.25。在驗證或測試時可以嘗試降低這個閾值如降到0.1看看是否有更多目標被檢出。但這也會增加誤檢。數(shù)據(jù)增強過度Mosaic等增強雖然好但有時會“創(chuàng)造”出一些不真實的、極其困難的小目標樣本導致模型學習困難??梢試L試在訓練后期關閉Mosaic增強YOLOv8支持通過參數(shù)設置。錨框/先驗尺寸不匹配如前所述計算一下你數(shù)據(jù)集中所有標注框的寬高分布如果與模型內(nèi)置的先驗尺寸差異巨大考慮重新聚類生成。問題3模型誤檢率高把路燈、陰影、斑馬線也當成車??赡茉蚺c排查負樣本不足你的數(shù)據(jù)集中可能缺少“看起來像車但不是車”的負樣本。解決方法有兩種一是主動收集一些包含此類干擾物的圖片并確保它們被正確標注為“無目標”即生成空的標簽文件.txt二是在訓練時使用“負樣本挖掘”技術將模型預測置信度高但實際上是背景的區(qū)域作為困難負樣本加入訓練。數(shù)據(jù)清洗不干凈原始數(shù)據(jù)集中可能就存在錯誤的標注把非車物體標成了車。需要人工復查清洗。后處理NMS參數(shù)非極大值抑制NMS的IoU閾值iou_thres設置得太低可能導致重疊的誤檢框沒有被抑制掉??梢赃m當調(diào)高這個閾值如從0.45調(diào)到0.6。同時也可以調(diào)高置信度閾值conf來過濾掉低置信度的誤檢。問題4訓練好的模型在自己拍攝的新無人機視頻上效果很差??赡茉蚺c排查領域差異Domain Gap這是最核心的問題。你的訓練數(shù)據(jù)數(shù)據(jù)集和新視頻數(shù)據(jù)實際應用在光照、天氣、相機型號、拍攝角度、圖像壓縮質(zhì)量等方面存在差異。模型沒有見過這類數(shù)據(jù)自然表現(xiàn)不佳。解決方案收集新數(shù)據(jù)并微調(diào)這是最根本的方法。從新視頻中截取幾百張有代表性的幀進行標注然后使用訓練好的模型權(quán)重best.pt作為預訓練在新數(shù)據(jù)上進行少量輪次如50輪的微調(diào)。學習率要設得更小如lr00.0001。在線數(shù)據(jù)增強在推理時對輸入圖像進行一些簡單的增強如輕微的色彩抖動、對比度調(diào)整然后對多次增強的結(jié)果進行集成有時能提升魯棒性。測試時增強TTA在推理時將圖像進行多種變換如翻轉(zhuǎn)、縮放分別檢測然后合并結(jié)果。這會增加計算量但能提升精度。問題速查表現(xiàn)象可能原因優(yōu)先排查方向Loss不降學習率過大/小、數(shù)據(jù)標注錯誤、模型初始化差檢查標簽、調(diào)小學習率、可視化數(shù)據(jù)Loss震蕩學習率過大、Batch Size過小減小學習率、增大Batch Size或使用梯度累積召回率低輸入圖像尺寸太小、目標太小、置信度閾值高增大imgsz、檢查小目標標注、降低推理conf誤檢率高負樣本不足、NMS參數(shù)不當、數(shù)據(jù)有臟標注增加負樣本、調(diào)整NMS的iou_thres、清洗數(shù)據(jù)新數(shù)據(jù)差領域差異、數(shù)據(jù)分布不同收集新數(shù)據(jù)微調(diào)、嘗試TTA最后我想分享一點個人體會處理像無人機車輛檢測這樣的專業(yè)領域數(shù)據(jù)集最大的挑戰(zhàn)往往不是模型本身而是對數(shù)據(jù)本身的理解和工程細節(jié)的處理。數(shù)據(jù)決定了模型性能的上限而算法和調(diào)參只是去逼近這個上限?;ㄔ跀?shù)據(jù)清洗、分析和增強上的時間其回報率遠高于無腦地嘗試更復雜的模型。這個6770張的數(shù)據(jù)集是一個絕佳的沙盒希望你不僅能用它訓練出一個可用的模型更能通過它深入理解目標檢測任務從數(shù)據(jù)到部署的完整鏈條。當你下次看到天空中的無人機或許就能在腦海中勾勒出它實時分析地面交通的智能畫面了。本文還有配套的精品資源點擊獲取