據(jù)集實戰(zhàn):從標(biāo)注格式到訓(xùn)練全流程)
做目標(biāo)檢測的朋友應(yīng)該都有過這種經(jīng)歷想快速驗證一個想法結(jié)果發(fā)現(xiàn)光是找數(shù)據(jù)和整理標(biāo)注就花了三天。尤其是貓狗識別這種看起來簡單、做起來全是細(xì)節(jié)的任務(wù)數(shù)據(jù)集的質(zhì)量直接決定模型上限。最近整理了一份4300張YOLO格式的貓狗檢測數(shù)據(jù)集用 YOLO 系列模型跑了完整訓(xùn)練流程這里把數(shù)據(jù)集本身的設(shè)計思路、格式細(xì)節(jié)、訓(xùn)練過程里踩過的坑一次說清楚。這份數(shù)據(jù)集核心解決的是寵物目標(biāo)檢測的入門與快速驗證問題4300張圖片全部完成邊界框標(biāo)注類別為cat和dog兩類標(biāo)注文件采用YOLO官方txt格式配合YOLOv5/YOLOv8代碼庫可以直接開訓(xùn)不需要寫額外的格式轉(zhuǎn)換腳本。它適合三類人入手剛接觸YOLO想跑通完整流程的初學(xué)者、需要快速驗證檢測算法的研究者、以及做寵物相關(guān)產(chǎn)品原型驗證的開發(fā)者。全文圍繞數(shù)據(jù)集的構(gòu)建邏輯、YOLO標(biāo)注規(guī)范、訓(xùn)練參數(shù)調(diào)優(yōu)和排錯經(jīng)驗展開文末附上我實測下來最有價值的一條建議。1. 4300張圖片的定位這個數(shù)據(jù)集到底能干什么、不能干什么先說結(jié)論4300張在目標(biāo)檢測數(shù)據(jù)集里屬于中小體量但它是一個夠用且不臃腫的規(guī)模。有人一上來就問為什么不多采幾萬張這里需要先厘清一個基本認(rèn)知。1.1 目標(biāo)檢測的數(shù)據(jù)規(guī)模到底怎么分級行業(yè)內(nèi)約定俗成的分法大致是這樣的單類別檢測任務(wù)一萬張以上屬于充裕通常可以支持從零訓(xùn)練幾千張屬于中等體量需要搭配預(yù)訓(xùn)練權(quán)重和較強的數(shù)據(jù)增強一千張以下屬于小樣本基本只能做遷移學(xué)習(xí)或微調(diào)。4300張圖片、假設(shè)平均每張1.5個目標(biāo)大約有六千多個標(biāo)注框這個規(guī)模放在寵物檢測這個特定任務(wù)上配合ImageNet預(yù)訓(xùn)練權(quán)重屬于典型的夠用區(qū)間。關(guān)鍵要理解一點目標(biāo)檢測的數(shù)據(jù)需求看的是多樣性不是單純的數(shù)量。300張各種光線、角度、場景都覆蓋到的圖片效果可能比3000張都是貓坐在沙發(fā)上正面照要好得多。這份數(shù)據(jù)集在收集階段刻意控制了場景重復(fù)度——室內(nèi)、室外、白天、夜晚、手機拍攝、監(jiān)控截圖、不同品種體型的貓狗都有涉及這才是4300張能真正生效的核心原因。1.2 用預(yù)訓(xùn)練權(quán)重還是從零訓(xùn)練這是第一個岔路口為什么強調(diào)配預(yù)訓(xùn)練權(quán)重因為目標(biāo)檢測網(wǎng)絡(luò)的結(jié)構(gòu)可以拆成兩塊backbone負(fù)責(zé)提取通用特征邊緣、紋理、形狀head負(fù)責(zé)定位和分類。backbone在ImageNet上見過海量真實世界圖片已經(jīng)學(xué)會了什么是紋理什么是輪廓你微調(diào)時只需要讓它適配貓和狗的紋理而不是重新學(xué)視覺。學(xué)術(shù)上有個粗略估算從零訓(xùn)練數(shù)據(jù)集總量翻三倍才約等于用預(yù)訓(xùn)練權(quán)重帶來的收益。4300張的量級老老實實用官方COCO預(yù)訓(xùn)練權(quán)重訓(xùn)練效率至少提升一倍。用COCO預(yù)訓(xùn)練權(quán)重還有個隱藏好處COCO數(shù)據(jù)集本身就包含貓和狗這兩個類目遷移過來的模型已經(jīng)具備一定寵物檢測能力只是置信度閾值偏低、誤檢偏多。微調(diào)過程相當(dāng)于在已經(jīng)會檢測貓狗的基礎(chǔ)上進一步適應(yīng)你數(shù)據(jù)集的風(fēng)格分布——收斂速度快最終精度上限也會更高。1.3 這個數(shù)據(jù)集的邊界在哪里我也得把話說清楚4300張只能支撐貓狗雙類檢測不要指望它直接做出品種識別比如區(qū)分金毛和柯基、年齡估計或者其他細(xì)粒度屬性。如果產(chǎn)品需求是做品種識別這個數(shù)據(jù)集的價值是第一步先檢測出寵物位置再把裁剪區(qū)域交給第二個分類模型——檢測和細(xì)粒度分類是流水線上的兩個環(huán)節(jié)分工不同。數(shù)據(jù)集按用途定位這一點不要搞混。2. YOLO標(biāo)注格式深度拆解txt里每一行數(shù)字到底是什么意思YOLO系列統(tǒng)一使用txt格式標(biāo)注文件與圖片同名放在labels目錄下。很多人第一次打開標(biāo)注文件看到一堆小數(shù)直接懵住。拆開看其實極其簡單我給你逐字段解釋。2.1 YOLO標(biāo)注文件的真實結(jié)構(gòu)假設(shè)有一張圖片pet_001.jpg對應(yīng)的pet_001.txt內(nèi)容大概是這樣0 0.456250 0.527778 0.287500 0.422222 1 0.682143 0.316964 0.235714 0.383929每行代表一個目標(biāo)框空格分隔5個字段第一列是類別編號從0開始0代表cat1代表dog第二列是中心點x坐標(biāo)歸一化值第三列是中心點y坐標(biāo)歸一化值第四列是框?qū)挾葰w一化值第五列是框高度歸一化值。歸一化公式是x_center box_x_center / image_widthy_center box_y_center / image_height寬高同理。歸一化之后所有數(shù)值都在0到1之間與圖片分辨率解耦這樣同一套標(biāo)注可以適配640x640、1280x1280等任意輸入尺寸。這就是YOLO格式最優(yōu)雅的地方——它和分辨率的耦合關(guān)系已經(jīng)被徹底切斷了。2.2 從標(biāo)注軟件到Y(jié)OLO格式的轉(zhuǎn)換思路大部分標(biāo)注場景不會直接產(chǎn)出YOLO txt。LabelImg輸出Pascal VOC的xmlLabelMe輸出jsonRoboflow可以導(dǎo)出多種格式。如果拿到的是xml或者json轉(zhuǎn)換邏輯是一個反向歸一化過程import xml.etree.ElementTree as ET def xml_to_yolo(xml_file, class_list, out_file): tree ET.parse(xml_file) root tree.getroot() img_w int(root.find(size/width).text) img_h int(root.find(size/height).text) lines [] for obj in root.iter(object): cls obj.find(name).text if cls not in class_list: continue cls_id class_list.index(cls) box obj.find(bndbox) xmin float(box.find(xmin).text) ymin float(box.find(ymin).text) xmax float(box.find(xmax).text) ymax float(box.find(ymax).text) # 注意YOLO需要的是中心點和寬高不是左上角右下角 x_center (xmin xmax) / 2.0 / img_w y_center (ymin ymax) / 2.0 / img_h w (xmax - xmin) / img_w h (ymax - ymin) / img_h lines.append(f{cls_id} {x_center:.6f} {y_center:.6f} {w:.6f} {h:.6f}) with open(out_file, w) as f: f.write(\n.join(lines))這是所有YOLO訓(xùn)練中最常用的一段轉(zhuǎn)換代碼建議直接存成腳本。我整理數(shù)據(jù)集時有相當(dāng)一部分時間就是花在處理不同來源的標(biāo)注格式統(tǒng)一上寫一個通用轉(zhuǎn)換函數(shù)能省下大量重復(fù)勞動。2.3 標(biāo)注規(guī)范框住什么位置決定了模型學(xué)什么這是實操里最容易犯迷糊的地方。貓狗檢測的邊界框有兩種常見標(biāo)法整只寵物框和頭部框。這份數(shù)據(jù)集統(tǒng)一采用整只寵物作為檢測目標(biāo)原因是全景框的語義更明確、標(biāo)注一致性更好而且后續(xù)做識別、追蹤等擴展任務(wù)時整框比頭框的適用面更寬。你訓(xùn)練自有數(shù)據(jù)集時一定要統(tǒng)一標(biāo)注語義絕不能一個框標(biāo)注整只貓另一個框標(biāo)注貓頭模型會無所適從。標(biāo)注時還有三個細(xì)節(jié)直接影響訓(xùn)練效果。第一框要稍微留一點邊距不要切得太貼皮膚否則裁剪增強時前景信息容易丟失第二寵物被遮擋時標(biāo)注可見部分或標(biāo)注估算的完整輪廓都行但整個數(shù)據(jù)集必須選一種方式混合標(biāo)注會導(dǎo)致回歸目標(biāo)抖動第三極小目標(biāo)比如遠處一只只占幾十像素的貓如果數(shù)量過少簡單標(biāo)注反而會變成噪聲可以考慮稀釋掉這類樣本或者單獨做增強。2.4 標(biāo)注文件校驗清單數(shù)據(jù)整理完成后我強烈建議跑一遍標(biāo)注校驗?zāi)_本再進訓(xùn)練流程。校驗內(nèi)容包括txt文件與圖片文件是否一一對應(yīng)、每行是否有5個數(shù)值、類別編號是否在合法范圍內(nèi)、歸一化坐標(biāo)是否在0到1之間、以及框面積是否過小比如小于圖片面積的0.5%。這就是一個純文本檢查不需要加載模型。import os label_dir labels image_dir images errors [] for label_file in os.listdir(label_dir): if not label_file.endswith(.txt): continue img_file label_file.replace(.txt, .jpg) if not os.path.exists(os.path.join(image_dir, img_file)): errors.append(f圖片缺失: {img_file}) with open(os.path.join(label_dir, label_file)) as f: lines f.readlines() for line in lines: parts line.strip().split() if len(parts) ! 5: errors.append(f字段數(shù)量異常: {label_file}: {line}) continue _, x, y, w, h map(float, parts) if not (0 x 1 and 0 y 1 and 0 w 1 and 0 h 1): errors.append(f坐標(biāo)越界: {label_file}: {line}) if w * h 0.005: errors.append(f框過小: {label_file}: {line}) if errors: print(\n.join(errors[:50])) else: print(校驗通過無異常)現(xiàn)實里最常見的問題是圖片是手機拍攝的豎屏標(biāo)注軟件記住的是橫屏信息轉(zhuǎn)換后坐標(biāo)全亂或者jpg圖片是直接從視頻抽幀得到的分辨率不一致導(dǎo)致歸一化后出現(xiàn)越界。這些都不需要AI能力純靠腳本就能攔下大部分低級錯誤。3. 模型訓(xùn)練全流程從數(shù)據(jù)集目錄到Loss曲線拿到Y(jié)OLO格式數(shù)據(jù)集接下來就是目錄搭建、訓(xùn)練參數(shù)選擇、Loss監(jiān)控這幾步。我按YOLOv8官方庫的規(guī)范來說YOLOv5基本同理。3.1 目錄結(jié)構(gòu)與data.yaml配置YOLO訓(xùn)練不認(rèn)雜亂無章的文件夾結(jié)構(gòu)它有明確約定。數(shù)據(jù)集根目錄下分images和labels各自再分train和val。以這份貓狗數(shù)據(jù)集為例pet_dataset/ ├── images/ │ ├── train/ # 3400張 │ └── val/ # 900張 ├── labels/ │ ├── train/ │ └── val/ └── data.yamldata.yaml內(nèi)容如下train: ./images/train val: ./images/val nc: 2 names: [cat, dog]train和val路徑寫絕對路徑或相對于data.yaml位置的相對路徑都可以我建議直接寫絕對路徑避免不同機器上目錄上下文不一致帶來的麻煩。nc是類別數(shù)names的索引順序必須與標(biāo)注文件里的類別編號嚴(yán)格對應(yīng)——數(shù)據(jù)集中0代表cat那么names列表第一項就必須是cat順序錯一個模型訓(xùn)練出來就是貓狗全反。3.2 劃分train和val隨機抽樣真的夠嗎常見做法是純隨機劃分。如果你的數(shù)據(jù)是單一批次采集的比如都是從同一個圖片網(wǎng)站爬的隨機劃分問題不大。但如果數(shù)據(jù)來源混合了手機實拍和監(jiān)控截圖等多個子集隨機劃分可能導(dǎo)致同一個來源的圖片同時出現(xiàn)在訓(xùn)練集和驗證集驗證指標(biāo)虛高部署到新場景就露餡。穩(wěn)妥的做法是按來源劃分假設(shè)有A、B、C三個來源訓(xùn)練集取AB全部驗證集取C全部這樣驗證集才真正代表沒見過的數(shù)據(jù)。我處理這份數(shù)據(jù)集時額外做了一層驗證集里人為檢查放入了一部分室內(nèi)逆光和寵物快速運動模糊的極端樣本。這么做的理由是如果訓(xùn)練出來的模型在這些困難樣本上都表現(xiàn)穩(wěn)定那些常規(guī)樣本基本不會掉鏈子反過來說如果驗證集全是好拍的正面照片mAP高得好看但一上真實環(huán)境立刻原形畢露。3.3 訓(xùn)練命令參考與參數(shù)選擇邏輯YOLOv8訓(xùn)練命令很直接yolo detect train \ datadata.yaml \ modelyolov8s.pt \ epochs100 \ imgsz640 \ batch16 \ lr00.01 \ patience20選yolov8s的ssmall版本是認(rèn)真權(quán)衡過的模型參數(shù)量約1100萬在消費級顯卡如RTX 3060或以上上訓(xùn)練很快精度對于貓狗雙類任務(wù)完全足夠。用yolov8xx為超大版本在這個數(shù)據(jù)量上沒有任何意義只會更快過擬合訓(xùn)練時間還長好幾倍。如果顯卡顯存不足8GBbatch下調(diào)到8其余不用動。epoch設(shè)100配合patience早停檢測模型通常在三四十輪就開始收斂超過100輪基本都在過擬合的邊緣徘徊。patience20的意思是連續(xù)20輪驗證集mAP無提升就自動終止。實際跑下來大概50到70輪就會觸發(fā)早停我建議每次訓(xùn)練都開啟早停這是防止浪費時間和算力的最佳手段。imgsz640是速度和精度的平衡點。這個數(shù)據(jù)集里的目標(biāo)是寵物體型占比普遍中等偏大640分辨率下識別得很準(zhǔn)。如果你的部署場景大量出現(xiàn)小目標(biāo)比如貓站在十米外的墻角建議切成1280重新訓(xùn)練代價是推理速度明顯下降。3.4 Loss曲線怎么看服務(wù)器上不再需要玄學(xué)訓(xùn)練日志里會實時記錄三個Lossbox_loss邊界框回歸誤差、cls_loss分類誤差、dfl_loss分布焦點損失YOLOv8新引入的框回歸分支。選幾個關(guān)鍵觀察點。第一個關(guān)鍵觀察點是box_loss和cls_loss是否同步下降。兩者同步下降說明模型在定位和分類上同時學(xué)到東西是健康的訓(xùn)練過程。如果cls_loss降得很快、box_loss掉不動說明模型看得見貓但框不準(zhǔn)優(yōu)先排查標(biāo)注框是否貼合反之box_loss正常、cls_loss波動大說明貓狗外觀有些相似樣本在混淆需要檢查標(biāo)注是否有錯。第二個看點是train和val形態(tài)。train端的loss持續(xù)下降、val端出現(xiàn)拐點后反彈就是教科書式的過擬合早停機制會在此時觸發(fā)。如果val loss從頭到尾都在震蕩不下降優(yōu)先懷疑學(xué)習(xí)率太高或者數(shù)據(jù)劃分不均衡。第三個看點是驗證集mAP50和mAP50-95。mAP50IoU閾值0.5時的平均精度反映大目標(biāo)檢測能力mAP50-95多IoU閾值平均反映定位精度。貓狗數(shù)據(jù)集實測下來mAP50-95能到0.8以上就是優(yōu)秀成績。如果mAP50高但mAP50-95偏低說明框的位置飄回歸精度不夠通常要靠增加訓(xùn)練輪數(shù)或者使用更小的學(xué)習(xí)率微調(diào)來修正。4. 訓(xùn)練和推理中那些隱蔽的坑一半的時間花在這里這一節(jié)內(nèi)容全是實操中真金白銀換來的教訓(xùn)。YOLO官方文檔不會告訴你這些但它們對于訓(xùn)練出一版可用模型至關(guān)重要。4.1 模型貓狗全反data.yaml的names順序陷阱有朋友跑完訓(xùn)練驗證集mAP明明很高一測試發(fā)現(xiàn)模型把貓識別成狗、狗識別成貓。根因基本都是data.yaml的names順序和標(biāo)注文件不一致。比如標(biāo)注文件里0代表dog但data.yaml里names第一個寫的是cat模型就學(xué)到了0cat的錯誤映射。邏輯里沒有這個坑因為監(jiān)督信號本身就是0和1模型分類頭學(xué)到的只是對應(yīng)關(guān)系并不會腦補0應(yīng)該是貓還是狗。排查方法訓(xùn)練完成后選一兩張驗證集圖片把標(biāo)注框和預(yù)測框疊加輸出到同一張圖上做可視化對比一眼就能看出類別有沒有錯位。4.2 5000張圖片里總有那么幾張損壞的別讓它們毀掉整體訓(xùn)練圖片文件的隱蔽問題包括下載源圖片擴展名是.jpg但實際編碼是pngOpenCV能讀但可能引發(fā)奇怪行為、彩色圖變成灰度圖、部分圖片帶EXIF旋轉(zhuǎn)信息導(dǎo)致讀入后畫面旋轉(zhuǎn)。上述問題放在訓(xùn)練集里通常不會導(dǎo)致訓(xùn)練終止但會讓那一批次數(shù)據(jù)變成噪聲拉低整體精度。推薦在訓(xùn)練前統(tǒng)一跑一個數(shù)據(jù)清洗用OpenCV全部讀一遍能正常讀到的刪除異常項統(tǒng)一轉(zhuǎn)換為RGB格式并重新保存。代碼不復(fù)雜但價值極高。另外我習(xí)慣在清洗后隨機抽20張圖片做人工復(fù)核——看圖片內(nèi)容與標(biāo)注框是否吻合這一步花十分鐘能及時發(fā)現(xiàn)標(biāo)注軟件抽風(fēng)導(dǎo)致的整批框偏移。4.3 模型在訓(xùn)練集上很好但在真實場景里的表現(xiàn)一言難盡這種訓(xùn)練評測達標(biāo)、上線翻車的情況十有八九是數(shù)據(jù)分布偏差問題。訓(xùn)練集占據(jù)最多的照片是貓安靜坐著狗正對鏡頭這類標(biāo)準(zhǔn)姿態(tài)但真實場景里狗在奔跑、貓在睡覺縮成一團外觀差異巨大。解決方案是數(shù)據(jù)增強里加大hsv_h、hsv_s、hsv_v擾動幅度模擬光線變化以及適當(dāng)增加random_perspective隨機透視變換模擬不同拍攝視角。YOLO的增強管線默認(rèn)開啟Mosaic和MixUp默認(rèn)參數(shù)在城市街景等數(shù)據(jù)集上表現(xiàn)良好但針對寵物這種目標(biāo)占比大、形態(tài)多變的場景值得手動調(diào)整參數(shù)。要提醒的是增強參數(shù)不是越大越好。Mosaic增強把四張圖拼成一張如果perturb參數(shù)太激進拼出來的圖貓狗身體被割裂一半反而讓模型學(xué)到殘缺特征。增強參數(shù)調(diào)整后建議訓(xùn)練前先做一批可視化確認(rèn)增強后圖片里的目標(biāo)還保持可辨認(rèn)狀態(tài)再開完整訓(xùn)練。4.4 推理階段NMS和置信度閾值調(diào)整訓(xùn)練完的模型進入推理階段還需處理兩個常規(guī)參數(shù)置信度閾值conf和IoU閾值iou。YOLO模型會密集預(yù)測大量候選框靠NMS非極大值抑制去掉重疊框。conf默認(rèn)0.25、iou默認(rèn)0.45適合通用場景但寵物檢測有自身特點一張圖上通常只有一兩個目標(biāo)互相重疊的候選框大量來自同一目標(biāo)NMS的iou閾值低一點0.4能更干凈地去掉冗余框。如果出現(xiàn)一個貓預(yù)測框里面套著一個略小的狗框直接判定為誤檢不用為此調(diào)低置信度閾值。4.5 訓(xùn)練時顯存溢出怎么辦顯存溢出的核心解法不是換卡而是降batch。batch減半、顯存占用基本隨之減半。如果降到batch8還溢出檢查一下網(wǎng)絡(luò)里是否開啟了超大推理尺寸的驗證或者imbgsz是否設(shè)置過大。作為臨時性方案可以將圖像增強里的Mosaic在最后10個epoch關(guān)閉這會直接減少顯存占用。這個操作須在訓(xùn)練時手動改配置YOLO官方暫不支持訓(xùn)練過程中動態(tài)關(guān)閉。訓(xùn)練完成后還有一個很容易忽略的細(xì)節(jié)模型產(chǎn)物包含最后幾輪權(quán)重文件best.pt和last.pt。best.pt是官方自動保存的驗證集最優(yōu)模型按慣例直接采用last.pt是最后一輪權(quán)重一般訓(xùn)練完成后 практически 無用但如果你用last.pt繼續(xù)做下個epoch的初始化可以省掉幾輪熱身時間——這個操作對生產(chǎn)環(huán)境沒有意義訓(xùn)練調(diào)試時可以用。5. 從數(shù)據(jù)集延伸到部署寵物檢測落地時躲不開的工程問題數(shù)據(jù)集和訓(xùn)練只是模型上線的上半場下半場是部署。針對貓狗檢測部署方案有兩條常見路線服務(wù)端推理和邊緣端推理。5.1 服務(wù)端部署PyTorch模型轉(zhuǎn)ONNX再轉(zhuǎn)TensorRT如果服務(wù)端有NVIDIA顯卡性能最高的方式是把訓(xùn)練好的模型導(dǎo)出成ONNX格式再轉(zhuǎn)換成TensorRT的engine文件。YOLOv8官方提供了便捷導(dǎo)出命令yolo export modelbest.pt formatengine device0TensorRT針對顯卡做算子融合和精度校準(zhǔn)推理速度比PyTorch原生快3到5倍。以yolov8s為例640分辨率輸入在RTX 3060上TensorRT推理單幀大約8到12毫秒折算下來能支持多路視頻流并發(fā)。需要說明的是如果你做的是大規(guī)模視頻流分析比如幾十路攝像頭并行跑貓狗檢測瓶頸往往不在單幀推理速度而在數(shù)據(jù)預(yù)處理、后處理NMS和內(nèi)存IO需要做異步管道設(shè)計。這部分屬于工程化話題這里不展開但方向上可以確定TensorRT是正確的起點。5.2 邊緣端部署與樹莓派級別設(shè)備邊緣端如Jetson Nano、樹莓派資源受限優(yōu)先選擇NCNN或ONNX Runtime這類輕量級推理框架模型的浮點精度權(quán)重重可以轉(zhuǎn)成FP16甚至INT8。這里要注意INT8量化會引入精度損失尤其對邊緣上的小目標(biāo)檢測影響較大。如果產(chǎn)品對檢測精度敏感建議做INT8量化后用一批真實圖像驗證mAP下降幅度下降超過2個點就退回FP16。Jetson系列硬件本身對TensorRT支持極好實測同樣是yolov8sFP16推理在Jetson Orin Nano上大約可以達到實時處理要求具體幀率同硬件配置強相關(guān)不做沒有依據(jù)的保證。5.3 數(shù)據(jù)閉環(huán)數(shù)據(jù)集的價值在于啟動而不在于終點最后想認(rèn)真講一個很多人忽略的認(rèn)知任何靜態(tài)數(shù)據(jù)集都只是冷啟動的發(fā)動機真正讓模型長期穩(wěn)定運行的關(guān)鍵是數(shù)據(jù)閉環(huán)。你的模型上線后會遇到大量訓(xùn)練集沒覆蓋到的情況——金毛犬尾巴高高翹起、貓從沙發(fā)背后探出半個頭、夜里紅外攝像頭下的黑白影像。這些難例才是模型進化最重要的燃料。實操上在推理服務(wù)中加一個困難樣本自動收集模塊置信度低于閾值的目標(biāo)、人工糾正過的樣本、高頻誤檢的圖片全部回流到待標(biāo)注隊列定期標(biāo)注后補充進訓(xùn)練集持續(xù)迭代。這套機制建立后模型才會越用越準(zhǔn)才真正發(fā)揮出數(shù)據(jù)集作為基礎(chǔ)設(shè)施的價值?;氐介_頭說的那份貓狗檢測數(shù)據(jù)集4300張是一個適中的起步規(guī)模配合預(yù)訓(xùn)練權(quán)重、合理的標(biāo)注規(guī)范和標(biāo)準(zhǔn)訓(xùn)練流程足夠支撐大多數(shù)寵物檢測原型的驗證需求。我用它跑出的最佳模型mAP50在0.84到0.87之間具體數(shù)值因數(shù)據(jù)劃分和訓(xùn)練參數(shù)略有浮動。關(guān)鍵是整個流程走通之后你收獲的不僅是一個能用模型更是對YOLO數(shù)據(jù)格式、訓(xùn)練配置、Loss分析、排錯思路的完整理解。后面無論是擴大數(shù)據(jù)集還是遷移到其他檢測任務(wù)這套方法論都能直接復(fù)用。