[实战] 95%检出率!基于 Orin Nano Super 与 YOLOv8 的玉米在线视觉检测方案
0. 背景:动态流水线下的视觉挑战
在农产品自动化分选场景里,传送带速度到 30 cm/s 时,传统方案常被两件事卡住:运动模糊让特征丢失,微小缺陷(虫眼、掉粒)在大图里不容易被抓住。
这篇文章拆解一套基于 NVIDIA Jetson Orin Nano Super (67 TOPS) 和 全局快门相机 的工业级方案。核心是 “Pose 定位 + Cls 质检” 的级联架构,标注成本更低,综合检出率稳定在 95% 以上。
1. 硬件选型:算力与成像的基石
工业视觉里,硬件决定上限,算法只是把上限逼近。
1.1 成像单元:拒绝“果冻效应”
-
相机:OV9281 USB 3.0 模组 (130万像素, 120fps)。
- 核心理由:必须使用 Global Shutter (全局快门)。在 30cm/s 速度下,卷帘快门会使玉米拉伸变形,导致算法失效。
-
镜头:8mm 工业低畸变镜头。
- 视野 (FOV):在 850mm 安装高度下,提供约 41cm 的横向视野,完美覆盖 26cm 长的玉米且留有冗余。
-
光源:高亮 LED 条形光 (双侧 45° 对射)。
- 策略:配合 500μs 极短曝光时间,压制运动模糊。
1.2 计算单元:云边协同
-
训练端 (Training):NVIDIA RTX 3090 (24GB)。
- 作用:利用 24GB 显存进行
imgsz=1280的高分辨率训练,确保微小虫眼特征不丢失。
- 作用:利用 24GB 显存进行
-
推理端 (Inference):NVIDIA Jetson Orin Nano Super (8GB)。
- 作用:新款边缘平台,67 TOPS 算力能支撑双模型串行推理,同时支持 MJPEG 硬件解码。
2. 算法架构:级联式两阶段 (Cascade Two-Stage)
为了在速度和精度之间找平衡,我们没有用“单一大模型检测”,而是采用 “先看骨架,再看皮肤” 的分层处理。
2.1 架构设计图
Stage 1 (定位): YOLOv8-Pose $\rightarrow$ Filter (断头) $\rightarrow$ ROI Crop
$\downarrow$
Stage 2 (质检): YOLOv8-Cls $\rightarrow$ Sort (良品/次品)
2.2 为什么这么设计?
-
逻辑阻断,节省算力:第一步发现玉米“断头”,直接判定 NG 并剔除,不用进入第二步。
-
数字变焦,提升精度:用 ROI Crop 把玉米从 1280 大图里抠出来,再送入第二步模型,相当于变相放大了虫眼特征。
-
标注减负:第二步改成分类 (Classification),不用画成百上千个小框,只要把图片分进“好/坏”文件夹。
3. 核心实现细节
3.1 阶段一:结构定位与粗筛
-
模型:YOLOv8n-Pose (Nano版,极致速度)。
-
定义:Box 框住玉米,Keypoints 标记 [根部、尖部]。
-
业务逻辑:
-
完整性判别:计算根部到尖部的欧氏距离。距离低于阈值就判为 断头 (Broken)。
-
方向识别:根据 x 坐标判断大小头朝向。
-
ROI 输出:基于 Box 坐标外扩 20 像素,裁剪出更干净的玉米图像。
-
3.2 阶段二:精细质检
-
模型:YOLOv8s-Cls (Small版,保留更多纹理特征)。
-
类别定义:扁平化多分类。
-
Class 0: Good (良品) -
Class 1: Wormhole (虫眼) -
Class 2: Missing (掉粒)
-
-
关键技巧:高分辨率推理 (High-Res Inference)
-
痛点:分类模型常用 224x224 输入,小虫眼容易被“压没”。
-
解法:利用 Orin Nano Super 的算力,把输入设为 448x448 甚至 640x640。大图输入是小缺陷检出的关键。
-
4. 数据策略:如何达成 95% 检出率?
模型是容器,数据才是燃料。工业场景里,数据分布往往不平衡。
4.1 数据量 KPI
| 阶段 | 类别 | 建议数量 | 采集策略 |
|---|---|---|---|
| Stage 1 (Pose) | 结构定位 | 800+ | 覆盖旋转、平移、并排等场景。需开启旋转增强 (Rotation)。 |
| Stage 2 (Cls) | Good (良品) | 1500+ | 自动录制传送带视频,脚本自动抠图。 |
| Stage 2 (Cls) | Bad (次品) | 300+/类 | 瓶颈所在。 必须保证各类缺陷均衡。 |
4.2 “取巧”技巧:物理仿真
如果“坏玉米”样本太少导致精度上不去,建议用物理仿真补数据:
-
模拟虫眼:使用电钻在好玉米上钻出不同孔径的洞。
-
模拟掉粒:人为抠除部分玉米粒。
-
模拟霉斑:使用黑色马克笔在表面随机点涂。
注意:深度学习学习的是“黑色凹陷/斑点”的特征,物理模拟的数据对模型极其有效。
5. 部署与优化:Orin Nano Super
5.1 TensorRT 加速
不要直接运行 .pt 文件。在 Orin Nano 上,必须将模型转换为 TensorRT 引擎:
# 转换 Pose 模型 (FP16精度)yolo export model=yolov8n-pose.pt format=engine half=True device=0
# 转换 Cls 模型 (注意 imgsz 设为大分辨率)yolo export model=yolov8s-cls.pt format=engine imgsz=448 half=True device=05.2 伪代码逻辑 (Python)
import cv2from ultralytics import YOLO
# 加载 TensorRT 引擎model_pose = YOLO('corn_pose.engine')model_cls = YOLO('corn_cls.engine')
# 打开 USB 3.0 MJPEG 流 (利用硬件解码)cap = cv2.VideoCapture("v4l2src ... ! nvv4l2decoder ...")
while True: frame = cap.read() # 1280x800
# Stage 1: 定位 (低耗时) results_pose = model_pose(frame, imgsz=640, verbose=False)
for r in results_pose: # 逻辑剔除:断头 if is_broken(r.keypoints): signal_plc("REJECT_BROKEN") continue
# ROI 裁剪 (数字变焦) crop_img = get_crop(frame, r.boxes)
# Stage 2: 质检 (大分辨率输入) # 输入 448x448 以保留虫眼特征 results_cls = model_cls(crop_img, imgsz=448, verbose=False)
if results_cls[0].probs.top1 == 0: # Class 0 is Good signal_plc("PASS") else: signal_plc("REJECT_DEFECT")6. 总结
这套方案的价值在于**“扬长避短”**:
-
扬硬件之长:用 RTX 3090 做高分辨率训练,用 Orin Nano Super (67T) 做多模型推理。
-
避标注之短:把复杂缺陷检测转成图片分类,落地门槛更低。
通过 OV9281 全局快门 解决运动模糊,Pose 模型 做结构筛选,Cls 模型 做外观质检,这是一套经得起实战的工业视觉组合拳。