文末附下载链接

在这里插入图片描述

开发目的

棉花作为我国重要的经济作物和纺织工业原料,其采摘时机的把握直接关系到纤维品质、加工效率与农民收益。传统棉花成熟度判别主要依赖人工经验,通过肉眼观察棉铃开裂状态与绒絮色泽进行判断,这种方式不仅主观性强、效率低下,且在大规模棉田管理中难以实现精细化、实时化的成熟度评估,极易造成“过早采摘影响产量”或“过晚采摘导致纤维老化”的问题。随着智慧农业与精准种植理念的不断推进,亟需一种能够快速、无损、准确识别棉花成熟度的技术手段,以支撑机械化采收决策与田间管理优化。

YOLOv8作为当前目标检测领域的前沿模型,具备卓越的多尺度特征提取能力、高精度定位性能以及优异的推理速度,能够在复杂田间环境下的光照变化、叶片遮挡与棉花簇生等干扰因素中准确识别单株棉花的开放状态与成熟等级。基于YOLOv8的棉花成熟度检测系统,融合深度学习与农业视觉感知技术,实现了对棉田中不同成熟阶段棉花(如未开铃、初开铃、充分成熟、过熟)的实时分类与空间定位,突破了传统人工判别的时效性与一致性瓶颈。

该系统的应用不仅可为精准采收提供科学依据,降低机采棉的杂质率与纤维损伤,提升原棉品质等级,还可助力棉农优化采摘周期,提高作业效率,推动棉花产业向智能化、数字化方向转型升级,对提升我国棉花生产的核心竞争力与农业现代化水平具有重要意义。

YOLO介绍

YOLOv8是由Ultralytics于2023年推出的目标检测模型,作为YOLO系列的最新成员,它在继承YOLOv5高效结构的基础上,融合了YOLOv7中的一些先进设计理念,并在骨干网络、Neck结构和检测头方面进行了多项创新,进一步提升了检测精度与推理速度的平衡。

一、YOLOv8网络结构解析
  1. 骨干网络(Backbone)
    YOLOv8采用CSPDarknet53作为基础骨干网络,但对其进行了关键优化。最显著的改进是引入了跨阶段局部网络(CSP)结构的增强版本,通过更合理的梯度分流机制,减少重复梯度信息,提升训练效率。同时,YOLOv8在骨干网络中全面使用SiLU(Swish)激活函数替代传统的Mish或ReLU,增强了模型的非线性表达能力。此外,骨干网络取消了传统的自动下采样方式,转而采用空间金字塔池化模块(SPPF) 的轻量化版本,进一步提升特征提取能力。

  2. Neck结构
    YOLOv8的Neck部分延续了PANet(Path Aggregation Network) 的双向特征融合思想,但进行了结构简化与优化。其采用改进的FPN+PAN结构,通过更高效的特征金字塔连接方式,增强了低层细节信息与高层语义信息的融合能力。与YOLOv5相比,YOLOv8的Neck减少了冗余卷积层,引入了更多的跨层连接,提升了小目标检测性能。此外,Neck中广泛使用深度可分离卷积(Depthwise Separable Convolution) 以降低计算量,在保持精度的同时提升推理速度。

  3. 检测头(Head)
    YOLOv8采用解耦检测头(Decoupled Head),将分类与回归任务分离到两个独立的分支中,避免了任务冲突,提升了检测精度。这一设计借鉴了YOLOv7中的先进思想,但在实现上更加简洁高效。检测头中还引入了Anchor-Free机制的初步探索(在某些变体中),通过直接预测目标中心与宽高,简化了后处理流程。同时,YOLOv8使用Task-Aligned Assigner进行正负样本匹配,动态对齐分类与定位任务,显著提升了训练稳定性与检测质量。

二、YOLOv8相较于YOLOv5与YOLOv7的改进与创新
  1. 相比YOLOv5的改进
  • 结构更简洁高效:YOLOv8取消了YOLOv5中的Focus模块,改用标准卷积进行下采样,避免信息丢失,提升特征完整性。
  • 激活函数统一为SiLU:相比YOLOv5中混合使用SiLU和其它激活函数,YOLOv8统一使用SiLU,增强了模型一致性。
  • 检测头解耦化:YOLOv5使用耦合头,而YOLOv8采用解耦头,显著提升分类与定位精度。
  • 训练策略优化:YOLOv8引入更先进的数据增强策略(如Mosaic增强、MixUp)和更合理的学习率调度,提升模型泛化能力。
  1. 相比YOLOv7的创新
  • 结构更轻量,部署更友好:YOLOv8在保持YOLOv7高精度的同时,简化了复杂模块(如ELAN结构),提升推理速度,更适合边缘设备部署。
  • 模块设计更模块化:YOLOv8的结构设计更加清晰,便于扩展与定制,支持多种规模模型(如YOLOv8n、YOLOv8s、YOLOv8m、YOLOv8l、YOLOv8x)的快速迭代。
  • 训练效率更高:YOLOv8采用更高效的标签分配策略和损失函数组合(如CIoU Loss + Focal Loss),收敛更快,精度更高。
总结

YOLOv8在YOLOv5的工程化优势和YOLOv7的理论创新之间取得了良好平衡。它通过优化骨干网络、改进Neck结构、采用解耦检测头等手段,在精度、速度和部署灵活性方面实现了全面升级。作为当前YOLO系列的集大成者,YOLOv8不仅在COCO等基准数据集上表现优异,更因其简洁高效的架构成为工业界目标检测任务的首选模型之一。

系统设计

数据集

(1) 数据集基本情况

本项目使用的棉花成熟度检测数据集共包含13771张图像,已按照标准划分方式分为训练集、验证集和测试集。其中:

  • 训练集:12712张图像,包含原始图像及数据增强后的样本。数据增强策略包括左旋15度、右旋15度、随机饱和度调整,每张原始图像生成3张增强图像。
  • 验证集:529张图像,未进行数据增强,用于训练过程中模型性能的评估。
  • 测试集:530张图像,未进行数据增强,用于最终模型性能的独立评估。

数据集共包含四个类别:

  1. 有缺陷的(不采摘)
  2. 正在开花的(不采摘)
  3. 完全打开的(可以采摘)
  4. 部分打开的(不采摘)

所有图像均已使用LabelMe工具进行精确标注,并转换为YOLO格式的.txt标注文件。实测该数据集在YOLOv10n模型上的mAP@50达到94%,表明数据质量高、标注准确,适合用于训练高性能的目标检测模型。
在这里插入图片描述
在这里插入图片描述

(2) 数据集处理

在数据收集完成后,我们使用 LabelMe 工具对图像进行手动标注。LabelMe 是一款开源的图像标注工具,支持多边形、矩形、点等多种标注方式,适用于复杂场景下的目标标注任务。对于棉花成熟度检测任务,我们采用矩形框(bounding box)对每株棉花进行标注,并为其分配对应的类别标签。

标注完成后,LabelMe 生成的是 .json 格式的标注文件。为了适配 YOLO 系列模型的训练需求,我们需要将这些 .json 文件转换为 YOLO 目标检测所要求的标准格式。

YOLO目标检测数据集格式说明

YOLO 模型要求每个图像对应一个同名的 .txt 标注文件,文件内容为每一行表示一个目标,格式如下:

<class_id> <x_center> <y_center> <width> <height>

其中:

  • class_id:类别索引,从0开始;
  • x_center, y_center:边界框中心点坐标(相对于图像宽高的归一化值,范围0~1);
  • width, height:边界框的宽和高(同样为归一化值)。

所有标注文件需与图像文件一一对应,并存放在指定目录结构中(如 labels/train/, labels/val/ 等),同时提供一个 data.yaml 配置文件,定义类别名称、训练/验证集路径等信息,供 Ultralytics 框架读取使用。


模型训练

安装 Ultralytics

Ultralytics 是 YOLOv5/v8/v10 等系列模型的官方实现框架,支持快速训练、验证和部署。安装方式如下:

pip install ultralytics

安装完成后即可使用 YOLO 类进行模型训练。

训练代码编写

使用 Ultralytics 进行模型训练非常简洁,核心代码如下:

from ultralytics import YOLO

# 加载预训练模型
model = YOLO('yolov8n.pt')

# 开始训练
results = model.train(
    data='cotton_maturity.yaml',   # 数据配置文件
    epochs=100,                    # 训练轮数
    imgsz=640,                     # 输入图像尺寸
    batch=16,                      # 批次大小
    name='yolov8_cotton'           # 实验名称
)
训练参数设置(超参数详解)

Ultralytics 提供了丰富的可调超参数,以下为关键超参数及其含义与推荐取值:

超参数 含义 推荐取值 说明
epochs 训练总轮数 100 控制训练时间,避免过拟合或欠拟合
batch 每批次图像数量 16 / 32 根据GPU显存调整,越大越稳定但需更多内存
imgsz 输入图像尺寸 640 分辨率越高细节越丰富,但计算量增加
optimizer 优化器类型 ‘SGD’ / ‘Adam’ / ‘AdamW’ 默认SGD,Adam收敛快但泛化可能稍差
lr0 初始学习率 0.01 学习率太大易震荡,太小收敛慢
lrf 最终学习率(相对于初始) 0.01 通常设为0.01,表示最后降到1%
momentum 动量(SGD用) 0.937 提高优化稳定性
weight_decay 权重衰减 0.0005 L2正则化系数,防止过拟合
warmup_epochs 热身训练轮数 3.0 前几轮缓慢提升学习率,稳定训练
iou_loss IOU损失类型 ‘ciou’ ciou比giou、diou更能提升定位精度
anchor_free 是否使用无锚框机制 False YOLOv8默认仍使用锚框
label_smoothing 标签平滑系数 0.0 可设为0.1以增强模型鲁棒性

这些超参数可通过命令行或Python脚本灵活设置,Ultralytics 还支持自动超参数调优(tune模式),进一步提升模型性能。


训练后评估

模型训练完成后,必须对其进行科学评估,以判断其在实际应用中的有效性。常用的评价指标包括 Precision-Recall (PR) 曲线mAP(mean Average Precision)

1. PR曲线(Precision-Recall Curve)

PR曲线反映了模型在不同置信度阈值下的查准率(Precision)与查全率(Recall)之间的关系。

  • Precision(查准率):预测为正类中真实为正类的比例
    Precision=TPTP+FP Precision = \frac{TP}{TP + FP} Precision=TP+FPTP

  • Recall(查全率):真实正类中被正确预测的比例
    Recall=TPTP+FN Recall = \frac{TP}{TP + FN} Recall=TP+FNTP

其中:

  • TP(True Positive):正确预测为正类
  • FP(False Positive):错误预测为正类
  • FN(False Negative):漏检的正类

PR曲线越靠近右上角,说明模型性能越好。AP(Average Precision)即为PR曲线下面积,是衡量单个类别检测性能的重要指标。
在这里插入图片描述

2. mAP(mean Average Precision)

mAP 是多个类别 AP 的平均值,是目标检测中最核心的综合评价指标。

  • mAP@0.5:IoU阈值为0.5时的mAP
  • mAP@0.5:0.95:IoU从0.5到0.95每隔0.05取值的mAP平均值,更能反映模型鲁棒性

公式表达为:
mAP=1N∑i=1NAPi mAP = \frac{1}{N} \sum_{i=1}^{N} AP_i mAP=N1i=1NAPi
其中 NNN 为类别数,APiAP_iAPi 为第 iii 类的平均精度。

在本项目中,模型在测试集上达到了较高的 mAP 值,说明其对棉花成熟度的分类与定位均具有较高准确性。
在这里插入图片描述


模型推理

图片推理代码
from ultralytics import YOLO
from PIL import Image

# 加载训练好的模型
model = YOLO('runs/detect/yolov8_cotton/weights/best.pt')

# 加载图像
image = Image.open('test.jpg')

# 进行推理
results = model.predict(source=image, conf=0.25, iou=0.45, save=False)

# 获取结果图像(带标注框)
annotated_img = results[0].plot()

# 显示结果
Image.fromarray(annotated_img[..., ::-1])  # BGR to RGB
视频推理代码
import cv2
from ultralytics import YOLO

# 加载模型
model = YOLO('runs/detect/yolov8_cotton/weights/best.pt')

# 打开视频文件
cap = cv2.VideoCapture('test.mp4')

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    # 模型推理
    results = model.predict(source=frame, conf=0.25, iou=0.45)
    annotated_frame = results[0].plot()
    
    # 显示结果
    cv2.imshow('Cotton Maturity Detection', annotated_frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

上述代码可用于实时视频流或本地视频文件的检测任务。


系统UI设计

本系统采用 Streamlit 框架构建用户交互界面。Streamlit 是一个开源的Python库,专为快速构建机器学习和数据科学Web应用而设计,具有以下优点:

  • 开发简单:无需前端知识,纯Python代码即可构建完整UI
  • 响应迅速:自动热重载,修改代码立即生效
  • 组件丰富:提供按钮、滑块、上传、表格、图表等常用控件
  • 易于部署:支持一键部署到 Streamlit Community Cloud 或私有服务器
  • 兼容性强:可无缝集成PyTorch、OpenCV、Pandas等主流库

结合获取到的源码,我们分析其UI构建逻辑:

st.set_page_config(page_title="基于YOLO8的棉花成熟度检测系统", layout="centered")
st.markdown("<h1 style='text-align: center;'>基于YOLO8的棉花成熟度检测系统</h1>", unsafe_allow_html=True)

使用 st.set_page_config 设置页面标题和布局,通过HTML+CSS居中显示主标题。

侧边栏用于配置参数:

model_type = st.sidebar.selectbox("选取模型", MODEL_LIST)
confidence = st.sidebar.slider("调整置信度", 10, 100, 25) / 100
iou = st.sidebar.slider("调整iou", 10, 100, 45) / 100
source = st.sidebar.radio('检测类型', ['图片检测', '视频检测', '本地摄像头检测'])

用户可选择模型类型、调节置信度和IoU阈值,并选择检测输入源。

主区域根据选择类型动态展示上传控件和检测结果:

  • 图片检测:上传图片 → 显示原图与检测结果 → 输出检测表格(含类别、置信度、坐标)
  • 视频检测:上传视频 → 实时播放检测结果帧
  • 摄像头检测:点击启动 → 调用本地摄像头实时检测

所有推理功能通过 utils.py 中封装的 infer_imageinfer_video_frame 函数完成,实现了前后端逻辑分离。

在这里插入图片描述
在这里插入图片描述


系统功能

根据提供的源码分析,该基于YOLO8的棉花成熟度检测系统具备以下主要功能:

  1. 多模型选择:支持加载不同版本的YOLO模型(如YOLOv8n、YOLOv8s等),便于性能与速度权衡。
  2. 三种检测模式
    • 图片检测:支持上传 .jpg/.jpeg/.png 图像进行单张推理
    • 视频检测:支持上传 .mp4 视频文件进行逐帧检测
    • 本地摄像头检测:调用设备摄像头实现现场实时检测
  3. 可调节置信度与IoU阈值:通过滑块动态调整 confiou 参数,控制检测灵敏度与去重强度。
  4. 可视化检测结果:在图像/视频上绘制边界框、类别标签和置信度,直观展示检测效果。
  5. 结构化结果输出
    • 表格显示每帧中检测到的目标:序号、类别、置信度、边界框坐标
    • 统计各类别总数,辅助决策是否采摘
  6. 高效推理引擎:基于Ultralytics框架实现快速推理,支持GPU加速。
  7. 用户友好界面:使用Streamlit构建简洁美观的Web界面,无需编程基础即可操作。
  8. 轻量级部署能力:整个系统仅需Python环境即可运行,适合农业边缘设备部署。

该系统可广泛应用于智慧农业场景,帮助农户精准识别可采摘棉花,提升采摘效率与资源利用率。

总结

本文围绕基于YOLOv8的棉花成熟度检测系统,系统性地阐述了项目的开发背景、核心技术选型与整体架构设计。针对传统棉花采摘依赖人工判别的局限性,本系统提出了一种融合深度学习与农业视觉感知的智能化解决方案。通过引入YOLOv8这一先进的目标检测模型,充分发挥其在多尺度特征提取、高精度定位与快速推理方面的优势,有效应对田间复杂环境下光照变化、叶片遮挡与棉花簇生等挑战,实现了对棉花不同成熟阶段(有缺陷、正在开花、部分打开、完全打开)的精准识别与空间定位。

在系统实现层面,构建了高质量、标注规范的数据集,并采用Ultralytics框架完成模型训练与评估,确保了模型在实际场景中的高准确率与鲁棒性。同时,借助Streamlit搭建了直观友好的交互式Web界面,支持图片、视频及本地摄像头三种检测模式,具备可调节置信度与IoU参数、结构化结果输出等功能,极大提升了系统的实用性与可操作性。整个系统不仅实现了从数据处理、模型训练到推理部署的全流程闭环,也展现了良好的轻量化与可扩展特性,具备在边缘设备部署的潜力。

综上所述,该系统成功将前沿计算机视觉技术应用于农业生产实践,为棉花采摘提供了科学、高效、可落地的智能决策支持,显著提升了农业生产的自动化与智能化水平。未来可进一步拓展至多作物、多场景的成熟度识别任务,推动智慧农业向更深层次发展。

在这里插入图片描述

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐