YOLO 识别串果西红柿果梗(果柄)完整方案(适配你的采摘机器人)

核心难点:果梗细、像素占比很小;颜色和枝叶接近;遮挡多;需要输出切点坐标 + 方向,不是只画框。 三个路线,按项目阶段选型:

  1. YOLO 检测(bbox):快速原型,只拿到果梗包围盒,适合 SDK 版本快速验证
  2. YOLO-Seg 实例分割:得到果梗掩码,后续用骨架提取求剪切点(最常用,推荐)
  3. YOLO-Pose 关键点:直接标注切点、果梗两端关键点,输出 2D 坐标,直接对接手眼 + 深度相机,适合 MoveIt 避障采摘闭环Frontiers

一、推荐选型:YOLOv8-Seg / YOLOv11-Seg(串番茄果梗)

你的串果采摘机器人,优先 YOLOv8-seg,推理速度快,能输出 mask 掩码,后续用 OpenCV 做骨架提取,得到果梗中心线,再取剪切点。

  • 类别:tomato(果实)、stem(果梗 / 果柄)两类
  • 硬件:D435 / 海康 RGB-D 相机,RGB 图进 YOLO,深度图做 2D→3D 反投影(手眼标定)

1. 数据集采集 & 标注(最关键)

  1. 采集温室串番茄图像:多角度、远近、不同光照、遮挡、逆光;至少1000~2000 张,果梗样本尽量多(类别不平衡是最大坑)
  2. 标注工具:LabelMe / Roboflow
    • 检测版:给果梗画包围框
    • 分割版:多边形标注果梗轮廓(不要只标一小段,尽量完整果柄)
    • Pose 关键点版:标注 2 个点:stem_root(果实连接点)、cut_point(剪切点)
  3. 数据增强(必须开,对抗光照、枝叶干扰)
    • 随机亮度、对比度、高斯模糊、HSV 扰动、随机裁剪、小尺度缩放
    • 小目标增强:放大果梗区域,防止模型忽略细梗
    • 可加 CycleGAN 生成夜间 / 弱光样本,提升温室鲁棒性
  4. 划分:train/val/test = 7:2:1;重点保证验证集有大量遮挡果梗样本

2. 模型训练配置(针对细果梗小目标优化)

复制代码
# yolo配置重点
nc: 2
names: ['tomato','stem']
# 小目标优化
imgsz: 640
# 多尺度训练 mosaic开启;减小anchor尺寸,适配细果梗小框
anchors: 缩小聚类,Kmeans聚类你的数据集果梗框
# 损失:使用CIoU / DIoU;类别不平衡:设置cls_pw,增加stem类权重

训练要点:

  • 预训练权重:yolov8n-seg.pt起步(嵌入式实时);精度不够换yolov8s-seg.pt
  • 增加小目标特征层权重,很多论文会在 Backbone 加入 ECA/MLCA 注意力模块,提升细梗特征提取能力Frontiers
  • 监控指标:重点看 stem 类 AP,不要只看整体 mAP;果梗漏检是首要问题

3. 推理后处理流程(机器人采摘核心,YOLO 输出 → 剪切点)

RGB 图像输入 YOLOv8-seg → stem 掩码 mask → OpenCV 处理:

  1. mask 二值化,形态学开 / 闭运算去噪(腐蚀 + 膨胀,去掉枝叶零散噪点)
  2. 骨架提取(Zhang-Suen 细化算法),提取果梗中心线
  3. 在骨架线上选择剪切点 cut_point:距离果实连接处预留 3~5mm 位置(防止伤到果实)
  4. 骨架线拟合直线,得到果梗角度(夹爪剪切姿态)
  5. 结合深度相机,把 2D 像素坐标 + 深度值,通过手眼标定矩阵转换到机械臂世界坐标系,给到 SDK 或者 MoveIt 做轨迹规划Frontiers

如果用 YOLO-Pose:直接回归cut_point关键点,省去骨架提取,更稳定,适合最终真机联调。缺点标注工作量更大。

二、YOLO 识别果梗 常见坑(采摘机器人现场实测高频问题)

  1. 类别不平衡:一张图里番茄大,果梗占像素极少,模型倾向忽略果梗 ✅对策:加大 stem 类别 loss 权重、过采样果梗样本、复制增强 stem 图像
  2. 枝叶和果梗颜色接近,误检 ✅对策:增加 HSV 色彩过滤做后处理;添加注意力机制;增加复杂遮挡样本
  3. 果梗被叶子 / 邻果遮挡,断 mask ✅对策:数据集大量加入遮挡样本;后处理对断裂骨架做线段拟合补全
  4. 深度相机在细梗位置深度丢失(D435 常见) ✅对策:采用邻域深度插值,或者二次提取深度,保证切点 3D 坐标稳定Frontiers
  5. 光照变化(温室阳光直射、阴影) ✅对策:相机固定曝光;数据集包含多光照;图像归一化

三、和你 WBS 两个版本的对接方案

✅ SDK 版本(原生 SDK,无 MoveIt)

YOLOv8-seg 部署在工控机 / 边缘板,输出果梗切点 2D 像素 → 深度得到 3D 相机坐标 → 手眼标定转换成机械臂基座坐标;调用 SDK 动作集合,驱动夹爪剪切。

对应 WBS 任务:手眼标定、夹爪剪切测试、采摘 Demo。

✅ MoveIt 版本

YOLO 推理输出果梗切点 + 果梗方向,同时输出环境点云 / 拟合地图; 视觉节点发布 ROS 话题:cut_point (x,y,z)stem_pose;MoveIt 接收目标位姿,做带避障轨迹规划,完成手眼避障联调。

对应 WBS 任务:接收视觉拟合地图、避障手眼联调。

四、最简代码片段(YOLOv8-seg 推理 + mask 提取,Python)

复制代码
from ultralytics import YOLO
import cv2
import numpy as np

model = YOLO("best_seg.pt")
img = cv2.imread("tomato_stem.jpg")
results = model(img, conf=0.4)

for r in results:
    masks = r.masks
    boxes = r.boxes
    if masks is not None:
        for seg_mask in masks.data:
            mask_np = seg_mask.cpu().numpy()
            mask_np = (mask_np * 255).astype(np.uint8)
            # 这里可以做骨架提取,获取果梗剪切点
            cv2.imshow("stem_mask",mask_np)
cv2.waitKey(0)

五、进阶优化方案(论文里串番茄果梗方案)

  1. 改进 YOLOv8:C2f + MLCA 注意力,提升细梗特征,果梗识别成功率可达 91%+Frontiers
  2. YOLO-GPP:单模型同时预测切点位置 + 夹爪抓取姿态,直接输出采摘位姿,非常适合串果机器人,减少后处理开发量
  3. RGB-D 双流 YOLO:把深度图作为第二通道输入网络,直接学习空间几何信息,提升遮挡场景稳定性

推荐开发顺序

  1. 先用 YOLOv8 检测框快速采集数据,验证能不能检出果梗(SDK Demo 快速验证)
  2. 升级 YOLOv8-seg,拿到 mask,开发骨架提取求切点
  3. 稳定后升级 YOLO-Pose 关键点,直接预测剪切点,降低后处理复杂度
  4. 部署 ROS 节点,对接 MoveIt 版本,手眼联调 + 避障测试
相关推荐
lie..1 小时前
30天从零开始学AI应用开发(Day 1):机器学习、深度学习、大模型,到底是个啥关系
人工智能·python·大模型
Ivanqhz1 小时前
Unigram 算法
开发语言·人工智能·python·深度学习·mlir
小宋10211 小时前
Embedding 模型怎么无痛迁移:双写、回填、灰度切换与回滚实战
人工智能
冯一川1 小时前
Python 实现与 Ollama 运行的模型对话
人工智能·python
pt10431 小时前
Cisco Splunk for AI Operations:AIOps企业实践
运维·人工智能·自动化
龙腾AI白云1 小时前
大模型的幻觉怎么治
人工智能·机器学习·知识图谱
刘天远2 小时前
Agent系统接入编排:评分模型、状态机与Python门禁
数据库·人工智能·python
AgentMaster2 小时前
零售行业智能客服系统怎么选?3 大场景落地与 4 款平台对比实践
大数据·人工智能·算法