💡本文主要内容: 详细介绍了基于YOLOv11的玉米雄穗识别系统,包括算法原理、Pytorch源码、训练数据集、Flask可视化Web界面。系统支持图片、视频、摄像头实时检测,支持置信度、IoU阈值调节,检测结果可视化等功能。

01 数据集介绍

图片

数据集

本项目采集了大量田间玉米雄穗图片,并进行了精细标注。数据集包含单一类别"tas"(玉米雄穗),共采集图片若干张,采用8:1:1比例划分为训练集、验证集、测试集。

数据集划分脚本

使用如下脚本自动划分训练、验证、测试集:

import os
import random
image_dir = 'train/images'
label_dir = 'train/labels'
images = [f for f in os.listdir(image_dir) if f.endswith('.jpg')]
random.shuffle(images)
n = len(images)
train_split = int(n * 0.8)
val_split = int(n * 0.9)
train = images[:train_split]
val = images[train_split:val_split]
test = images[val_split:]
with open('train.txt', 'w') as f:
    for img in train:
        f.write(f'{image_dir}/{img}\n')
with open('val.txt', 'w') as f:
    for img in val:
        f.write(f'{image_dir}/{img}\n')
with open('test.txt', 'w') as f:
    for img in test:
        f.write(f'{image_dir}/{img}\n')

02 基于YOLOv11的玉米雄穗检测

corn_tassel_data.yaml内容如下:

# 玉米雄穗识别数据集配置
path: .  # 相对路径
train: train/images  # 训练图像
val: train/images  # 验证图像 (实际训练时会自动分割)
# 类别
nc: 1  # 类别数量
names: ['tas']  # 类别名称

使用Ultralytics YOLOv11进行训练,核心代码如下:

from ultralytics import YOLO
if __name__ == '__main__':
    model = YOLO('yolo11n.pt')  # 加载预训练模型
    model.train(
        data='corn_tassel_data.yaml',
        epochs=100,
        imgsz=640,
        batch=16,
        device='0',
        optimizer='SGD',
        project='corn_tassel_results',
        name='exp',
    )

图片

    在IoU=0.5时的平均精度,达到82.19%,说明模型对玉米雄穗的检测能力很强,绝大多数目标都能被正确检测出来。

03 训练结果分析

3.1 混淆矩阵

本图展示了模型在"tas"(雄穗)和"background"(背景)两类上的预测分布。可以看到,真实为"tas"的样本有83%被正确预测为"tas",但有17%被误判为"background",说明模型对雄穗的识别还有一定漏检。真实为"background"的样本全部被正确识别,没有被误判为"tas",说明模型对背景的区分能力非常强。

图片

3.2 F1分数与置信度曲线

曲线显示F1分数随置信度阈值的变化趋势。在置信度为0.37左右时,F1分数达到最高点0.78,说明此时模型在精度和召回率之间取得了最佳平衡。置信度过低时,F1分数较低,说明误报较多;置信度过高时,F1分数也下降,说明漏检增多。反映了当前模型在不同置信度下的最优表现区间。

图片

3.3 精度-置信度曲线

曲线反映了随着置信度阈值的提高,模型预测为"tas"时的准确率变化。当置信度阈值较低时,精度较低,说明有较多误报。随着置信度提升,精度迅速上升,在0.815时达到1.00,说明高置信度下模型几乎不会误报。

图片

3.4 精度-召回率曲线

曲线展示了模型在不同召回率下的精度表现。当前模型在召回率较高(0.8以上)时,精度依然能保持在0.8以上,说明模型整体表现均衡。曲线下的面积(mAP@0.5=0.822)说明模型在不同阈值下的平均检测能力较强。

图片

3.5 召回率-置信度曲线

曲线反映了随着置信度阈值的提高,模型检测出所有真实"tas"的比例变化。置信度为0时,召回率最高可达0.92,说明大部分雄穗都能被检测出来。随着置信度提升,召回率逐渐下降,说明模型变得更"保守",漏检增多。

图片

04 Flask Web界面与系统设计

4.1 Flask简介

Flask 是一个用 Python 编写的轻量级 Web 应用框架,具有简单易用、扩展性强等特点。它非常适合快速开发和部署基于 Web 的人工智能应用。通过 Flask,可以将深度学习模型与前端界面无缝集成,实现模型的在线推理和结果可视化。

4.2 依赖安装

pip install -r requirements.txt

4.3 系统功能与运行方式

python app.py

图片

图片检测

Logo

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

更多推荐