棉花作为全球重要的经济作物,其产量与品质直接影响纺织产业和农业经济。然而在实际种植过程中,棉花叶片常受到多种病害侵袭,如枯萎病(wilt)、叶斑病(leaf spot)、卷叶病(curl)等。传统的人工巡检方式存在效率低、主观性强等问题,而基于深度学习的计算机视觉技术为这一问题提供了创新解决方案。
本项目基于YOLOv11目标检测算法,开发了一套完整的棉花叶片病害智能检测系统。系统核心优势在于:
提示:在实际部署时,建议优先考虑边缘计算设备,如Jetson系列开发板,可以更好地适应田间环境的应用需求。
YOLOv11作为YOLO系列的最新演进版本,在以下方面进行了重点优化:
特征提取网络:
特征金字塔设计:
检测头改进:
python复制# 模型初始化示例代码
from ultralytics import YOLO
# 加载预训练模型
model = YOLO('yolov11s.pt') # s表示small版本
# 模型配置参数
model_params = {
'nc': 6, # 类别数
'depth_multiple': 0.33, # 模型深度系数
'width_multiple': 0.50 # 模型宽度系数
}
系统采用模块化设计,主要包含以下组件:
前端界面层:
业务逻辑层:
算法模型层:
数据存储层:
本项目使用的棉花叶片病害数据集包含6个类别,总计4173张高质量标注图像:
| 类别 | 英文名称 | 训练集 | 验证集 | 测试集 | 合计 |
|---|---|---|---|---|---|
| 枯叶病 | blight | 652 | 41 | 42 | 735 |
| 卷叶病 | curl | 598 | 38 | 38 | 674 |
| 灰霉病 | grey mildew | 612 | 39 | 39 | 690 |
| 健康叶片 | healthy | 623 | 39 | 39 | 701 |
| 叶斑病 | leaf spot | 607 | 38 | 38 | 683 |
| 萎蔫病 | wilt | 616 | 37 | 37 | 690 |
| 总计 | 3708 | 232 | 233 | 4173 |
为提高模型泛化能力,训练过程中采用了多种数据增强技术:
基础增强:
高级增强:
yaml复制# 数据增强配置示例
augmentation:
hsv_h: 0.015 # 色调增强幅度
hsv_s: 0.7 # 饱和度增强幅度
hsv_v: 0.4 # 明度增强幅度
degrees: 10 # 旋转角度范围
translate: 0.1 # 平移比例
scale: 0.5 # 缩放范围
shear: 0.0 # 剪切幅度
perspective: 0.0001 # 透视变换系数
flipud: 0.0 # 上下翻转概率
fliplr: 0.5 # 左右翻转概率
mosaic: 1.0 # Mosaic增强概率
mixup: 0.1 # MixUp增强概率
模型训练采用以下关键参数配置:
| 参数 | 值 | 说明 |
|---|---|---|
| 初始学习率 | 0.01 | 使用余弦退火策略调整 |
| 批量大小 | 8 | 根据GPU显存调整 |
| 训练轮次 | 100 | 包含预热阶段 |
| 优化器 | SGD | momentum=0.937 |
| 权重衰减 | 0.0005 | L2正则化系数 |
| 输入尺寸 | 640×640 | 保持长宽比缩放 |
python复制# 训练代码示例
results = model.train(
data='data.yaml',
epochs=100,
batch=8,
imgsz=640,
device='0', # 使用GPU 0
workers=4,
single_cls=False,
optimizer='SGD',
lr0=0.01,
warmup_epochs=3,
weight_decay=0.0005,
project='runs',
name='exp'
)
训练过程中主要监控以下指标:
损失函数变化:
评估指标:
注意事项:当验证集指标连续3个epoch没有提升时,建议提前终止训练(Early Stopping),避免过拟合。
在测试集上的性能表现:
| 模型版本 | 参数量(M) | mAP@0.5 | 推理速度(FPS) | 模型大小(MB) |
|---|---|---|---|---|
| YOLOv11n | 1.9 | 0.872 | 142 | 3.8 |
| YOLOv11s | 5.4 | 0.906 | 98 | 12.1 |
| YOLOv11m | 17.3 | 0.921 | 56 | 37.5 |
| YOLOv11b | 25.4 | 0.928 | 42 | 55.2 |
| YOLOv11l | 43.7 | 0.933 | 28 | 94.6 |
根据实际测试,最终选择YOLOv11s作为基础模型,在精度和速度间取得了较好平衡。
为保证UI响应流畅,检测任务在独立线程中执行:
python复制class DetectionThread(QThread):
frame_received = pyqtSignal(np.ndarray, np.ndarray, list)
def __init__(self, model, source, conf, iou):
super().__init__()
self.model = model
self.source = source
self.conf = conf
self.iou = iou
self.running = True
def run(self):
cap = cv2.VideoCapture(self.source) if isinstance(self.source, int) else None
try:
while self.running:
if cap: # 视频/摄像头模式
ret, frame = cap.read()
if not ret: break
else: # 图片模式
frame = cv2.imread(self.source)
# 执行检测
results = self.model(frame, conf=self.conf, iou=self.iou)
annotated = results[0].plot()
# 提取检测结果
detections = []
for box in results[0].boxes:
detections.append([
results[0].names[int(box.cls)],
float(box.conf),
*box.xywh[0].tolist()
])
# 发送结果
self.frame_received.emit(
cv2.cvtColor(frame, cv2.COLOR_BGR2RGB),
cv2.cvtColor(annotated, cv2.COLOR_BGR2RGB),
detections
)
finally:
if cap: cap.release()
系统UI采用PyQt5实现,主要特点包括:
主界面布局:
核心交互组件:
python复制# UI初始化示例
class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 主窗口设置
self.setWindowTitle("棉花叶片病害检测系统")
self.setGeometry(100, 100, 1200, 800)
# 中央部件
central_widget = QWidget()
self.setCentralWidget(central_widget)
# 主布局
main_layout = QHBoxLayout(central_widget)
# 图像显示区域
self.original_label = QLabel()
self.result_label = QLabel()
main_layout.addWidget(self.original_label)
main_layout.addWidget(self.result_label)
# 控制面板
control_panel = QVBoxLayout()
# 模式选择按钮
self.mode_group = QButtonGroup()
self.image_btn = QRadioButton("图片检测")
self.video_btn = QRadioButton("视频检测")
self.camera_btn = QRadioButton("摄像头检测")
# 参数调节
self.conf_slider = QSlider(Qt.Horizontal)
self.iou_slider = QSlider(Qt.Horizontal)
# 结果表格
self.result_table = QTableWidget()
self.result_table.setColumnCount(4)
self.result_table.setHorizontalHeaderLabels(["类别", "置信度", "X", "Y"])
main_layout.addLayout(control_panel)
为提升部署效率,可采用以下优化技术:
模型量化:
推理加速:
python复制# TensorRT转换示例
model.export(format='engine',
imgsz=640,
half=True, # FP16量化
device=0,
simplify=True)
田间部署方案:
使用技巧:
维护建议:
问题1:损失值震荡大
问题2:验证指标不提升
问题1:检测结果不稳定
问题2:小目标漏检
问题1:界面卡顿
问题2:摄像头无法打开
在实际部署过程中,我们发现田间环境的光照变化对检测效果影响较大。通过添加自适应直方图均衡化(CLAHE)预处理,可以使模型在不同光照条件下保持稳定性能。此外,建议定期用田间新采集的数据对模型进行微调,以适应不同生长阶段的叶片特征变化。