視角車輛檢測(cè)數(shù)據(jù)集:YOLO格式訓(xùn)練全指南)
做目標(biāo)檢測(cè)的人應(yīng)該都有過類似的體驗(yàn)跑通官方示例容易真正想訓(xùn)練自己的場(chǎng)景數(shù)據(jù)時(shí)第一個(gè)攔路虎往往是“沒有合適的數(shù)據(jù)集”。尤其是無人機(jī)視角下的車輛檢測(cè)很多朋友習(xí)慣直接拿地面相機(jī)的公開車輛數(shù)據(jù)集來訓(xùn)練結(jié)果一到航拍畫面上漏檢、誤檢、置信度飄忽不定問題層出不窮。這期整理的就是專門針對(duì)無人機(jī)拍攝場(chǎng)景的車輛檢測(cè)數(shù)據(jù)集采用YOLO標(biāo)注格式圖片和標(biāo)簽文件都處理得規(guī)規(guī)矩矩拿到手就能直接開練。我會(huì)把這份數(shù)據(jù)集的細(xì)節(jié)、使用方式以及訓(xùn)練中容易踩的坑一并講清楚希望能幫正在做智慧交通、安防巡檢、車輛統(tǒng)計(jì)這類項(xiàng)目的朋友省下整理數(shù)據(jù)的時(shí)間。1. 為什么無人機(jī)視角的車輛檢測(cè)數(shù)據(jù)集這么難找很多初學(xué)者會(huì)問車輛檢測(cè)的數(shù)據(jù)集不是很多嗎怎么還要專門整理無人機(jī)視角的這里面的差別非常大。地面視角的車輛檢測(cè)數(shù)據(jù)車輛在畫面里往往占據(jù)幾十甚至上百像素輪廓清晰能看到車頭、車尾、車門這些“側(cè)面特征”而無人機(jī)拍攝的畫面是從上往下看的俯視圖車輛在畫面里就是一堆“車頂”目標(biāo)小、密度高、互相遮擋也很常見。如果直接把地面數(shù)據(jù)訓(xùn)練的模型搬到航拍圖上模型學(xué)到的是側(cè)面視覺線索遇到俯視場(chǎng)景自然就不認(rèn)識(shí)了。1.1 一張航拍圖和一張地面照片的差別到底在哪先說尺度。以常見的1080p航拍畫面為例一輛普通轎車在畫面里通常只有40到80像素的寬度有些偏遠(yuǎn)區(qū)域的車甚至只有20個(gè)像素左右。地面數(shù)據(jù)里常見的車輛目標(biāo)動(dòng)輒200像素以上這兩種尺度下模型提取的特征完全不同。小目標(biāo)在卷積神經(jīng)網(wǎng)絡(luò)的高層特征圖中會(huì)被壓縮到幾乎沒有信息這也是很多地面模型在航拍圖上表現(xiàn)差的核心原因之一。再看觀察角度。地面拍攝時(shí)車身的側(cè)面、輪胎、車窗反射這些特征是判據(jù)無人機(jī)俯拍時(shí)看到的主要是車頂輪廓、天窗、車頂顏色和周圍陰影。數(shù)據(jù)分布差異這么大模型沒有見過這樣的特征組合強(qiáng)行遷移結(jié)果自然不理想。還有一個(gè)經(jīng)常被忽視的因素光照和陰影。無人機(jī)一般在白天作業(yè)陽(yáng)光直射下車輛會(huì)形成明顯的投影陰影和車身邊界混在一起非常干擾檢測(cè)。地面數(shù)據(jù)集里陰影問題相對(duì)輕因?yàn)榕臄z角度讓陰影大多落在車體側(cè)后方不會(huì)把車的輪廓吞掉。俯拍時(shí)陰影可能把相鄰車輛連成一片這對(duì)標(biāo)注和檢測(cè)都是額外的挑戰(zhàn)。1.2 航拍數(shù)據(jù)的標(biāo)注難點(diǎn)與數(shù)據(jù)集價(jià)值無人機(jī)畫面里車輛又小又多標(biāo)注一枚框往往需要把圖片放大好幾倍才能看清楚邊界。原始畫幅里有上百輛車的情況下標(biāo)注員得一個(gè)個(gè)放大、確認(rèn)、拉框工作量比地面數(shù)據(jù)大得多。這也是市面上免費(fèi)航拍數(shù)據(jù)集稀少的主要原因——不是沒人拍而是沒人愿意花時(shí)間精標(biāo)。這期分享的數(shù)據(jù)集就是在這個(gè)背景下整理的目標(biāo)是做一個(gè)“拿到就能用”的基礎(chǔ)版本。它適合三類人一是想驗(yàn)證自己在航拍場(chǎng)景下算法效果的研究者二是做交通流量統(tǒng)計(jì)、停車場(chǎng)監(jiān)測(cè)等項(xiàng)目的開發(fā)者三是還在學(xué)習(xí)目標(biāo)檢測(cè)流程、想找一份真實(shí)場(chǎng)景數(shù)據(jù)練手的新手。用這份數(shù)據(jù)先把整體流程跑通再根據(jù)自己業(yè)務(wù)補(bǔ)場(chǎng)景數(shù)據(jù)會(huì)比自己從零采集、標(biāo)注高效得多。2. 數(shù)據(jù)集全景與YOLO標(biāo)注格式解析這份數(shù)據(jù)集我事先整理成了標(biāo)準(zhǔn)的目標(biāo)檢測(cè)工程結(jié)構(gòu)圖片集和標(biāo)簽集分開存放同時(shí)附上了一份配置文件。先別急著打開訓(xùn)練腳本花幾分鐘把數(shù)據(jù)集的“長(zhǎng)相”看清楚會(huì)幫你省下后面很多排查時(shí)間。2.1 數(shù)據(jù)集里有什么規(guī)模、場(chǎng)景與類別分布整個(gè)數(shù)據(jù)集包含約3200張無人機(jī)拍攝的圖片覆蓋城市道路、高速互通、十字路口、園區(qū)停車場(chǎng)、鄉(xiāng)村公路等常見場(chǎng)景。圖片以1920×1080分辨率為主少部分來自4K航拍設(shè)備尺寸不統(tǒng)一這一點(diǎn)和實(shí)際使用情況很吻合。標(biāo)注框累計(jì)約18000個(gè)共4個(gè)類別car、truck、bus、van。需要提醒一下這4個(gè)類別的樣本數(shù)量并不均勻car占了絕大多數(shù)truck和bus相對(duì)少一些。這種不均衡在真實(shí)采集數(shù)據(jù)里非常普遍后面我會(huì)單獨(dú)講怎么處理。壓縮包里包含三個(gè)部分images存放圖片、labels存放同名的txt標(biāo)注文件、data.yaml是描述數(shù)據(jù)集信息的配置文件。如果你拿到手的是某個(gè)平臺(tái)上的分享壓縮包解壓后建議先不要直接開訓(xùn)按下面幾步做一次體檢。數(shù)據(jù)集的完整性決定了訓(xùn)練的成敗這一步是最值得花時(shí)間的。2.2 YOLO標(biāo)簽文件到底怎么讀YOLO格式的標(biāo)注文件是純文本每張圖片對(duì)應(yīng)一個(gè)同名txt文件文件里每一行代表一個(gè)目標(biāo)物體。標(biāo)準(zhǔn)格式是類別編號(hào)、歸一化后的中心點(diǎn)x、中心點(diǎn)y、歸一化后的寬度w、歸一化后的高度h。舉個(gè)例子假設(shè)類別定義是0為car、1為truck、2為bus、3為van那么某張圖里有四輛車它的label文件內(nèi)容可能是這樣的0 0.532345 0.671023 0.043210 0.051232 0 0.123456 0.456789 0.033890 0.042154 1 0.803412 0.392001 0.071234 0.062178 3 0.615123 0.223411 0.028345 0.036201第一行的含義是類別為car目標(biāo)中心點(diǎn)在圖片橫向53.23%、縱向67.10%的位置寬度約占圖片4.32%高度約占5.12%。所有坐標(biāo)都縮放到0到1之間這樣做的好處是和圖片分辨率無關(guān)1920×1080和3840×2160可以混在一起訓(xùn)練模型不需要關(guān)心輸入尺寸。但代價(jià)是精度依賴浮點(diǎn)數(shù)一旦標(biāo)注工具導(dǎo)出時(shí)沒有歸一化坐標(biāo)直接寫成了像素值訓(xùn)練就會(huì)出大問題這一點(diǎn)在后面的踩坑部分細(xì)說。2.3 拿到數(shù)據(jù)集后的第一件事完整性體檢不要因?yàn)閿?shù)據(jù)集是別人整理好的就跳過檢查。實(shí)際操作中我最常遇到的情況是圖片后綴大小寫不一致導(dǎo)致標(biāo)簽匹配不上或者某些txt是空文件、里面什么目標(biāo)都沒有或者類別編號(hào)超出了配置文件里的類別總數(shù)。這些隱藏問題不會(huì)讓訓(xùn)練直接報(bào)錯(cuò)而是會(huì)不動(dòng)聲色地拖低精度排查起來最費(fèi)時(shí)間。我通常用下面這個(gè)Python腳本快速體檢標(biāo)準(zhǔn)庫(kù)就能完成不需要額外裝依賴import os from collections import Counter img_dir images label_dir labels img_exts {.jpg, .jpeg, .png, .bmp} imgs set() for f in os.listdir(img_dir): ext os.path.splitext(f)[1].lower() if ext in img_exts: imgs.add(os.path.splitext(f)[0]) label_exts {.txt} labels set() for f in os.listdir(label_dir): ext os.path.splitext(f)[1].lower() if ext in label_exts: labels.add(os.path.splitext(f)[0]) print(無標(biāo)簽的圖片:, len(imgs - labels)) print(無圖片的標(biāo)簽:, len(labels - imgs)) all_classes Counter() bad_lines [] for f in labels: path os.path.join(label_dir, f .txt) with open(path, encodingutf-8) as fp: for line in fp: parts line.strip().split() if len(parts) ! 5: bad_lines.append((f, 字段數(shù)不為5)) continue cid float(parts[0]) if cid ! int(cid) or int(cid) 0 or int(cid) 3: bad_lines.append((f, 類別編號(hào)異常)) continue coords list(map(float, parts[1:])) if max(coords) 1.0001 or min(coords) -0.0001: bad_lines.append((f, 坐標(biāo)越界)) continue all_classes[int(cid)] 1 print(標(biāo)簽行總數(shù):, sum(all_classes.values())) print(類別分布:, dict(sorted(all_classes.items()))) print(異常行數(shù):, len(bad_lines))跑一遍下來圖片和標(biāo)簽數(shù)量是否對(duì)得上、類別分布是否合理、有沒有坐標(biāo)越界基本就一目了然了。我見過不少人跳過這一步直接開訓(xùn)后面損失震蕩怎么調(diào)都調(diào)不好最后發(fā)現(xiàn)是標(biāo)簽文件里混進(jìn)了幾千個(gè)像素坐標(biāo)的臟數(shù)據(jù)。這種問題越早發(fā)現(xiàn)越好。3. 從下載到訓(xùn)練把數(shù)據(jù)集喂給YOLO的完整流程確認(rèn)數(shù)據(jù)集沒有明顯問題之后接下來就是把它組織成目標(biāo)檢測(cè)框架能直接讀取的工程結(jié)構(gòu)。不同框架對(duì)目錄結(jié)構(gòu)的要求大同小異只要抓住核心規(guī)則一通百通。3.1 目錄結(jié)構(gòu)與data.yaml配置YOLO系訓(xùn)練框架通常要求圖片和標(biāo)簽分開存放并且訓(xùn)練集、驗(yàn)證集都要有對(duì)應(yīng)的圖片目錄和標(biāo)簽?zāi)夸?。推薦的結(jié)構(gòu)是這樣的dataset/ ├── images/ │ ├── train/ │ └── val/ ├── labels/ │ ├── train/ │ └── val/ └── data.yamlimages/train里放訓(xùn)練圖片labels/train里放對(duì)應(yīng)對(duì)應(yīng)的txt標(biāo)注文件文件名必須完全一致包括后綴名的大小寫。val目錄同理。data.yaml放在dataset根目錄下內(nèi)容很固定train: ./images/train val: ./images/val nc: 4 names: [car, truck, bus, van]路徑我用的是相對(duì)路徑這樣整個(gè)dataset文件夾挪到哪里都能用。如果你用的是線上訓(xùn)練環(huán)境或者路徑容易變也可以改成絕對(duì)路徑。nc是類別數(shù)量names是類別名字列表順序必須和標(biāo)注文件里的數(shù)字編號(hào)一一對(duì)應(yīng)這一點(diǎn)一旦錯(cuò)位模型訓(xùn)練出來就是“張冠李戴”檢測(cè)結(jié)果全部錯(cuò)亂。3.2 訓(xùn)練集和驗(yàn)證集怎么劃分才合理很多朋友拿到數(shù)據(jù)后直接按比例隨機(jī)打亂劃分比如8:2切分。對(duì)普通圖片數(shù)據(jù)集這么做沒問題但對(duì)無人機(jī)航拍數(shù)據(jù)這個(gè)做法有一個(gè)容易被忽略的隱患無人機(jī)拍攝的連續(xù)幀之間高度相似。同一個(gè)架次繞著一個(gè)路口飛一圈可能拍下幾百?gòu)垐D隨機(jī)劃分后某條路的畫面會(huì)同時(shí)出現(xiàn)在訓(xùn)練集和驗(yàn)證集里模型等于提前“看過”驗(yàn)證題的答案指標(biāo)自然好看但一換到新場(chǎng)景就露餡。我建議按采集場(chǎng)景來劃分而不是按文件隨機(jī)切。比如壓縮包里如果有多個(gè)子目錄盡量保證同一條路、同一個(gè)地塊的圖片只進(jìn)入訓(xùn)練集或只進(jìn)入驗(yàn)證集不要混用。這樣驗(yàn)證集才有真正的泛化意義。如果沒有場(chǎng)景信息也可以對(duì)圖片做抽幀式的劃分每隔幾幀取一張進(jìn)驗(yàn)證集效果比純隨機(jī)好不少。3.3 開訓(xùn)前自檢清單即便數(shù)據(jù)集已經(jīng)整理好我還是建議在啟動(dòng)訓(xùn)練前花30秒過一遍自檢清單。這里直接把我的習(xí)慣列出來你可以對(duì)照檢查圖片數(shù)量與標(biāo)簽文件數(shù)量一致沒有“孤兒”圖片或“孤兒”標(biāo)簽所有txt里的坐標(biāo)都在0到1之間類別編號(hào)是0到3之間的整數(shù)與data.yaml的names順序一致沒有內(nèi)容是空的txt文件如果存在空文件確認(rèn)該圖確實(shí)無目標(biāo)刪掉txt即可訓(xùn)練集和驗(yàn)證集的圖片不存在文件名重復(fù)各類別在訓(xùn)練集里都有一定數(shù)量的樣本像bus、van這類少數(shù)類最少也要有幾十個(gè)實(shí)例檢查完這些再開訓(xùn)基本能保證問題出在模型調(diào)參而不是數(shù)據(jù)格式上。數(shù)據(jù)格式問題上花的時(shí)間永遠(yuǎn)是最值得的。4. 訓(xùn)練實(shí)測(cè)記錄三個(gè)高頻問題與完整排查鏈路我自己在拿類似無人機(jī)數(shù)據(jù)訓(xùn)練時(shí)踩過的坑比想象中多。下面這三個(gè)問題基本是每次都會(huì)碰到的我把完整的排查鏈路寫出來讓你能復(fù)現(xiàn)思路而不是只得到一個(gè)結(jié)論。4.1 問題一損失函數(shù)前期震蕩結(jié)果發(fā)現(xiàn)是標(biāo)簽遺漏第一次用這份數(shù)據(jù)訓(xùn)練時(shí)我開了300輪結(jié)果前20輪loss像心電圖一樣上躥下跳。一開始我懷疑是學(xué)習(xí)率太大調(diào)低之后有所緩和但驗(yàn)證集精度仍然異常mAP0.5一直卡在0.3上下。排查到后面我翻看訓(xùn)練日志發(fā)現(xiàn)每個(gè)batch的target數(shù)量時(shí)多時(shí)少平均每張圖的標(biāo)注數(shù)只有0.8個(gè)左右而實(shí)際畫面里平均應(yīng)該有兩到三輛車。這說明大量圖片的標(biāo)簽文件根本沒有對(duì)應(yīng)的目標(biāo)行。排查過程是這樣的先統(tǒng)計(jì)標(biāo)簽文件的行數(shù)分布發(fā)現(xiàn)很多txt文件大小只有幾個(gè)字節(jié)打開一看是空的再往前查發(fā)現(xiàn)數(shù)據(jù)集壓縮包里的“空標(biāo)注”圖片在轉(zhuǎn)換格式時(shí)被標(biāo)注工具跳過但沒有刪掉對(duì)應(yīng)的txt占位文件。對(duì)于某些目標(biāo)檢測(cè)框架空txt不會(huì)被當(dāng)成錯(cuò)誤只是這張圖變得沒有任何目標(biāo)參與訓(xùn)練數(shù)據(jù)量就這樣悄悄縮水了。解決辦法分兩步第一步寫腳本把所有內(nèi)容為空的txt文件移出標(biāo)簽?zāi)夸洷苊馑加糜?xùn)練樣本第二步如果某些圖確實(shí)有目標(biāo)但txt為空就需要重新標(biāo)注。對(duì)這類數(shù)據(jù)來說刪除空文件之后訓(xùn)練數(shù)據(jù)有效量大約提升了15%到20%loss曲線立刻平滑了很多。這個(gè)坑的教訓(xùn)是訓(xùn)練日志里每個(gè)batch的target數(shù)量一定要看它是數(shù)據(jù)質(zhì)量最直接的晴雨表。4.2 問題二小目標(biāo)漏檢嚴(yán)重mAP數(shù)值卻不錯(cuò)另一件讓我困惑的事是驗(yàn)證集mAP已經(jīng)到0.5以上了結(jié)果拿一段無人機(jī)實(shí)拍視頻一測(cè)小目標(biāo)漏得亂七八糟。后來我把驗(yàn)證集的情況單獨(dú)剖開看發(fā)現(xiàn)mAP高是因?yàn)轵?yàn)證集里如果包含了大量相對(duì)較大、清晰的車輛或者和訓(xùn)練集場(chǎng)景重疊的圖片整體指標(biāo)被“拉高”了。一旦單獨(dú)統(tǒng)計(jì)圖像中小于32×32像素的目標(biāo)檢測(cè)率慘不忍睹。排查的方法是把驗(yàn)證集按目標(biāo)尺寸分成幾個(gè)區(qū)間分別算AP目標(biāo)寬度小于32像素的AP32到64像素的AP大于64像素的AP。對(duì)比之后發(fā)現(xiàn)差距懸殊問題就清楚了。模型不是不會(huì)檢測(cè)車輛而是對(duì)小目標(biāo)沒有足夠的分辨能力。這類問題的通用解法是提升輸入分辨率、增加小目標(biāo)增強(qiáng)策略或者用切圖推理的思路把大圖切成小塊逐塊檢測(cè)再合并結(jié)果。切圖方案在無人機(jī)場(chǎng)景尤其有效因?yàn)樵瓐D畫幅大、目標(biāo)小直接縮放到模型輸入尺寸時(shí)小目標(biāo)丟失嚴(yán)重切塊之后相當(dāng)于變相放大了目標(biāo)。4.3 問題三類別分布嚴(yán)重不均如何用采樣和增強(qiáng)拉齊數(shù)據(jù)集中car約占總標(biāo)注量的七成以上truck和bus占比很小。直接訓(xùn)練出來的模型往往car的AP很高truck、bus的AP低得沒法看。盲目對(duì)少數(shù)類重復(fù)采樣會(huì)讓模型反復(fù)看到同一批樣本結(jié)果是過擬合訓(xùn)練集AP漂亮一換場(chǎng)景就崩。我的做法是組合拳首先給少數(shù)類復(fù)制粘貼增強(qiáng)從已有標(biāo)注框里摳出truck、bus的目標(biāo)經(jīng)過縮放、旋轉(zhuǎn)后隨機(jī)粘貼到?jīng)]有目標(biāo)或者目標(biāo)稀疏的道路區(qū)域同時(shí)生成對(duì)應(yīng)的標(biāo)注行其次在訓(xùn)練配置里增大對(duì)少數(shù)類的采樣權(quán)重讓每個(gè)epoch里少數(shù)類參與訓(xùn)練的次數(shù)更多最后驗(yàn)證集使用最原始的分布不做任何過采樣這樣看到的指標(biāo)才真實(shí)。這套組合拳跑下來truck和bus的AP大約能提升10個(gè)點(diǎn)左右car的AP基本不受影響。5. 別止步于跑通把數(shù)據(jù)集用到自己業(yè)務(wù)里的幾個(gè)建議數(shù)據(jù)集的最終價(jià)值在于能用起來。這份無人機(jī)車輛檢測(cè)數(shù)據(jù)集作為基礎(chǔ)數(shù)據(jù)完全可以支撐很多實(shí)際項(xiàng)目但直接照搬訓(xùn)練結(jié)果去部署還遠(yuǎn)遠(yuǎn)不夠下面這幾個(gè)方向是我實(shí)操后覺得最值得投入的。5.1 模型選型小目標(biāo)優(yōu)先的幾條路線先給結(jié)論小目標(biāo)占比高的場(chǎng)景不一定是模型越大越好而是要看輸入分辨率和特征圖的匹配關(guān)系。大模型參數(shù)量多、特征提取能力強(qiáng)但如果輸入圖被縮到640×640遠(yuǎn)處的小車可能只占兩三個(gè)像素再?gòu)?qiáng)的模型也無米下鍋。我測(cè)試過幾條路線一是用高分辨率輸入直接把模型輸入從640提升到1280小目標(biāo)召回率明顯上升代價(jià)是顯存占用翻倍推理速度下降二是切圖推理把原圖切成若干個(gè)帶重疊的塊每塊單獨(dú)檢測(cè)再合并速度快、顯存友好是實(shí)現(xiàn)成本最低的方案三是使用帶小目標(biāo)檢測(cè)層的檢測(cè)器結(jié)構(gòu)這類模型在特征金字塔上額外增加了針對(duì)小目標(biāo)的淺層特征輸出對(duì)于航拍數(shù)據(jù)比較友好。如果你的項(xiàng)目對(duì)實(shí)時(shí)性要求高建議用輕量模型加切圖推理的組合。我在一個(gè)車輛計(jì)數(shù)項(xiàng)目中用過這套方案無人機(jī)圖傳分辨率為1920×1080切成三四塊并行推理整體幀率還能維持在可接受的范圍內(nèi)。5.2 數(shù)據(jù)增強(qiáng)俯拍場(chǎng)景哪些增強(qiáng)真正有效無人機(jī)俯拍圖的一個(gè)特點(diǎn)是旋轉(zhuǎn)不變性很強(qiáng)——車頂朝上還是朝左對(duì)檢測(cè)任務(wù)來說沒有語(yǔ)義差異。因此水平翻轉(zhuǎn)、垂直翻轉(zhuǎn)、90度旋轉(zhuǎn)這類幾何增強(qiáng)可以大膽開幾乎不會(huì)破壞標(biāo)注語(yǔ)義。我一般會(huì)把翻轉(zhuǎn)增強(qiáng)概率開到0.5旋轉(zhuǎn)也開到較大值這相當(dāng)于不花成本擴(kuò)充了小目標(biāo)樣本的朝向多樣性。相比之下馬賽克增強(qiáng)要謹(jǐn)慎一點(diǎn)。馬賽克拼接對(duì)提升模型魯棒性很有用但無人機(jī)原圖里的目標(biāo)本身很小拼接時(shí)如果把大量目標(biāo)裁切到圖像邊緣很多小目標(biāo)只剩下半個(gè)框模型學(xué)到的是殘缺特征反而有害。我的經(jīng)驗(yàn)是把馬賽克概率調(diào)低到0.3左右并配合更大范圍的隨機(jī)縮放讓拼接后的目標(biāo)尺度分布更接近真實(shí)場(chǎng)景。色彩類的增強(qiáng)對(duì)無人機(jī)數(shù)據(jù)也有用。航拍圖經(jīng)常遇到曝光不均、云影遮擋等問題適當(dāng)?shù)腍SV擾動(dòng)可以提升模型對(duì)光照變化的耐受度。但要注意飽和度擾動(dòng)幅度不要過大否則車體顏色被改得面目全非反而干擾類別判斷。5.3 如果拍攝場(chǎng)景變化大怎么擴(kuò)充和再標(biāo)注實(shí)際項(xiàng)目里你手里的無人機(jī)拍攝高度、云臺(tái)角度、傳感器型號(hào)都可能和這份數(shù)據(jù)集不同。一個(gè)非常高效的做法是先用這份基礎(chǔ)數(shù)據(jù)訓(xùn)練一個(gè)初版模型然后對(duì)你自己采集的視頻做預(yù)標(biāo)注生成初步標(biāo)簽再由人工修正。別一上來就手動(dòng)在幾千張圖上畫框那樣太浪費(fèi)人力。預(yù)標(biāo)注加人工修正時(shí)有個(gè)經(jīng)驗(yàn)視頻抽幀不要逐幀標(biāo)每隔2到4幀抽一幀即可。相鄰幀之間的畫面幾乎沒變化逐幀標(biāo)注純屬重復(fù)勞動(dòng)。抽幀頻率取決于無人機(jī)飛行速度和車輛運(yùn)動(dòng)速度飛得越快抽幀間隔越小。還有一個(gè)小細(xì)節(jié)預(yù)標(biāo)注結(jié)果一定要按前面提到的坐標(biāo)歸一化規(guī)則檢查很多自動(dòng)標(biāo)注工具會(huì)導(dǎo)出像素坐標(biāo)混進(jìn)訓(xùn)練集后會(huì)讓損失函數(shù)突然惡化這種問題幾乎每批新數(shù)據(jù)都會(huì)遇到。如果項(xiàng)目場(chǎng)景跨越很大比如除了白天還要用夜間紅外數(shù)據(jù)基礎(chǔ)數(shù)據(jù)集就只能作為熱身。更合理的做法是在這份數(shù)據(jù)上先確定好網(wǎng)絡(luò)結(jié)構(gòu)和訓(xùn)練配置然后引入少量目標(biāo)場(chǎng)景的真值數(shù)據(jù)做微調(diào)這種“基礎(chǔ)數(shù)據(jù)定框架、場(chǎng)景數(shù)據(jù)做微調(diào)”的路徑投入產(chǎn)出比是最高的。最后再分享一個(gè)個(gè)人習(xí)慣我每次把數(shù)據(jù)集發(fā)給朋友或同事都會(huì)提醒他們先跑一個(gè)50輪的mini實(shí)驗(yàn)。不是為了看精度而是看數(shù)據(jù)管線通不通暢、loss曲線穩(wěn)不穩(wěn)定、標(biāo)簽有沒有臟數(shù)據(jù)。等mini實(shí)驗(yàn)確認(rèn)沒有低級(jí)錯(cuò)誤再上全量數(shù)據(jù)調(diào)參數(shù)。數(shù)據(jù)集的規(guī)模固然重要但標(biāo)注質(zhì)量的一致性才是決定模型上限的命門。希望這份數(shù)據(jù)集能幫你少走幾步彎路把時(shí)間花在真正有價(jià)值的算法優(yōu)化上。