☰
大白菜叶片病害检测:2800张标注数据集与YOLOv8训练实战
2026/10/5 6:16:24 网站建设 项目流程

简介:面向智慧农业病害识别、计算机视觉分类算法研究及深度学习者,这份数据集围绕大白菜叶片病害检测场景构建,包含约2800张已标注的叶片图像样本,共划分为背蛾、潜叶虫、霉菌3个类别,并已划分好训练集与测试集目录。包内文件总数为2000个,核心部分是1998张jpg格式图像,另外配有1个json标注文件用于保存类别映射关系、1个Python可视化脚本用于一键查看各类样本展示;整体压缩包约350.83MB,目录结构直观,方便直接读取与训练。数据集自带预划分目录,省去手工切分样本的流程,配合常见的CNN分类项目或yolov5分类代码即可快速复现叶片病害识别链路;json文件便于核对标签与图片对应情况,运行show脚本还能直观查看各类别图片分布、检查数据质量。对于需要做数据增强、迁移学习或对比不同分类网络的读者,这份样本集也可作为稳定的基础数据;目前页面显示已有154人学习使用,适合从入门到进阶的图像分类实践场景。

1. 大白菜叶片病害图像识别数据集:2800张标注图像到底能不能用

做农作物病害图像识别的人,迟早都会遇到一个很现实的问题:手里能拿到的开源数据集,要么是实验室环境下的单片叶子特写,要么是Imagenet里那种“一棵白菜全身像”,真正能直接丢给模型做训练、还带着完整标注框的农业场景数据,少得可怜。大白菜叶片病害图像识别数据集就是冲着这个缺口来的——约2800张已标注图像,覆盖大白菜叶部常见病害,标注形式是按目标检测或实例分割的框/掩膜去做,不是简单打一个“有病/没病”的图级别标签。它的价值在于:你把这套数据拿去做YOLO、Faster R-CNN或者SSD的训练,可以跳过自己下载原图、清洗、标注、格式转换这一整条又脏又累的流水线,直接进入模型迭代环节。本文会从数据里有什么、标注到底怎么组织的讲起,再给出用YOLOv8在这个数据集上训练的完整路径和参数建议,最后把最容易让人翻车的几个坑摊开来讲。

适合谁读?准备做农业视觉落地项目的算法工程师、做毕业设计的学生,以及想验证“小样本+增强能不能撑起一个可靠检测模型”的研究者。如果你手里正好有一批大田或大棚里的白菜叶片图,想快速搭一个病害检测原型,这套已标注数据是性价比很高的起点。

2. 病害类别体系与标注质量:先搞清楚数据里有什么,才不会白训

2.1 大白菜常见叶部病害与数据集的类别映射

大白菜叶部病害是一个很凌乱的视觉问题。田间常见的包括霜霉病、软腐病、黑斑病、白斑病、病毒病、炭疽病,另外还有一类特别容易被误标成病害的——虫害啃食后的坏死斑,它本质不是病,但视觉上和黑斑病极度相似。拿到数据集的第一步不是急着写训练脚本,而是把类别清单列出来,对照真实农业植保知识做一次核对。因为不同的“病”在叶片上的表现形态差异非常大:霜霉病在叶正面呈现褪绿斑块,叶背有白色霉层;软腐病往往从叶缘或伤口开始水渍状腐烂,边界模糊;黑斑病有同心轮纹,边界相对清楚。这些形态差异会直接影响目标检测任务的难度——边界模糊的病斑,天然比边界清晰的病斑难收敛。

常见做法是把类别数控制在5到8个以内。如果这套数据集把“健康叶”也单独列成一类,建议保留,因为实际落地的检测器必须能区分“无病”和“有病”,哪怕只是在推理端把健康叶的置信度阈值调高一些,也比模型强行把所有叶片都框出来要好。如果你拿到的数据只有病斑正样本,没有健康叶负样本,训练出的模型很容易在真实场景里变成“宁可错杀一千”的扫描器,这是农业视觉落地最常见的血泪教训之一。

2.2 标注格式:VOC、COCO还是YOLO txt,直接影响后续流程

这套数据集标注格式决定了你第一天的工作量。常见三种情况:

格式组织方式读取方式后续适配
VOC XML每个图像对应一个XML文件,框坐标为xmin/ymin/xmax/ymaxxml.etree.ElementTree解析需要自己转YOLO格式,或用labelImg直接打开
COCO JSON单/多个JSON文件,含images、annotations、categories三段结构pycocotools读取训练检测器较方便,但转换也容易漏掉segmentation字段
YOLO txt每张图一个txt,每行“class x_center y_center width height”直接读取YOLO系训练可直接引用,但对多边形分割不友好

如果你拿到的是VOC或COCO,而你又打算用YOLO系模型,第一步就是写转换脚本。很多人在这一步翻车,原因只有一个:坐标系的归一化方式搞错了。VOC里是绝对像素坐标,YOLO里是相对图像宽高的归一化坐标,而且YOLO的框中心点坐标是相对于左上角的。转换脚本的核心就三行:

import xml.etree.ElementTree as ET tree = ET.parse('Annotations/xxx.xml') root = tree.getroot() img_w = int(root.find('size/width').text) img_h = int(root.find('size/height').text) for obj in root.iter('object'): cls = obj.find('name').text box = obj.find('bndbox') x1, y1, x2, y2 = [float(box.find(t).text) for t in ('xmin', 'ymin', 'xmax', 'ymax')] x_center, y_center = (x1 + x2) / 2 / img_w, (y1 + y2) / 2 / img_h w, h = (x2 - x1) / img_w, (y2 - y1) / img_h print(cls, x_center, y_center, w, h)

这段代码的逻辑是:先从XML里拿到图像宽高,然后对每个标注对象,用框的绝对坐标换算成归一化中心点和宽高。注意x_center的计算是(x1 + x2) / 2 / img_w,而不是(x2 - x1) / 2 / img_w,后者算出来的是半宽,不是中心点。这个错误极隐蔽,但一旦写错,训练出的模型所有预测框都会偏移。

转换完成后,用下面这段代码随机抽几张图,把坐标还原画回图上核验,这一步别省:

import cv2 img = cv2.imread('JPEGImages/xxx.jpg') h, w = img.shape[:2] with open('labels/xxx.txt') as f: for line in f.readlines(): cls, xc, yc, bw, bh = map(float, line.split()) x1 = int((xc - bw / 2) * w) y1 = int((yc - bh / 2) * h) x2 = int((xc + bw / 2) * w) y2 = int((yc + bh / 2) * h) cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2) cv2.imwrite('check.jpg', img)

这步的意义是建立“标注文件 → 像素坐标 → 视觉可读”的闭环。通常我会抽30到50张图做人工目检,重点看大白菜这种叶片边缘卷曲、层叠的物体,标框是不是经常把叶缘切掉或框进别的叶片。这类错误在自动转换时完全发现不了。

2.3 图像尺寸、拍摄环境与数据分布:读图脚本与统计方法

标注质量之外,图像本身的分辨率分布、光照条件、拍摄角度,决定了你后面要不要加额外的预处理。大白菜叶片病害数据集里,图像来源可能是无人机俯拍、手机近距拍摄、或者大棚监控截图,三种来源的成像尺度差异非常大。俯拍图里,一片叶子的病害区域可能只有几十个像素;手机近距拍摄的图里,病斑占满整个画面。这会让模型在推理时对“尺度”极其敏感。

写一个快速统计脚本,跑一遍全量图像,拿到宽高分布、平均尺寸、以及标注框相对图像面积的占比分布:

import os import cv2 import numpy as np img_dir = 'images/' areas = [] sizes = [] for fname in os.listdir(img_dir): img = cv2.imread(os.path.join(img_dir, fname)) h, w = img.shape[:2] sizes.append((w, h)) areas.append(w * h) sizes = np.array(sizes) areas = np.array(areas) print('图像数量:', len(sizes)) print('宽度范围:', sizes[:, 0].min(), '-', sizes[:, 0].max()) print('高度范围:', sizes[:, 1].min(), '-', sizes[:, 1].max()) print('面积中位数:', np.median(areas))

跑完之后你会得到一张分布表。如果发现图像宽高比剧烈变化,比如同时存在 4:3 的近距图和 16:9 的监控截图,建议统一做 letterbox 处理再进网络,而不是直接 resize 成方形——直接拉伸会改变病斑的形态比例,对霜霉病这种靠纹理特征区分的病害伤害很大。图像尺寸小于 640×640 的样本要格外留意,YOLOv8 默认输入是 640,小图会被强行放大,本来就不明显的病斑纹理会被插值糊掉。

3. 用YOLOv8在大白菜叶片病害数据集上训练检测模型:从目录结构到第一个模型

3.1 数据目录组织与训练/验证/测试集划分

YOLOv8 是目前做这种中小规模目标检测最顺手的框架,训练命令简洁、显存要求不高、导出部署方便。2800张图像的数据量,用 YOLOv8s 或 YOLOv8m 在单张 RTX 3060 上就能跑起来,不需要上多卡。

先把目录组织好,YOLOv8 的 data.yaml 对目录结构有硬性要求,稳妥的格式是:

dataset/ ├── images/ │ ├── train/ (约1960张) │ ├── val/ (约560张) │ └── test/ (约280张) └── labels/ ├── train/ ├── val/ └── test/

划分时用随机种子固定结果,别用 Python 的 random.shuffle 裸跑,后面复现实验时会发现每次划分都不同,所有对比实验都失去意义。更关键的是按图划分,而不是按标注框划分——一张图里可能同时有霜霉病和黑斑病,如果把同一张图的不同框分进 train 和 val,就是典型的数据泄漏,val 指标会虚假偏高。

import os import random import shutil random.seed(42) img_files = os.listdir('images/') random.shuffle(img_files) n = len(img_files) train_cut = int(n * 0.7) val_cut = int(n * 0.9) splits = { 'train': img_files[:train_cut], 'val': img_files[train_cut:val_cut], 'test': img_files[val_cut:] } for split, files in splits.items(): os.makedirs(f'images/{split}', exist_ok=True) os.makedirs(f'labels/{split}', exist_ok=True) for f in files: shutil.copy(f'images/{f}', f'images/{split}/{f}') label = f.replace('.jpg', '.txt').replace('.png', '.txt') if os.path.exists(f'labels/{label}'): shutil.copy(f'labels/{label}', f'labels/{split}/{label}')

注意这里的假设:图像扩展名是 jpg 或 png,标注文件名与图像名完全对应。拿到数据集后建议先确认这两点,有些数据的标注文件命名是带后缀的,比如img_001.jpg对应img_001_bbox.txt,不统一的话上面脚本会漏掉一大部分标注。

3.2 用YOLOv8训练:训练命令与关键超参数

目录结构就绪后,data.yaml 是第一个要手写的文件。类别数量必须和标注文件里的 class id 最大数对齐,不要出现标注里有 id=7 但 categories 只写了 7 类,这种错位训练时不会报错,但验证集 mAP 会一直异常低。

# data.yaml train: dataset/images/train val: dataset/images/val nc: 6 names: ['霜霉病', '软腐病', '黑斑病', '白斑病', '炭疽病', '虫咬斑']

训练命令:

yolo detect train \ model=yolov8s.pt \ data=data.yaml \ epochs=100 \ imgsz=640 \ batch=16 \ lr0=0.01 \ lrf=0.01 \ momentum=0.937 \ weight_decay=0.0005 \ project=run_rgb \ name=exp1

参数说明:lr0是初始学习率,0.01 对从头训练比较激进,但如果是基于 COCO 预训练权重微调,0.01 是常见起点,一般会在前几个 epoch 看到 loss 从 1.x 快速掉到 0.5 以下。lrf是最终学习率相对初始学习率的比例,0.01 表示余弦退火后最后学习率是初始的百分之一。imgsz=640对这套数据够用,除非你确认大量病斑目标小于 16×16 像素,才需要考虑用 960 或 1280,代价是显存占用几乎翻倍。weight_decay别调到 0.001 以上,农业图像背景杂乱,正则过强会压制模型对病斑纹理的拟合。

训练过程要盯三个指标:box_loss、cls_loss、以及验证集上的mAP50。2800张数据里,如果 mAP50 在 40 个 epoch 后还没到 0.6,先不要盲目加 epoch,回到第2章检查标注质量和类别分布。

3.3 类别不平衡与复杂背景干扰:数据增强参数怎么设

大白菜叶片病害天然有不平衡问题。霜霉病在潮湿季节高发,样本可能占总量40%;白斑病相对少见,可能只有5%。类别不平衡在目标检测里的影响是:多数类把训练主导了,少数类的 recall 会特别低。解决方式优先级依次是:换评估指标看每个类别的 per-class AP,别只看整体 mAP;给少数类复制几张做基础增强;调整 loss 里的 cls 权重。

YOLOv8 在训练时默认开启 Mosaic 增强,但 Mosaic 对某些病害识别反而有反效果。霜霉病的特征是叶背霉层,Mosaic 把四张图拼在一起,跨图边界的叶片纹理被切断,模型学到的是“拼贴感”而不是病斑本身。如果你发现训练集的 loss 掉得很快、验证集 mAP 却停滞不前,第一件事就是把 Mosaic 概率从默认 1.0 降到 0.5,甚至关掉再对比一轮。

更好的做法是在训练脚本里显式控制增强组合。常见支持的做法是用 ultralytics 的配置参数调整 hsv 扰动和几何增强的幅度:

from ultralytics import YOLO model = YOLO('yolov8s.pt') model.train( data='data.yaml', epochs=100, imgsz=640, batch=16, hsv_h=0.015, # 色调扰动幅度,别超过0.02,大白菜叶色偏绿,过度扰动会改变病斑颜色 hsv_s=0.5, # 饱和度扰动 hsv_v=0.3, # 明度扰动 degrees=10.0, # 旋转角度正负10度 translate=0.1, # 平移比例 scale=0.5, # 缩放范围0.5-1.5 mosaic=0.5, # Mosaic开启概率减半 fliplr=0.5 # 水平翻转概率 )

参数设定的逻辑:hsv_h=0.015看似很小,但大白菜从外叶到内叶的颜色差异本身就大,色调扰动太大会让“黄化叶片”和“病斑褪绿”无法区分。degrees=10.0是因为田间拍摄时叶片角度随机,但旋转超过15度后叶片形态严重变形,模型会把“叶形”当成判别特征。scale=0.5意味着模型每轮会随机看到原图 0.5 到 1.5 倍大小的目标,这比直接改输入分辨率更有效地提升尺度鲁棒性。

4. 把2800张数据榨出接近上万张的效果:数据增强与样本清理

4.1 基础增强组合:翻转到色彩扰动

数据增强的本质是在不改变语义标签的前提下扩展样本分布。对农作物叶片病害来说,最重要的增强维度是颜色,不是几何。原因很简单:同一片病叶,在不同光照下拍出来的颜色,差距比不同病害类别之间的颜色差距还大。CAB(白斑病)的灰白色坏死斑,在阴影下拍可能偏暗绿,这时候模型很容易把它错认成霜霉病的褪绿斑。

颜色类增强要小心“增强过头导致标签失真”的坑。对比实验里,把饱和度扰动开到 0.8 以上时,霜霉病叶背的白色霉层会变蓝紫色,模型学到的颜色特征完全偏离真实分布。落地项目里我一般把饱和度扰动控制在 0.3 到 0.5 之间,明度扰动控制在 0.3 左右。几何层面,水平翻转是安全的,垂直翻转要谨慎——大田拍摄的叶片不一定是正立的,病斑形态没有方向性,垂直翻转理论无害,但如果数据里混入了少量带果柄或叶柄的样本,翻转后模型可能学到错误的结构特征。

4.2 Mosaic、Copy-Paste与AutoAugment:要不要用

Mosaic 增强的原理是把四张图拼成一张,相当于变相增大 batch size、增强对小目标的覆盖。但它有一个反模式:当你的数据集目标很大(病斑占图面积比高)且每张图里病灶密集时,Mosaic 拼接会造成大量目标被截断。YOLOv8 训练时如果出现found truncated boxes警告,你要意识到这些截断框不是标注错了,是 Mosaic 拼接导致目标跨出图边界,模型被迫学习不完整的形态。所以很多人看到 Mosaic 让 mAP 反而下降,就开始怀疑标注,其实方向找错了——先把 Mosaic 关掉对比一轮。

如果 Mosaic 确实不适合你的数据,替代方案是 Copy-Paste 增强:把一张图中的病斑区域裁下来,粘贴到另一张健康叶片区域上。这对大白菜叶片病害极其有效,因为田间最大的问题不是“病斑长什么样”,而是“病斑在复杂背景下能不能被识别出来”。Copy-Paste 相当于人为制造大量“健康叶片+病斑”的组合,逼模型把注意力放在病斑本身,而不是整张图的色调。

import cv2 import numpy as np def copy_paste_batch(bg_img, fg_img, fg_mask, max_paste=3): out = bg_img.copy() h, w = bg_img.shape[:2] for _ in range(max_paste): fg_h, fg_w = fg_img.shape[:2] scale = np.random.uniform(0.6, 1.2) new_w, new_h = int(fg_w * scale), int(fg_h * scale) fg_resized = cv2.resize(fg_img, (new_w, new_h)) mask_resized = cv2.resize(fg_mask, (new_w, new_h)) y_start = np.random.randint(0, max(1, h - new_h)) x_start = np.random.randint(0, max(1, w - new_w)) roi = out[y_start:y_start + new_h, x_start:x_start + new_w] mask_inv = cv2.bitwise_not(mask_resized) bg_roi = cv2.bitwise_and(roi, roi, mask=mask_inv) fg_roi = cv2.bitwise_and(fg_resized, fg_resized, mask=mask_resized) out[y_start:y_start + new_h, x_start:x_start + new_w] = cv2.add(bg_roi, fg_roi) return out

这段代码把病斑区域(fg_mask 标出的部分)随机缩放后贴到背景图(健康叶片)上,max_paste控制一张图上最多贴几个病斑。粘贴时要注意:病斑的缩放系数不要超过 1.2 倍,否则粘贴区域会超出原始病斑,叶片纹理被破坏,形成视觉上不自然的色块。

4.3 半自动标注回验:不干净的数据集是模型的天花板

2800张标注数据看着不多,但标注的质量往往不被重视。常见问题是:标注框没有紧贴病斑边界、小病斑被漏标、病斑重叠区域只标了一个框、以及把叶柄基部的坏死误标成病害。这些标注噪声在训练初期影响不明显——YOLOv8 前几十个 epoch 会先把大目标的粗粒度特征学会,到后期 loss 降低,越敏感的模型对标注误差越敏感,你会发现 mAP 卡在 0.7 上不去,怎么看都是模型欠拟合,但实际是标注本身不对。

一个可行的清理方法是:用当前模型对训练集做一轮推理,把每个预测框和 GT 的 IoU 小于 0.3 的样本提出来,人工快速过一遍。这些样本大概率是漏标或者错标,而不是模型不行。这个技巧在学术圈叫“learning from noisy labels”,在工程上就是“标注清洗”。挑完之后,标注不齐的框补一补,误标的框删一删,再训练一轮,mAP 通常会有至少 3 到 5 个百分点的反弹。

5. 大白菜叶片病害数据集训练避坑:五个最容易翻车的环节

5.1 现象:Loss正常下降但mAP始终偏低

训练时 box_loss 和 cls_loss 都稳步下降,说明模型在拟合训练集,但 val 集上 mAP50 卡在 0.4 上不去。先查两件事:一是验证集里是否存在大量“迁移距离”过大的图像,比如训练集全是手机近距拍摄,验证集混入了俯拍图,模型没见过俯拍角度,泛化无从谈起;二是看每个类别的 AP 分布,用 results.csv 画 per-class 曲线,几乎一定是某几个少数类把整体拉下来的。解决方式不是加轮次,而是回到类别层面做均衡:对少数类用 4.2 节的 Copy-Paste 增强,或直接复制少数类样本 2 到 3 倍放进训练集,优先于一切调参。

5.2 现象:验证集指标很好,田间实拍效果明显变差

这是农业视觉里最经典的场景迁移问题。数据集的图像是在某一特定光照时间、特定拍摄设备下采集的;你去田间用手机拍,光照角度变了、背景多了泥土和杂草、叶片上还有露水反光。模型在验证集上 mAP 0.75,到了现场可能只有 0.3。

缓解手段在数据层面很难解决,因为模型见过多少种域,就能在多少种域下工作。实操上我会在训练时把 MixUp 增强打开(YOLOv8 默认带),并把 mosaic 概率调高一点用于域混淆。另外,对部署端做“输入标准化”:训练时记下图像的均值和标准差,推理时做同样的归一化,不要训练和推理用两套预处理逻辑。

5.3 现象:小病斑目标漏检严重

大白菜叶片上的霜霉病早期症状是 10×10 像素左右的小褪绿点,YOLOv8s 在 640 分辨率下,小目标的特征图只有 80×80,意味着小于 8×8 像素的目标几乎不可见。解决办法按优先级排序:一是把输入尺寸提高到 960,这一步对小目标的收益最大;二是换 YOLOv8m 或 l,模型通道更宽,对小目标的语义特征更敏感;三是检查数据增强里是否开启了大规模随机缩放,scale=0.5 会导致一部分训练小目标被缩得更小。

5.4 现象:验证集划分后类别分布失衡

如果你用固定随机种子划分数据,但没考虑类别维度,那么运气差的时候,某类病斑的样本全部集中在验证集里,训练集一类的 sample 数接近 0,模型完全没见过这个类,验证指标自然崩掉。正确做法是按类别做分层划分:统计每张图的标注类别集合,确保每个类别在训练集和验证集的比例大致等于整体比例。代码上其实不复杂:

from collections import Counter import numpy as np cls_per_image = {} for f in os.listdir('labels/'): with open(f'labels/{f}') as fh: cls_ids = set() for line in fh: cls_ids.add(int(line.split()[0])) cls_per_image[f.replace('.txt', '.jpg')] = cls_ids # 按类别集合做stratified split keys = list(cls_per_image.keys()) random.seed(42) random.shuffle(keys) train_keys = [k for k in keys[:int(len(keys)*0.8)]] val_keys = [k for k in keys[int(len(keys)*0.8):]]

5.5 现象:标注框越过叶片边缘,Loss来回震荡

大白菜叶片边缘有波浪形皱褶,当标注框是矩形时很难完全贴合叶片轮廓。如果标注框把相邻叶片的区域也框进来了,模型实际上在学“一段叶缘+一片邻叶”的混合特征。病斑靠近叶缘时,框会同时包含叶片背景和背景泥土,训练时 loss 会反复震荡,尤其当这类样本占比高且同时出现在训练和验证集时。解决办法只有两个方向:一是对这类样本做框的收缩处理,把边缘坐标向内缩 3 到 5 个像素;二是换用分割模型(YOLOv8-seg),直接用多边形标注贴合叶片轮廓,代价是标注工作量和训练显存都会上一个台阶。

6. 部署与迭代技巧:用TensorRT把训练好的大白菜病害模型压到端侧

训练和验证通过后,真正的挑战是把模型放到实际使用环境里。大白菜病害识别的落地场景通常是:农民或植保人员用手机拍一张叶片,应用返回病害类型和置信度,或田间固定摄像头每隔几秒采集一张画面,后台自动告警。这两种场景都要求模型在 Jetson 或手机端实时跑。YOLOv8 训练得到的 .pt 文件不能直接用,必须先导出成推理框架支持的格式。

常见流程是把 PyTorch 模型导出为 ONNX,再在部署端转成 TensorRT 引擎。导出命令如下:

from ultralytics import YOLO model = YOLO('run_rgb/exp1/weights/best.pt') model.export(format='onnx', dynamic=False, imgsz=640, simplify=True, opset=12)

导出的 ONNX 文件可以直接用trtexec构建 TensorRT engine:

trtexec --onnx=best.onnx --saveEngine=best.trt --fp16 --workspace=2048

--fp16会让精度略降,但对农业视觉任务来说,mAP 损失一般不超过 2 个百分点,换来的是 Jetson Orin Nano 上推理速度从 45ms 降到 12ms 左右。如果目标是手机端,ONNX 还可以转成 NCNN 或 MNN,但针对大白菜这种色彩特征强的任务,fp16 的 TensorRT 表现足够稳定,没必要上 INT8 量化——INT8 对颜色的量化误差会在病斑边界上表现得特别明显,霜霉病霉层的淡白色区域最容易出现带状伪影。

部署后的验证我建议设计一个“田间模拟集”:统计你实际场景中的光照条件,在晴天上午、阴天、以及傍晚各拍 20 张真实叶片图,人工标注后单独作为测试集。这个测试集不参与训练,只用于推理验证。迭代的节奏是:遇到模型误检了某一类病斑,就把这个样本加入训练集,做一次增量训练。增量训练别直接拿 best.pt 当预训练权重继续跑——大白菜叶片数据集内部的一致性较强,用上次训练最后的权重接着训练 30 个 epoch,比重新从 COCO 预训练权重启动收敛快得多,效果也更稳。

我自己的习惯是给每轮实验建立一个带日期的目录,记录 data.yaml、增强参数、训练命令、以及最后跑出来每类的 AP 列表。这样三个星期后有人问你“这个模型是怎么训出来的”,你拿得出完整的参数和复现命令,而不是靠记忆。处理好上面这些细节,2800张已标注数据的价值才能最大化发挥出来。希望帮到你。

本文还有配套的精品资源,点击获取

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询