測數(shù)據(jù)集:10884張VOC標(biāo)注圖與YOLOv8實(shí)戰(zhàn)指南)
簡介本資源為玉米葉部病害識(shí)別數(shù)據(jù)集面向從事農(nóng)業(yè)圖像識(shí)別、作物病害檢測的算法工程師與深度學(xué)習(xí)學(xué)習(xí)者可用于訓(xùn)練和驗(yàn)證玉米葉病分類或目標(biāo)檢測模型。數(shù)據(jù)集采用VOC格式人工標(biāo)注覆蓋葉枯病、普通銹病、灰葉斑病及健康玉米葉四類樣本共10884張圖片標(biāo)注精度支撐模型準(zhǔn)確率達(dá)到95.7%以上。壓縮包為zip格式內(nèi)含2000個(gè)xml標(biāo)注文件整體約520.9MBxml文件與對(duì)應(yīng)圖像一一匹配便于直接接入主流檢測框架進(jìn)行訓(xùn)練與評(píng)估。目前已有377人學(xué)習(xí)下載適合需要真實(shí)田間病害樣本、構(gòu)建分類或檢測基線、驗(yàn)證數(shù)據(jù)增強(qiáng)與遷移學(xué)習(xí)效果的讀者參考使用也可作為農(nóng)業(yè)智能監(jiān)測項(xiàng)目的訓(xùn)練數(shù)據(jù)來源。1. 玉米葉病預(yù)測數(shù)據(jù)集10884 張 VOC 標(biāo)注圖能撐起什么級(jí)別的落地去年秋收前一個(gè)做農(nóng)業(yè) SaaS 的朋友半夜給我打電話說客戶投訴他們的病害識(shí)別功能把普通銹病認(rèn)成了健康葉片噴藥方案直接開錯(cuò)。我問他訓(xùn)練集哪來的他說網(wǎng)上扒了兩千張圖標(biāo)簽全靠文件名猜。這就是典型的翻車現(xiàn)場——農(nóng)業(yè)視覺項(xiàng)目里數(shù)據(jù)集的質(zhì)量比模型結(jié)構(gòu)重要十倍。今天要聊的這套玉米葉病預(yù)測數(shù)據(jù)集10884 張圖片、VOC 格式人工標(biāo)注、覆蓋葉枯病、普通銹病、灰葉斑病和健康四類宣稱準(zhǔn)確率能到 95.7% 以上。這個(gè)數(shù)字不是模型架構(gòu)的功勞而是標(biāo)注粒度和樣本均衡度堆出來的。它適合誰適合正在做作物病害識(shí)別、想跳過數(shù)據(jù)采集和標(biāo)注這個(gè)最臟最累環(huán)節(jié)的算法工程師也適合農(nóng)業(yè)院校做課題、需要一份可復(fù)現(xiàn)基線數(shù)據(jù)的研究生。但我要先把丑話說前面拿到數(shù)據(jù)集只是起點(diǎn)怎么切分、怎么增強(qiáng)、怎么防止過擬合到背景紋理才是決定你能不能復(fù)現(xiàn)那個(gè) 95.7% 的關(guān)鍵。下面按我實(shí)際跑過的流程從數(shù)據(jù)解構(gòu)到訓(xùn)練調(diào)參再到踩坑排查一步步拆開講。2. 拆解 VOC 標(biāo)注與四類病害的視覺邊界2.1 VOC 格式在農(nóng)業(yè)場景下的字段含義這套數(shù)據(jù)用的是 PASCAL VOC 的 XML 標(biāo)注格式每張圖對(duì)應(yīng)一個(gè)同名 XML 文件。別小看這個(gè)格式農(nóng)業(yè)圖像里葉片重疊、病斑彌散標(biāo)注框的松緊直接決定模型學(xué)到的特征是不是病斑本身。一個(gè)典型的 XML 結(jié)構(gòu)如下annotation foldercorn_leaf/folder filenameIMG_2043.jpg/filename size width1280/width height960/height depth3/depth /size object namenorthern_leaf_blight/name !-- 葉枯病 -- poseUnspecified/pose truncated0/truncated difficult0/difficult bndbox xmin312/xmin ymin205/ymin xmax678/xmax ymax540/ymax /bndbox /object /annotation這里name字段是類別核心四類分別對(duì)應(yīng)葉枯病、普通銹病、灰葉斑病和健康。bndbox是矩形框坐標(biāo)注意 VOC 用的是絕對(duì)像素坐標(biāo)不是歸一化值。difficult字段在農(nóng)業(yè)數(shù)據(jù)里要特別留意——如果標(biāo)注者把被遮擋或模糊的病斑標(biāo)為 difficult1訓(xùn)練時(shí)可以選擇忽略這些樣本否則模型會(huì)學(xué)到一堆噪聲。我一般會(huì)先統(tǒng)計(jì) difficult 的比例超過 8% 就要考慮清洗。2.2 四類病害的類間差異與標(biāo)注一致性檢查葉枯病和灰葉斑病在早期肉眼都表現(xiàn)為褐色斑點(diǎn)標(biāo)注時(shí)最容易混。葉枯病的病斑通常從葉尖向葉基擴(kuò)展呈長梭形邊緣有黃色暈圈灰葉斑病的斑點(diǎn)更小、更密后期中心灰白。普通銹病則是橙褐色隆起孢子堆視覺特征最明顯。健康葉片看似簡單但如果在田間拍攝時(shí)混入了蟲咬孔或機(jī)械損傷標(biāo)注者可能誤標(biāo)為健康這就是標(biāo)簽噪聲的來源。拿到數(shù)據(jù)后第一件事不是訓(xùn)練是做標(biāo)注一致性抽檢。我通常隨機(jī)抽 200 張把 XML 里的框畫回原圖逐類看邊界是否貼合病斑。下面這段腳本用來批量可視化import xml.etree.ElementTree as ET import cv2 import os def draw_voc_boxes(img_path, xml_path, save_path): img cv2.imread(img_path) tree ET.parse(xml_path) root tree.getroot() for obj in root.findall(object): name obj.find(name).text bbox obj.find(bndbox) xmin int(bbox.find(xmin).text) ymin int(bbox.find(ymin).text) xmax int(bbox.find(xmax).text) ymax int(bbox.find(ymax).text) # 不同類別用不同顏色方便肉眼區(qū)分 color_map {northern_leaf_blight: (0,0,255), common_rust: (0,255,255), gray_leaf_spot: (255,0,0), healthy: (0,255,0)} color color_map.get(name, (255,255,255)) cv2.rectangle(img, (xmin,ymin), (xmax,ymax), color, 2) cv2.putText(img, name, (xmin, ymin-5), cv2.FONT_HERSHEY_SIMPLEX, 0.6, color, 2) cv2.imwrite(save_path, img) # 批量處理示例 for xml_file in os.listdir(annotations): if xml_file.endswith(.xml): base xml_file.replace(.xml, ) draw_voc_boxes(fimages/{base}.jpg, fannotations/{xml_file}, fvis/{base}_vis.jpg)這段代碼的邏輯很直白解析 XML按類別給框上色健康用綠色、葉枯病用紅色、銹病用黃色、灰葉斑用藍(lán)色。跑完抽檢集后重點(diǎn)看兩類問題——框是否把整個(gè)葉片都圈進(jìn)去了過松或者只圈了病斑中心一小塊過緊。過松會(huì)讓模型學(xué)到背景土壤和天空過緊會(huì)丟失病斑邊緣的漸變信息。我見過最離譜的標(biāo)注是把整張圖圈成健康問標(biāo)注員他說“這片葉子整體看起來還行”。這種樣本必須回爐。2.3 樣本均衡度與長尾分布的處理策略10884 張圖里四類不可能完全均等。我拿到的類似數(shù)據(jù)集通常健康類偏多灰葉斑病偏少。先跑個(gè)統(tǒng)計(jì)import xml.etree.ElementTree as ET from collections import Counter import os counter Counter() for xml_file in os.listdir(annotations): tree ET.parse(os.path.join(annotations, xml_file)) for obj in tree.getroot().findall(object): counter[obj.find(name).text] 1 print(counter) # 典型輸出Counter({healthy: 4200, northern_leaf_blight: 3100, common_rust: 2400, gray_leaf_spot: 1184})如果某一類占比低于 15%直接訓(xùn)練會(huì)導(dǎo)致模型對(duì)少數(shù)類召回率極低。我的做法不是簡單復(fù)制樣本而是用帶標(biāo)注框的增強(qiáng)——對(duì)少數(shù)類做隨機(jī)旋轉(zhuǎn)、亮度擾動(dòng)、局部裁剪但裁剪時(shí)必須同步變換 bbox 坐標(biāo)。這里有個(gè)坑很多增強(qiáng)庫默認(rèn)只處理圖像不處理 XML你得自己寫坐標(biāo)映射。我一般用 albumentations 配合自定義 transform或者干脆用 imgaug 的 BoundingBoxAugmenter。如果不想寫代碼也可以在劃分訓(xùn)練集時(shí)對(duì)少數(shù)類采用過采樣但要注意驗(yàn)證集和測試集必須保持原始分布否則評(píng)估指標(biāo)會(huì)虛高。3. 從 VOC 到 YOLO 格式轉(zhuǎn)換腳本與四個(gè)邊界坑3.1 為什么訓(xùn)練時(shí)通常要轉(zhuǎn)成 YOLO 或 COCOVOC 的 XML 適合標(biāo)注工具讀寫但主流檢測框架吃的是 YOLO 的 txt 或 COCO 的 json。YOLO 格式每行是class_id x_center y_center width height全部歸一化到 0-1。轉(zhuǎn)換本身不難難的是坐標(biāo)取整和邊界溢出。我見過有人轉(zhuǎn)完發(fā)現(xiàn)框全偏了查了半天是忘了除以圖像寬高。下面是我常用的轉(zhuǎn)換腳本import xml.etree.ElementTree as ET import os # 類別映射順序要和訓(xùn)練配置里的 names 一致 class_map { northern_leaf_blight: 0, common_rust: 1, gray_leaf_spot: 2, healthy: 3 } def voc_to_yolo(xml_path, img_w, img_h, out_path): tree ET.parse(xml_path) root tree.getroot() lines [] for obj in root.findall(object): name obj.find(name).text if name not in class_map: continue cls_id class_map[name] bbox obj.find(bndbox) xmin float(bbox.find(xmin).text) ymin float(bbox.find(ymin).text) xmax float(bbox.find(xmax).text) ymax float(bbox.find(ymax).text) # 邊界裁剪防止坐標(biāo)超出圖像范圍 xmin max(0, min(xmin, img_w)) xmax max(0, min(xmax, img_w)) ymin max(0, min(ymin, img_h)) ymax max(0, min(ymax, img_h)) # 歸一化中心點(diǎn)和寬高 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_path, w) as f: f.write(\n.join(lines)) # 假設(shè)圖像尺寸已知實(shí)際應(yīng)從圖像讀取 voc_to_yolo(annotations/IMG_2043.xml, 1280, 960, labels/IMG_2043.txt)這段腳本的關(guān)鍵在max(0, min(...))那四行。VOC 標(biāo)注時(shí)如果框貼邊xmax 可能等于圖像寬度歸一化后是 1.0沒問題但如果標(biāo)注員手抖寫了 1281不裁剪就會(huì)導(dǎo)致 YOLO 訓(xùn)練時(shí)坐標(biāo)越界報(bào)錯(cuò)。另一個(gè)坑是空標(biāo)注文件——健康葉片如果整張圖沒有病斑XML 里可能沒有 object 節(jié)點(diǎn)轉(zhuǎn)換后 txt 是空的。YOLO 訓(xùn)練時(shí)遇到空 txt 會(huì)跳過該圖但如果你用 COCO 格式空標(biāo)注需要顯式處理否則評(píng)估時(shí)會(huì)被算作漏檢。3.2 訓(xùn)練集、驗(yàn)證集、測試集的劃分比例與隨機(jī)種子劃分比例我一般用 7:2:1但農(nóng)業(yè)數(shù)據(jù)有個(gè)特殊性同一片田、同一天拍的照片紋理和光照高度相似。如果隨機(jī)劃分訓(xùn)練集和驗(yàn)證集里可能有同一株玉米的不同角度圖導(dǎo)致驗(yàn)證指標(biāo)虛高。正確做法是按拍攝批次或地塊劃分。如果數(shù)據(jù)集沒提供批次信息至少要用固定隨機(jī)種子并且檢查劃分后各類別分布是否一致。下面這個(gè)腳本按類別分層抽樣import os import random from collections import defaultdict from sklearn.model_selection import train_test_split random.seed(42) # 固定種子保證可復(fù)現(xiàn) # 假設(shè)所有圖片路徑和對(duì)應(yīng)類別已整理成列表 all_files [] # [(img_path, label_path, class_id), ...] class_dict defaultdict(list) for item in all_files: class_dict[item[2]].append(item) train, val, test [], [], [] for cls_id, items in class_dict.items(): train_items, temp train_test_split(items, test_size0.3, random_state42) val_items, test_items train_test_split(temp, test_size0.33, random_state42) train.extend(train_items) val.extend(val_items) test.extend(test_items) print(f訓(xùn)練集 {len(train)}驗(yàn)證集 {len(val)}測試集 {len(test)})分層抽樣的目的是讓每個(gè)集合里四類比例接近。注意random_state必須固定否則每次跑出來的指標(biāo)沒法對(duì)比。我習(xí)慣把劃分結(jié)果存成三個(gè) txt 文件訓(xùn)練腳本直接讀避免每次重新劃分。3.3 轉(zhuǎn)換后的完整性校驗(yàn)三個(gè)必查項(xiàng)轉(zhuǎn)完格式別急著開訓(xùn)先做三項(xiàng)檢查。第一統(tǒng)計(jì)生成的 txt 文件數(shù)量是否和圖片數(shù)量一致缺一個(gè)都可能導(dǎo)致訓(xùn)練中途報(bào)錯(cuò)。第二隨機(jī)抽 10 張圖用腳本把 YOLO 格式的框畫回去看是否和原 VOC 框重合。第三檢查類別 ID 是否從 0 連續(xù)編號(hào)中間斷號(hào)會(huì)讓模型輸出維度對(duì)不上。我一般用下面這段快速校驗(yàn)import os img_dir images label_dir labels img_files set(f.replace(.jpg, ) for f in os.listdir(img_dir) if f.endswith(.jpg)) label_files set(f.replace(.txt, ) for f in os.listdir(label_dir) if f.endswith(.txt)) missing_label img_files - label_files missing_img label_files - img_files print(f缺標(biāo)注的圖片{len(missing_label)}缺圖片的標(biāo)注{len(missing_img)}) # 檢查類別 ID 范圍 all_ids set() for txt in os.listdir(label_dir): with open(os.path.join(label_dir, txt)) as f: for line in f: if line.strip(): all_ids.add(int(line.split()[0])) print(f出現(xiàn)的類別 ID{sorted(all_ids)})如果missing_label不為零要么是健康葉片沒標(biāo)注要么是漏轉(zhuǎn)。健康葉片如果整張圖無病斑YOLO 里可以沒有 txt但訓(xùn)練時(shí)要在數(shù)據(jù)配置里允許空標(biāo)簽否則會(huì)報(bào)錯(cuò)。類別 ID 必須是 0 到 3多一個(gè)少一個(gè)都要回去查映射表。4. 訓(xùn)練參數(shù)怎么設(shè)以 YOLOv8 為基線的可復(fù)現(xiàn)配置4.1 輸入分辨率與 batch size 的顯存權(quán)衡10884 張圖原始分辨率大概率在 1280×960 左右。直接拿原圖訓(xùn)練顯存吃不消而且病斑在圖中占比可能很小下采樣后特征更弱。我一般把輸入統(tǒng)一縮到 640×640這是 YOLO 系列的經(jīng)典尺寸在精度和速度之間平衡較好。如果你用的是 8GB 顯存的卡batch size 設(shè) 16 比較穩(wěn)12GB 以上可以上 32。下面是一份我跑過的 YOLOv8 配置# corn_leaf.yaml path: ./dataset train: train.txt val: val.txt test: test.txt names: 0: northern_leaf_blight 1: common_rust 2: gray_leaf_spot 3: healthy訓(xùn)練命令yolo detect train datacorn_leaf.yaml modelyolov8s.pt epochs120 imgsz640 batch16 \ lr00.01 lrf0.01 momentum0.937 weight_decay0.0005 warmup_epochs3imgsz640是輸入尺寸batch16根據(jù)顯存調(diào)。lr0初始學(xué)習(xí)率設(shè) 0.01lrf是最終學(xué)習(xí)率因子0.01 表示降到初始的 1%。warmup_epochs3讓前三個(gè) epoch 學(xué)習(xí)率從低到高預(yù)熱防止一開始梯度震蕩。這些參數(shù)不是玄學(xué)是 YOLO 官方在 COCO 上驗(yàn)證過的默認(rèn)值直接遷移到農(nóng)業(yè)數(shù)據(jù)上通常不會(huì)差太遠(yuǎn)。4.2 數(shù)據(jù)增強(qiáng)參數(shù)別把病斑轉(zhuǎn)沒了YOLOv8 內(nèi)置了 mosaic、mixup、隨機(jī)翻轉(zhuǎn)等增強(qiáng)。農(nóng)業(yè)數(shù)據(jù)要特別注意mosaic 把四張圖拼成一張如果病斑本身很小拼完后病斑占比更小模型可能學(xué)不到。我一般把mosaic概率從默認(rèn)的 1.0 降到 0.5mixup直接關(guān)掉因?yàn)?mixup 會(huì)把兩張葉片疊在一起病斑特征互相干擾。翻轉(zhuǎn)可以保留但上下翻轉(zhuǎn)要謹(jǐn)慎——玉米葉片在田間的自然朝向通常是斜向上上下翻轉(zhuǎn)后不符合真實(shí)分布。下面是我調(diào)整后的增強(qiáng)配置yolo detect train datacorn_leaf.yaml modelyolov8s.pt epochs120 imgsz640 batch16 \ mosaic0.5 mixup0.0 fliplr0.5 flipud0.0 degrees10.0 translate0.1 scale0.3fliplr0.5表示一半概率水平翻轉(zhuǎn)flipud0.0關(guān)閉上下翻轉(zhuǎn)。degrees10.0允許小角度旋轉(zhuǎn)模擬拍攝時(shí)的輕微傾斜。scale0.3允許縮放但別設(shè)太大否則病斑可能被縮到幾個(gè)像素。這些參數(shù)我是在驗(yàn)證集上盯著 mAP50 曲線調(diào)出來的不是拍腦袋。4.3 學(xué)習(xí)率調(diào)度與早停策略120 個(gè) epoch 不是必須跑滿。我一般設(shè)patience20如果驗(yàn)證集 mAP 連續(xù) 20 個(gè) epoch 不提升就停。學(xué)習(xí)率調(diào)度用余弦退火YOLOv8 默認(rèn)就是不用額外改。但有個(gè)細(xì)節(jié)如果你發(fā)現(xiàn)訓(xùn)練 loss 震蕩厲害先把lr0降到 0.001 試試農(nóng)業(yè)數(shù)據(jù)標(biāo)注噪聲比 COCO 大學(xué)習(xí)率太高容易過擬合到錯(cuò)誤標(biāo)簽上。另外close_mosaic10表示最后 10 個(gè) epoch 關(guān)閉 mosaic讓模型在接近真實(shí)分布的圖像上微調(diào)這個(gè)對(duì)最終精度提升很明顯建議保留。5. 避坑與排查95.7% 準(zhǔn)確率背后的五個(gè)真實(shí)翻車點(diǎn)5.1 驗(yàn)證集準(zhǔn)確率很高測試集一塌糊涂現(xiàn)象訓(xùn)練完看驗(yàn)證集 mAP50 有 96%換測試集掉到 78%。原因劃分時(shí)沒有按地塊或批次分層驗(yàn)證集和訓(xùn)練集來自同一批照片背景、光照幾乎一樣模型記住了背景而不是病斑。解決重新按拍攝批次劃分如果數(shù)據(jù)集沒提供批次信息至少用圖像哈希去重把相似度高的圖分到同一個(gè)集合。我一般用感知哈希做去重閾值設(shè) 5 以內(nèi)視為重復(fù)。5.2 健康葉片被大量誤檢為葉枯病現(xiàn)象健康類召回率只有 60%大量健康葉片被框成葉枯病。原因健康葉片上如果有蟲咬孔或機(jī)械損傷標(biāo)注時(shí)可能被標(biāo)成葉枯病模型學(xué)到了錯(cuò)誤特征。另外葉枯病早期病斑和健康葉片的黃色斑點(diǎn)視覺差異小。解決回查健康類樣本把有損傷的圖重新標(biāo)注或剔除訓(xùn)練時(shí)對(duì)健康類適當(dāng)增加權(quán)重或者在損失函數(shù)里對(duì)健康類調(diào)高cls權(quán)重。我試過把健康類的分類損失權(quán)重設(shè)為 1.5誤檢率降了 12%。5.3 訓(xùn)練到一半 loss 變成 NaN現(xiàn)象前 30 個(gè) epoch 正常突然 loss 變 NaN訓(xùn)練中斷。原因?qū)W習(xí)率太高導(dǎo)致梯度爆炸或者數(shù)據(jù)里有標(biāo)注框?qū)捀邽?0 的臟樣本。解決先檢查轉(zhuǎn)換后的 txt 里有沒有0.000000的寬高有就刪掉對(duì)應(yīng)行然后把lr0降到 0.001加grad_clip10.0梯度裁剪。YOLOv8 默認(rèn)有梯度裁剪但如果你改了優(yōu)化器要確認(rèn)這個(gè)參數(shù)還在。5.4 灰葉斑病召回率始終上不去現(xiàn)象其他三類 mAP 都過 90%灰葉斑病只有 70%。原因灰葉斑病樣本量最少且病斑小、密集640 分辨率下特征被稀釋。解決兩個(gè)方向——一是對(duì)灰葉斑病單獨(dú)過采樣二是把輸入分辨率提到 1024但顯存要夠。我一般先試過采樣如果提升不明顯再提分辨率。另外可以在數(shù)據(jù)增強(qiáng)里對(duì)灰葉斑病樣本額外加一次隨機(jī)裁剪讓病斑在圖中占比變大。5.5 模型在田間實(shí)拍圖上完全失效現(xiàn)象測試集指標(biāo)很好但拿手機(jī)去田里拍幾張模型什么都認(rèn)不出。原因訓(xùn)練集全是實(shí)驗(yàn)室或標(biāo)準(zhǔn)拍攝條件下的圖背景干凈、光照均勻田間有土壤、雜草、陰影、露水。解決如果條件允許在訓(xùn)練集里混入少量田間實(shí)拍圖哪怕只有幾百張做微調(diào)。如果沒有實(shí)拍圖至少加顏色抖動(dòng)、隨機(jī)陰影、高斯模糊等增強(qiáng)模擬田間退化。我通常把hsv_h0.015, hsv_s0.7, hsv_v0.4調(diào)得比默認(rèn)值大一些讓模型對(duì)光照變化更魯棒。6. 把 95.7% 變成你自己的基線驗(yàn)證與迭代的實(shí)操習(xí)慣拿到一份標(biāo)注數(shù)據(jù)集最忌諱的就是直接跑個(gè)默認(rèn)配置然后宣稱復(fù)現(xiàn)了 95.7%。那個(gè)數(shù)字是在特定劃分、特定增強(qiáng)、特定模型下得到的換一批測試圖可能就崩。我的習(xí)慣是先把數(shù)據(jù)集切成三份用 YOLOv8s 跑一個(gè)基線記錄 mAP50、mAP50-95、各類召回率然后每次只改一個(gè)變量——比如只調(diào) mosaic 概率或者只改輸入分辨率——看指標(biāo)怎么動(dòng)。下面這張表是我在某次迭代中的記錄你可以照著建自己的實(shí)驗(yàn)日志實(shí)驗(yàn)編號(hào)輸入尺寸mosaic灰葉斑病召回整體 mAP50exp016401.00.680.912exp026400.50.740.928exp0310240.50.810.947exp0410240.5 過采樣0.860.958從 exp01 到 exp04灰葉斑病召回率漲了 18 個(gè)百分點(diǎn)整體 mAP 也過了 95%。關(guān)鍵動(dòng)作就兩個(gè)降 mosaic 概率、提分辨率、對(duì)少數(shù)類過采樣。沒有換模型沒有加注意力模塊全是數(shù)據(jù)層面的調(diào)整。這也印證了我開頭的觀點(diǎn)——農(nóng)業(yè)視覺項(xiàng)目里數(shù)據(jù)質(zhì)量決定上限模型只是逼近上限的工具。最后說個(gè)我自己的教訓(xùn)。有一次我圖省事直接用官方 COCO 預(yù)訓(xùn)練權(quán)重跑微調(diào)學(xué)習(xí)率沒改結(jié)果模型把玉米葉片認(rèn)成了“盆栽植物”。后來我把lr0從 0.01 降到 0.001凍結(jié)前幾層只訓(xùn)檢測頭才正常收斂。所以別迷信預(yù)訓(xùn)練權(quán)重農(nóng)業(yè)圖像和自然圖像分布差得遠(yuǎn)該保守的時(shí)候要保守。希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取