恒美微站 Logo 恒美微站
  • 首页
  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心
  • 联系我们

基于YOLOv11的生菜生长周期自动识别系统设计与实现

  • 首页
  • 资讯中心
  • /
  • 基于YOLOv11的生菜生长周期自动识别系统设计与实现

相关资讯

PHP开源中医诊所后台系统:挂号处方库存全流程拆解与二次开发指南 2026/10/18 14:47:10
基于YOLOv10的车辆识别系统:从模型训练到UI界面部署实战 2026/10/18 14:47:10
基于PHP与MySQL的失物招领系统源码解析:数据边界与业务流程设计 2026/10/18 14:47:10

最新资讯

Cursor Agent 文件写入频繁要求确认 — 排查记录与 TaoToken 配置实践
告别Python!Spring Boot 3集成GPT-5.4,Java后端10分钟接入原生计算机操作
工程资料员必备:四川建龙软件全套表格Word模板处理与批量生成指南
security-audit-skill 实战:Agent 安全审计技能与 findings.json 报告契约设计
Octop:面向PostgreSQL的SQL即代码工程化实践
DeepSeek与豆包去AI味指令实测:论文降AI从60%到10%的5款工具评测与TaoToken配置

今日推荐

基于GMM的语音识别系统原理与MATLAB实现详解
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

本周热门

基于GMM的语音识别系统原理与MATLAB实现详解
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

本月精选

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证
2026 大模型集体涨价:用 Python 做企业 Token 成本测算与选型避坑(附配置)

基于YOLOv11的生菜生长周期自动识别系统设计与实现

发布时间:2026/10/18 14:47:10
基于YOLOv11的生菜生长周期自动识别系统设计与实现 生菜生长周期识别我用YOLOv11搭了一套带界面的检测系统农业种植里有个很实际的需求生菜从出苗到采收不同生长阶段的管理动作完全不一样——苗期要控水快速生长期要追肥到了成熟期得赶紧采收晚了就容易抽薹、纤维化、掉价。但靠人眼判断生长周期既依赖经验又费时间一个人盯几十亩大棚一圈转下来眼睛都花了。所以做一个能自动识别生菜生长周期的系统在智慧农业场景里非常落地。我这次用YOLOv11做目标检测配合自建的YOLO数据集训练了一个能区分生菜不同生长阶段的模型再封装成带登录注册界面的桌面UI完整跑通了一套从数据到部署的流程。这套系统解决的核心问题就是给一张生菜图像自动判断它当前处于哪个生长周期。它适合正在入门深度学习视觉方向的开发者、做智慧农业项目的学生以及想把自己的YOLO模型包装成完整产品的小团队。下面我把整个项目的设计思路、数据集构建、训练调参和UI集成的过程全部拆开讲每一步都给出实际可复现的方案。1. 整体设计一个生菜检测系统应该拆成哪几块1.1 需求拆解与边界确认做项目第一件事不是写代码而是想清楚系统要干什么、做到什么程度。生菜生长周期检测习惯上分成三个阶段幼苗期、快速生长期和成熟期。幼苗期叶片小而少株型紧凑快速生长期叶片数量明显增加株型扩张但还没形成紧实的叶球成熟期叶球紧实外观圆整是采收的最佳窗口。有些需求方还会要求区分种子萌芽期或者抽薹期但这两个阶段在实际生产里意义不大——萌芽期本质上就是土壤里的一粒种子视觉特征太弱抽薹期意味着已经采收晚了识别出来只能用来做损耗统计。我第一次和需求方聊的时候他们要求七个类别后来我建议压缩到三类准确率提升了十几个点模型的实用性反而更强。系统边界也要划清楚输入端是单张图像或者摄像头实时画面输出端是类别标签、置信度分数和可视化标注框。简单说这就是一个单阶段目标检测任务不是图像分类。区别在于一张图里可能同时有多个生长阶段的生菜苗比如移栽后同一片地里补苗的区域和正常区域会有时期差异所以用检测框逐个圈出每一株生菜、分别判断它的生长状态比整图分类更贴近真实场景。1.2 技术选型和各个模块的协作关系整个系统按功能拆成三层数据层负责图像的采集、清洗和标注模型层负责训练和推理应用层负责UI交互和结果展示。数据层我用LabelImg标注工具格式转成YOLO的txt标注格式模型层用YOLOv11这个最新的YOLO系列模型应用层用PyQt5做桌面界面。选YOLOv11不是因为它最新所以最酷而是它的检测头设计做了一些调整在同等算力下比YOLOv8有更好的mAP表现尤其是小目标检测能力有提升。生菜幼苗期的叶片目标不算大小目标检测能力直接关系到整体识别率。而且Ultralytics框架的封装对新手极其友好几行代码就能跑通训练和推理部署落地非常快。如果你用的是老一点的显卡YOLOv8也完全能胜任这个任务不一定非要追新版本关键是数据集质量。PyQt5做界面是因为Python生态里它做桌面端交互是最成熟的方案之一。登录注册界面可以用SQLite存用户信息检测界面用QLabel显示图像检测结果用QTableWidget或者直接在图像上绘制标注框这些组件都能快速实现。整体架构图不复杂用户登录后选择图片或者打开摄像头推理线程把图像传给YOLO模型模型返回检测结果界面渲染框体和文字信息。2. 数据集构建模型效果的上限在标注这一步就决定了2.1 数据采集与清洗很多人跑深度学习项目恨不能第一周就把模型训出来结果被数据集狠狠教育了。YOLO系列模型虽然泛化能力不错但训练数据如果不行后面再怎么调参都是白搭。这次生菜数据集我前后花了两周时间采集和整理总共攒下约4200张图像分为幼苗期、快速生长期、成熟期三个类别。采集渠道主要有两个一是去周边的农业种植基地实拍涵盖不同光照条件、不同品种的生菜这部分数据最宝贵模型最终要能在真实大棚环境里跑二是从公开的农业图像数据集中筛选进行数据补充。实拍的要特别留意拍摄角度——不要只拍俯视图模型在部署时可能面对不同安装高度的摄像头所以平视角度、45度俯角、正上方视角都要覆盖。清洗是很多人容易偷懒的环节。我拿到原始图像后做了三步筛选模糊图像直接删掉因为运动模糊或者对焦不准的图会让模型学到错误的纹理特征严重遮挡的图要谨慎处理一株生菜被另一株挡住超过40%就删除因为标注框里含有大量无关像素光照严重失衡的图只保留一部分用于模拟恶劣环境。最后筛选出约3600张有效图像这个数据量对于三分类检测任务来说属于中等偏上水平完全够用。2.2 标注规范细节定了后面返工就少了标注用的工具是LabelImg这是最经典的YOLO标注工具操作简单、易上手。安装方式很简单pip install labelImg打开后界面左侧有一排工具按钮常用的就是画框Create RectBox和保存Save。标注前先把图片格式统一成JPEG或PNG标注输出格式选YOLO这样会生成一个同名txt文件里面每一行代表一个目标框。标注的核心规范有三个我因为前期没定清楚返工了整整一个下午第一框要贴着生菜的叶片边缘走但不用精确到每一片叶子的锯齿状轮廓检测框毕竟是矩形框住整株生菜的主体部分就行留一点边缘余量是允许的目的是让模型关注整体形态而不是局部纹理。第二生菜只有露出土面的部分需要标注根部盖着地膜或者土壤的部分不要框进去否则大量背景信息会被当成生菜特征学进去。第三边界遮挡的个体要单独处理。如果一株生菜在图像边缘只露出一半建议直接不标因为这类半截目标只会给模型带来标注噪声。如果是两株生菜挨得很近各自完整可辨就分别标框框的边缘可以挨着但不要重叠超过20%。标注文件长这样每行对应一个目标分别是类别ID和归一化后的中心坐标、宽高2 0.482143 0.516304 0.284821 0.351936 0 0.215625 0.710870 0.103571 0.121803数值计算方式很直接中心坐标x等于框的左上角x加上框宽的一半再除以图像宽度得到0到1之间的归一化值宽高同理。2.3 数据增强与划分3800张图像训一个三分类检测模型直接训练也能出效果但鲁棒性会差一些。我做了在线数据增强也就是训练阶段实时对图像做变换不额外占用磁盘空间。主要用的增强手段包括水平翻转概率0.5这对生菜检测非常有效因为生菜没有方向性特征、小幅旋转正负15度以内模拟摄像头安装偏差、亮度对比度调整覆盖早晚不同光照条件、轻微模糊增强模型对镜头脏污的鲁棒性。数据集划分方面我按622切成训练集、验证集和测试集。划分的时候注意一个坑如果图像序列里有连续拍的几帧要防止它们被分到不同集合里否则会造成验证集和训练集高度相似评估结果虚高。我用视频抽帧方式采集的部分先按视频片段分组再整体分配保证同一片段的帧不会横跨训练集和验证集。划分完毕后目录结构整理成YOLO默认的数据集格式然后写一个data.yaml文件指向三个目录的路径并声明类别名称train: datasets/lettuce/train/images val: datasets/lettuce/val/images nc: 3 names: [seedling, growing, mature]3. 模型训练与优化参数怎么定、指标怎么看、坑怎么避3.1 环境准备与训练参数选择训练环境用的是单张主流消费级显卡显存12GB操作系统是Ubuntu 20.04CUDA和cuDNN按官方文档配置好。Ultralytics框架的安装非常简单pip install ultralytics装好之后检测框架是否正常可以用一行命令验证from ultralytics import YOLO model YOLO(yolo11n.pt) results model.train(datadatasets/lettuce/data.yaml, epochs100, imgsz640)我用的是YOLOv11nn代表nano是系列里参数量最小的版本。为什么不用s或者m因为生菜检测帧率很关键最终部署要考虑实时性nano模型推理速度快而且对单目标类别的检测任务来说精度足够撑起整个项目。当然如果你的算力充裕用yolo11s.pt起步mAP一般会高1到2个点。关键参数我按下面这组来跑参数设置值说明imgsz640输入图像尺寸越大精度越高但显存占用上升batch16显存12GB时刚好放得下epochs120配合早停机制防止过拟合optimizerSGD数据量中等时SGD比较稳lr00.01初始学习率跑起来如果loss震荡就降到0.005weight_decay0.0005常规L2正则项patience1515轮没改善就自动停这里有个容易踩的坑数据量不是特别大的时候很多人喜欢把epochs直接拉到300以上但这会让模型在后期把训练集的特征背下来验证集mAP反而下降。我设120轮配合patience早停机制实际在80轮左右就收敛了节省了大量训练时间。3.2 训练过程观测与指标解读训练日志里重点盯两个东西loss曲线和验证集mAP曲线。loss曲线如果持续下降且没有明显反弹说明模型在学习mAP50是IoU阈值0.5下的平均精度这个指标对检测任务最直观生菜这类目标框定位要求不像自动驾驶那么高mAP50达到90以上就算很理想了。我这次训练的结果三类类别的mAP50分别是幼苗期0.91、快速生长期0.88、成熟期0.94综合mAP50约0.90。mAP50-95更严格的综合指标在0.62左右属于中等水平说明模型的框定位还有提升空间但对于农业场景来说已经够用因为农业检测框不需要像素级精确。有一个实践经验生菜不同生长阶段的标注框尺寸差异很大。幼苗期框小成熟期框大模型在预测时对小目标的回归能力往往弱一些。如果发现幼苗期的置信度明显低于其他两类可以尝试在训练时开启多尺度训练参数让模型在不同输入尺寸下都能学到目标特征model.train(..., scale0.5)表示训练时随机缩放到原始尺寸的50%到150%之间强制模型适应不同尺度的目标对提升小目标检测有明显帮助。3.3 模型导出与格式转换训练完成后best.pt保存在runs/detect/train目录下。部署到桌面UI里有两种方式一种直接加载PyTorch权重简单方便但推理速度不是最优另一种转成ONNX格式再推理可以获得更快的速度。对于这个项目我直接用PyTorch权重因为在PyQt界面里单张图片推理几十毫秒用户根本感觉不到差异。导出ONNX的命令yolo export modelbest.pt formatonnx imgsz640导出后可以顺手用ONNX Runtime做一个简单的速度测试实测下来在CPU上单张640x640图像推理时间大约120msGPU上大约15ms完全满足实时检测要求。4. PyQt5界面从登录到检测结果一把梭到底4.1 界面整体布局与功能梳理UI设计上参考了常见的教务管理系统布局左侧是功能导航右侧是操作区域。整个应用分两个界面登录注册界面和主检测界面。登录注册界面是系统的第一道门。用户输入用户名和密码登录成功后才能进入主界面。这部分的数据存储我用SQLite不需要额外安装数据库服务轻量可靠一个文件搞定。密码存储用哈希加密的方式明文存储密码不仅是懒而且是很严重的安全隐患。我用hashlib库的sha256加盐处理虽然对于本地小应用来说有点大材小用但养成好习惯没坏处。主界面包含三个核心功能区图像来源区、模型参数区、结果展示区。图像来源区提供两个按钮一个打开本地图片一个打开摄像头实时检测。模型参数区可以调整置信度阈值默认0.5这个参数决定了系统对低置信度预测的容忍度。调低会漏掉一些低置信度的真实目标调高则可能放过一些模糊目标实际使用时要根据现场摄像头清晰度灵活调整。结果展示区左侧显示原图或带框标注的检测图右侧用表格展示检测到的每个目标框的类别、置信度和坐标位置。4.2 登录注册模块实现登录注册模块的代码结构很清楚我用一个用户表存用户名和密码hash注册时先检查用户名是否已存在不存在则插入新记录。实际写的时候要注意SQLite在桌面应用里的并发问题虽然本地单用户场景基本不会出现两个线程同时写库但保险起见登录和注册函数都用with语句确保连接正常关闭import sqlite3 import hashlib def hash_password(password): salt lettuce_project return hashlib.sha256((password salt).encode(utf-8)).hexdigest() def register_user(username, password): conn sqlite3.connect(users.db) cursor conn.cursor() cursor.execute(CREATE TABLE IF NOT EXISTS users (username TEXT PRIMARY KEY, password TEXT)) cursor.execute(INSERT INTO users (username, password) VALUES (?, ?), (username, hash_password(password))) conn.commit() cursor.close() conn.close()注册时要处理用户名重复、密码长度校验。我这里的逻辑是用户名不少于3个字符密码不少于6位并且注册成功后自动跳转到登录页省去重新输入的麻烦。登录时查询数据库比对hash值。这里有个细节比对要用hash对hash不要在数据库和内存之间传明文密码。整个流程完成后进入主界面并传当前用户名给主窗口让状态栏显示“当前用户xxx”。4.3 检测流程与结果可视化主界面的检测逻辑是核心完整的调用链是这样的用户点击打开图片弹窗选择文件路径路径赋值给image_path变量点击开始检测按钮后调用model.predict()得到检测结果从结果对象里取出boxes框坐标、names类别名、conf置信度最后把标注信息画到图像上显示在左侧的QLabel组件里。检测的核心代码from ultralytics import YOLO model YOLO(best.pt) def detect_image(image_path, conf_threshold0.5): results model.predict(sourceimage_path, confconf_threshold, imgsz640) detections [] for r in results: for box in r.boxes: x1, y1, x2, y2 box.xyxy[0].tolist() conf float(box.conf[0]) cls int(box.cls[0]) detections.append({ bbox: [x1, y1, x2, y2], confidence: round(conf, 3), class: model.names[cls] }) return detections绘制结果我用OpenCV在原始图像上用cv2.rectangle绘制矩形框cv2.putText在框上方写出类别名和置信度比如“seedling 0.82”。不同类别用不同颜色区分幼苗期用绿色快速生长期用蓝色成熟期用橙色。这个细节看似不重要但对使用者的体验影响挺大——颜色区分让他们不用看文字就能一眼分辨当前画面里各个阶段的分布提高棚内巡查效率。摄像头检测的逻辑类似只是图片来源从图片路径换成了cv2.VideoCapture(0)的逐帧读取。为了让界面不卡死摄像头帧读取和推理要放到独立线程里通过信号槽机制把结果传回主线程更新UI。这里用QThread实现涉及跨线程通信一个常见的坑是直接在子线程里操作UI组件导致程序崩潢正确做法是子线程只计算结果主线程做UI更新。4.4 界面美化与打包部署PyQt5默认样式比较死板我用QSS样式表做了一套深色主题让界面看起来更专业。整体配色以深灰为底、蓝色为主色调配合白色文字。按钮加了hover效果鼠标放上去会变亮这些细节能让用户感觉系统更精致。QSS的一个简单示例QPushButton { background-color: #2E86DE; color: white; border-radius: 5px; padding: 8px 16px; } QPushButton:hover { background-color: #3498DB; }打包分发用PyInstaller这是Python桌面应用最成熟的打包方案。打包过程有几个要注意的问题best.pt模型文件默认不会被自动包含需要在spec文件里用datas参数手动添加PyQt5的插件文件也要一并打包否则运行时会报平台插件缺失。我实际打包后整个应用大约160MB其中模型文件20MBPyQt5动态库占了大头这也是Python桌面应用的常态可以接受。打包命令参考pyinstaller --onefile --windowed --add-data best.pt;. --add-data users.db;. main.pyWindows系统注意分隔符用分号Linux和macOS用冒号这是我曾经打包后换平台运行报错才发现的坑。5. 常见问题排查训练到部署我踩过的那些坑5.1 训练阶段的典型问题第一个高频问题loss下降很快但mAP不动。这是典型的过拟合初期表现模型在训练集上很强大但验证集上表现平平。解决办法是检查数据是否泄露也就是验证集中的图像跟训练集太相似其次降低模型复杂度从yolo11s换回yolo11n最后增强正则化提升weight_decay到0.001试试。第二个问题类别不平衡导致某个类别检测效果差。我这次的数据里快速生长期的图像比其他两类少一些训练完发现它的mAP50比其他类低将近6个点。解决办法一是数据增强时对这个类别的图像做更多变换二是人工补充采集这个阶段的图像数据。数据不平衡在农业场景里很常见尽量从源头补齐数据少指望算法层面去硬调。第三个问题训练时显存不够报CUDA out of memory。最简单有效的办法是batch size减半从16降到8观察显存占用再决定是否继续降。还可以开启梯度累积Ultralytics框架里配置batch参数为累积次数即可但新手不建议搞这么复杂直接减小batch就行。5.2 部署环节容易忽视的细节模型训练得很好但部署后效果差这是最常见的情况之一。原因往往在图像输入尺寸或者格式上。训练时用的imgsz是640推理时如果用户上传一张1920x1080的大图框架会自动缩放但有时候你要手动调用得明确指定imgsz参数确保推理尺寸和训练尺寸一致。还有一种情况是摄像头画面颜色偏色。大棚里有些摄像头带红外补光或者白平衡不准导致画面偏绿或偏蓝影响检测准确率。我在预处理里加了一个可选的白平衡校正开关用户觉得画面颜色不对时可以手动开启在UI参数区实现这个功能。另外要提醒的是UI显示图像时的坐标映射问题。OpenCV画完框后图像保存为RGB格式没问题但QLabel显示之前要先把BGR转成RGB。这个我试过没转结果绿色生菜在界面上变成蓝色一度以为模型学错了特征排查半天才发现是这个基础问题img_rgb cv2.cvtColor(img_bgr, cv2.COLOR_BGR2RGB)5.3 常见问题速查表问题现象可能原因解决办法训练loss不降学习率过大数据格式错误下调lr0到0.005检查标注文件坐标是否越界验证集mAP低于60数据量太少类别不平衡增加数据增强补充少类别图像推理速度很慢CPU推理模型过大换用yolo11n或用GPU推理摄像头画面卡顿UI线程被推理阻塞把推理放到独立子线程UI只做显示打包后模型加载失败模型文件未随包打包在spec文件中用add-data添加模型文件QLabel显示图片特别小未调整控件尺寸策略设置setScaledContents(True)并配合resizeEvent重绘6. 写在最后这个项目还能往哪些方向扩展这套生菜生长周期检测系统完整跑下来数据模块、模型模块、应用模块都已经验证可行。按照现有框架往生产环境落地时还有几个扩展方向可以做一是加入定期统计功能对同一地块连续多天的检测结果做趋势记录自动生成生长进度报表这个对种植方案的动态调整很有帮助二是把UI的本地版改成前后端分离架构将模型部署到服务器上通过接口对外提供检测服务这样手机端也可以调用三是针对更多蔬菜品种做数据扩充把模型升级成多品种生长检测这样一套系统就可以覆盖整个大棚的不同作物区域。我个人在实际操作中的体会是目标检测项目想快速出成果模型选型已经不是最关键的变量Ultralytics框架把大量工程细节都封装好了真正的差距来自数据整理和部署整合。把这两块做扎实项目离落地就只有一步之遥。数据标注这一步建议至少预留一半的项目时间哪怕模型训练花了两天数据标注花十天也是值得的。另外做界面的时候不要贪复杂功能用户真正高频使用的就那三五个操作先把主流程打磨顺滑让普通用户看着界面能猜出怎么操作比堆一堆花哨控件实在得多。最后再分享一个小技巧模型训练完成后别急着直接部署到UI里先写一段五到十分钟的真实场景视频抽帧跑一遍推理把输出的每一帧都保存下来检查。很多在静态图片上看起来完美的情况一到连续帧就会暴露问题比如同一株生菜在前一帧是快速生长期、后一帧突然变成成熟期这种时序上的抖动会极大损害系统在用户心中的可信度。检测到这类问题后可以在推理线程加一个简单的帧间平滑策略对相邻帧的类别判断做多数投票稳定性和现场体验都会有明显提升。

关于恒美微站

恒美微站专注于为个体商户、工作室提供极简自助建站服务,让每个人都能轻松拥有专业网站。

快速链接

  • 关于我们
  • 建站服务
  • 主题模板
  • 案例展示
  • 资讯中心

服务项目

  • 可视化建站
  • 拖拽编辑
  • 主题定制
  • SEO 优化
  • 网站托管

联系方式

  • 📍 地址:北京市朝阳区建国路 88 号
  • 📞 电话:400-888-8888
  • ✉️ 邮箱:info@hmyw.cn
  • 🕐 时间:周一至周日 9:00-18:00

© 2024 恒美微站 hmyw.cn 版权所有 | 京 ICP 备 12345678 号