1. 项目背景与核心价值
茶树病害检测是现代农业智能化转型中的关键技术痛点。传统人工巡检方式存在效率低、漏检率高、主观性强等问题,尤其在大型茶园中,病害早期发现难度极大。我们团队构建的这个YOLO格式数据集,正是为了解决这一行业难题。
数据集包含12种常见茶树病害的高质量标注样本,覆盖叶部病害(如茶饼病、炭疽病)和枝干病害(如膏药病)等主要类型。所有图像均在真实茶园环境中采集,经过专业农艺师复核标注,确保标注准确性。
关键优势:数据集针对YOLO系列算法优化,采用标准txt标注格式,可直接用于YOLOv3/v5/v7/v8等版本的训练,省去格式转换步骤。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 数据集技术细节解析
2.1 数据采集与标注规范
数据采集采用多季节、多时段采样策略:
- 设备:Sony α7R IV(6100万像素) + 大疆Mavic 3多光谱版
- 光照条件:覆盖清晨露水、正午强光、阴雨天气等典型场景
- 病害阶段:包含初期病斑(<5mm)到晚期症状的完整发展过程
标注规范严格遵循YOLO标准:
code复制class_id center_x center_y width height
所有边界框由3名标注员交叉验证,Krippendorff's α系数>0.85
2.2 数据集统计特征
| 病害类型 | 训练集样本 | 验证集样本 | 测试集样本 | 平均目标尺寸(pixels) |
|---|---|---|---|---|
| 茶饼病 | 1,245 | 156 | 312 | 32×28 |
| 炭疽病 | 987 | 123 | 247 | 45×39 |
| 赤叶斑病 | 1,076 | 135 | 269 | 28×31 |
| 膏药病 | 854 | 107 | 214 | 63×57 |
特殊处理:
- 小目标增强:对<32px的病斑进行2×超分辨率重建
- 遮挡样本:包含15%的自然遮挡场景(叶片重叠、水滴遮挡)
3. YOLO模型训练实战
3.1 环境配置建议
推荐使用Docker快速搭建环境:
bash复制docker pull ultralytics/yolov5:v7.0
nvidia-docker run -it --shm-size 16G -v /path/to/dataset:/datasets yolov5:v7.0
关键参数配置(yolov5s.yaml):
yaml复制train: /datasets/train/images
val: /datasets/valid/images
nc: 12 # 病害类别数
names: ['tea_white_spot', 'anthracnose', ...]
3.2 训练技巧与调优
小目标检测优化方案:
- 修改anchor boxes:使用k-means++重新聚类(适合病斑尺寸)
python复制# utils/autoanchor.py
anchors, _ = kmean_anchors(dataset, n=9, img_size=640, thr=4.0)
- 添加SPPF层提升感受野:
python复制# models/common.py
class SPPF(nn.Module):
def __init__(self, c1, c2, k=5):
super().__init__()
self.cv1 = Conv(c1, c2, 1, 1)
self.cv2 = Conv(c2 * 4, c2, 1, 1)
self.m = nn.MaxPool2d(kernel_size=k, stride=1, padding=k // 2)
- 损失函数改进:
python复制# utils/loss.py
class FocalLoss(nn.Module):
def __init__(self, alpha=0.8, gamma=2.0):
super(FocalLoss, self).__init__()
self.alpha = alpha
self.gamma = gamma
4. 部署应用方案
4.1 边缘设备部署对比
| 设备 | 推理速度(FPS) | 模型大小 | 功耗(W) | 适用场景 |
|---|---|---|---|---|
| Jetson Nano | 8.2 | 14.4MB | 10 | 固定式巡检终端 |
| RK3566 | 15.7 | 9.8MB | 6 | 手持式检测仪 |
| K230 | 22.3 | 7.2MB | 4.5 | 无人机实时检测 |
4.2 多路视频处理方案
使用RTSP协议实现茶园多摄像头接入:
python复制import cv2
def multi_cam_process(rtsp_urls):
caps = [cv2.VideoCapture(url) for url in rtsp_urls]
while True:
frames = []
for i, cap in enumerate(caps):
ret, frame = cap.read()
if ret:
frames.append((i, preprocess(frame)))
results = model(frames) # 批量推理
for cam_id, dets in results:
visualize(cam_id, dets)
5. 常见问题解决方案
5.1 标注偏移问题排查
现象:检测框与病斑出现5px以上偏移
解决方法:
- 检查原始标注是否包含
letterbox填充
python复制# utils/datasets.py
if auto: # 确保训练/推理时letterbox参数一致
scale = min(img_size[0] / shape[0], img_size[1] / shape[1])
- 验证图像EXIF方向标签
bash复制exiftool -Orientation -n image.jpg
5.2 小目标漏检优化
实测有效的改进策略:
- 特征金字塔增强:
yaml复制# models/yolov5s.yaml
head:
[[-1, 1, Conv, [256, 1, 1]],
[-1, 1, nn.Upsample, [None, 2, 'nearest']],
[[-1, 6], 1, Concat, [1]], # 增加P2输出
[-1, 3, C3, [256, False]]]
- 数据增强参数调整:
python复制# train.py
hyp.update({
'fliplr': 0.3,
'mosaic': 1.0,
'mixup': 0.05, # 小目标场景建议降低mixup比例
'copy_paste': 0.2
})
6. 模型性能提升记录
在测试集上的优化效果对比:
| 改进措施 | mAP@0.5 | 推理时延(ms) | 显存占用(MB) |
|---|---|---|---|
| 基线模型(YOLOv5s) | 0.743 | 12.4 | 1,024 |
| + 改进anchor | 0.768 | 12.1 | 1,024 |
| + SPPF模块 | 0.781 | 13.7 | 1,088 |
| + 小目标增强策略 | 0.813 | 15.2 | 1,152 |
| + Focal Loss | 0.827 | 15.5 | 1,152 |
实际部署中发现,在RK3566设备上采用INT8量化后,模型大小可压缩至3.4MB,保持mAP@0.5在0.81以上,满足大部分茶园实时检测需求。建议在模型导出时添加动态轴设置:
python复制model.export(format='onnx', dynamic_axes={'images': {0: 'batch'}, 'output': {0: 'batch'}})
