1. 项目概述与背景
花生作为全球重要的油料作物和经济作物,其质量安全直接关系到食品工业和消费者健康。传统花生霉变检测主要依赖人工目检,存在效率低、主观性强、漏检率高等问题。我们开发的这套基于YOLOv8深度学习算法的花生种子霉变检测系统,实现了从传统人工检测到智能自动化检测的技术跨越。
系统核心采用YOLOv8模型架构,这是目前目标检测领域最先进的算法之一。相比传统检测方法,我们的系统具有三大突破性优势:首先,检测速度达到工业级实时性要求(30FPS以上);其次,平均检测精度(mAP@0.5)超过95%;最后,系统支持多种部署方式,从嵌入式设备到云端服务器均可流畅运行。
关键技术创新点:通过改进的锚框设计和非极大值抑制算法,系统在密集小目标检测场景下的性能提升显著,特别适合花生这种小型农产品的检测需求。
2. 系统架构设计
2.1 整体技术架构
系统采用经典的"前端采集-算法处理-结果展示"三层架构:
- 数据采集层:支持USB摄像头、工业相机、图片/视频文件等多种输入源
- 算法处理层:
- 核心检测模型:YOLOv8m(平衡精度与速度)
- 辅助模块:数据预处理、结果后处理、性能优化
- 应用展示层:
- PyQt5开发的跨平台GUI界面
- 检测结果可视化展示
- 数据统计与报表生成
2.2 模型选型分析
我们对比测试了YOLO系列多个版本的表现:
| 模型版本 | 参数量(M) | mAP@0.5 | FPS(1080Ti) | 适用场景 |
|---|---|---|---|---|
| YOLOv8n | 3.2 | 89.2% | 120 | 嵌入式设备 |
| YOLOv8s | 11.4 | 92.5% | 85 | 移动端应用 |
| YOLOv8m | 26.2 | 95.1% | 45 | 本系统选择 |
| YOLOv8l | 43.7 | 95.8% | 28 | 高精度场景 |
选择YOLOv8m的决策依据:
- 在精度与速度间取得最佳平衡
- 参数量适中,适合大多数部署环境
- 对花生这种小目标检测效果优于轻量级版本
3. 数据集构建与处理
3.1 数据采集与标注
原始数据集包含367张高分辨率花生图像(4000×3000像素),通过专业标注工具LabelImg进行标注,确保每颗花生都精确标注边界框。标注规范包括:
- 霉变花生:表面有明显霉斑或变色
- 无霉变花生:表面光滑、颜色均匀
- 模糊不清的样本直接剔除
数据集统计特征:
| 类别 | 训练集 | 验证集 | 测试集 | 合计 |
|---|---|---|---|---|
| with mold | 186(9800) | 58(2940) | 32(1680) | 276(14420) |
| without mold | 62(3900) | 19(1190) | 10(630) | 91(5720) |
注:括号内为标注框数量,反映实际检测目标数
3.2 数据增强策略
针对样本不平衡问题,采用多层次数据增强:
python复制# 数据增强配置示例
augmentation = {
'hsv_h': 0.015, # 色相抖动
'hsv_s': 0.7, # 饱和度增强
'hsv_v': 0.4, # 明度调整
'rotate': 45, # 旋转角度
'translate': 0.1,# 平移比例
'scale': 0.5, # 缩放范围
'shear': 0.0, # 剪切变换
'flipud': 0.5, # 上下翻转概率
'fliplr': 0.5, # 左右翻转概率
'mosaic': 1.0, # 马赛克增强
'mixup': 0.1 # MixUp增强
}
特殊处理技巧:
- 对少数类(without mold)采用更强的增强参数
- 添加高斯噪声模拟低光照条件
- 随机背景替换增强泛化能力
4. 模型训练与优化
4.1 训练环境配置
硬件配置:
- GPU:NVIDIA RTX 3090 (24GB显存)
- CPU:AMD Ryzen 9 5950X
- 内存:64GB DDR4
软件环境:
- Python 3.9
- PyTorch 2.0.1+cu118
- Ultralytics YOLOv8
- CUDA 11.8
bash复制# 环境安装命令
conda create -n yolov8 python=3.9
conda activate yolov8
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118
pip install ultralytics
4.2 训练参数设置
核心训练配置:
yaml复制# data.yaml
train: ../datasets/images/train
val: ../datasets/images/val
nc: 2
names: ['with mold', 'without mold']
# 训练命令
yolo detect train \
data=data.yaml \
model=yolov8m.pt \
epochs=500 \
batch=64 \
imgsz=640 \
patience=50 \
device=0 \
workers=8 \
optimizer=AdamW \
lr0=0.001 \
weight_decay=0.05
关键参数说明:
imgsz=640:平衡检测精度与显存占用patience=50:早停机制防止过拟合AdamW优化器:更适合小批量训练- 学习率采用余弦退火策略
4.3 训练过程监控
训练过程中监控的关键指标:

从训练曲线可以看出:
- 验证集mAP稳定上升,未出现过拟合
- 分类损失和定位损失同步下降
- 最终mAP@0.5达到95.1%,满足工业应用需求
5. 系统实现细节
5.1 核心检测流程
python复制def detect_image(self, image_path):
# 读取图像
img = cv2.imread(image_path)
if img is None:
raise ValueError("无法读取图像文件")
# 执行推理
results = self.model(img, verbose=False)[0]
# 解析结果
boxes = results.boxes.xyxy.cpu().numpy()
classes = results.boxes.cls.cpu().numpy()
confidences = results.boxes.conf.cpu().numpy()
# 后处理
valid_indices = confidences > self.conf_threshold
boxes = boxes[valid_indices]
classes = classes[valid_indices]
confidences = confidences[valid_indices]
# 返回结构化结果
return {
'boxes': boxes,
'classes': classes,
'confidences': confidences,
'annotated_img': results.plot()
}
5.2 性能优化技巧
-
TensorRT加速:
bash复制yolo export model=best.pt format=engine device=0使推理速度提升2-3倍
-
半精度推理:
python复制model = YOLO('best.pt') model.to('cuda').half()显存占用减少40%
-
批处理优化:
python复制# 批量处理最多16张图像 results = model([img1, img2, ...], batch=16)吞吐量提升显著
5.3 界面功能实现
PyQt5界面核心功能模块:
python复制class MainWindow(QMainWindow):
def __init__(self):
super().__init__()
# 初始化UI
self.setup_ui()
# 模型加载
self.model = YOLO('best.pt')
# 定时器
self.timer = QTimer()
self.timer.timeout.connect(self.update_frame)
# 状态变量
self.is_camera_on = False
self.current_image = None
主要交互功能:
- 图片/视频/摄像头输入切换
- 实时检测结果显示
- 检测结果表格展示
- 检测参数动态调整
- 结果保存与导出
6. 部署与应用
6.1 多种部署方案
| 部署方式 | 硬件要求 | 典型FPS | 适用场景 |
|---|---|---|---|
| Jetson Nano | 4GB内存 | 8-12 | 嵌入式设备 |
| Raspberry Pi 4 | 4GB内存 | 2-3 | 教育演示 |
| 工业PC(i7+1080Ti) | 16GB内存 | 45-50 | 产线检测 |
| 云端服务器(T4) | 16GB显存 | 30-35 | 远程服务 |
6.2 实际应用案例
某花生加工厂部署效果:
- 检测速度:4800颗/分钟
- 准确率:96.2%
- 误检率:<0.5%
- 人力成本减少:3人/班次
部署注意事项:工业现场需特别注意光照条件一致性,建议配备环形光源,照度维持在1000-1500lux为宜。
7. 常见问题与解决方案
7.1 模型优化问题
问题1:小目标漏检
- 解决方案:
- 减小anchor box尺寸
- 增加高分辨率训练
- 使用FPN特征金字塔
问题2:相似背景误检
- 解决方案:
- 增加背景多样性数据
- 添加注意力机制
- 后处理增加背景过滤
7.2 部署问题排查
问题:Jetson设备上速度慢
- 检查TensorRT是否启用
bash复制
nvidia-smi -L - 优化电源模式
bash复制sudo nvpmodel -m 0 sudo jetson_clocks - 使用半精度推理
python复制model.fp16 = True
7.3 使用技巧
-
光照调整:
- 最佳检测光照:5000K色温,无直射反光
- 可用手机白平衡APP校准
-
角度优化:
- 花生平铺单层效果最佳
- 建议传送带速度<0.5m/s
-
模型更新:
python复制model = YOLO('yolov8m.pt') model.train(resume=True) # 增量训练
8. 项目扩展方向
-
多光谱检测:
- 增加近红外摄像头
- 检测内部霉变(表面不可见)
-
品种识别:
- 扩展模型识别不同花生品种
- 实现分级分类
-
云端服务:
- 开发REST API接口
- 支持移动端拍照检测
-
产线集成:
- 与PLC控制系统对接
- 自动分拣机械臂控制
实际部署中发现,系统对轻度霉变(<5%面积)的检测准确率仍有提升空间。后续计划引入Transformer模块改进小目标检测性能,同时开发Android端轻量化版本,拓展应用场景。
