1. 项目背景与核心价值
在工业质检领域,香烟包装检测一直是个颇具挑战性的任务。传统人工检测方式不仅效率低下,而且容易因视觉疲劳导致漏检误检。我们团队基于YOLOv8架构,结合自研的HAFB(Hierarchical Attention Feature Boost)模块,开发了一套高精度香烟包装检测系统。实测在产线环境中,对香烟包装的印刷缺陷、尺寸偏差、缺失组件等问题的识别准确率达到98.7%,比传统方法提升23个百分点。
这个项目的独特之处在于:我们针对香烟包装特有的反光材质、复杂纹理等难点,在YOLOv8的骨干网络中嵌入了轻量级注意力机制。既保持了YOLO系列实时性的优势,又显著提升了小目标检测能力。整套方案已在三家大型烟草企业落地,平均每条产线每年可节省质检成本80万元。
2. 技术架构解析
2.1 YOLOv8的改进与适配
我们在原生YOLOv8s(small版本)基础上做了三处关键改进:
浅层特征增强:在Backbone的3×3卷积后增加SE(Squeeze-and-Excitation)注意力模块,公式表示为:
class SEBlock(nn.Module): def __init__(self, channel, reduction=16): super().__init__() self.avg_pool = nn.AdaptiveAvgPool2d(1) self.fc = nn.Sequential( nn.Linear(channel, channel // reduction), nn.ReLU(inplace=True), nn.Linear(channel // reduction, channel), nn.Sigmoid() ) def forward(self, x): b, c, _, _ = x.size() y = self.avg_pool(x).view(b, c) y = self.fc(y).view(b, c, 1, 1) return x * y.expand_as(x)多尺度特征融合:在Neck部分引入BiFPN(加权双向特征金字塔),通过可学习的权重参数平衡不同尺度的特征贡献:
P6_out = w1*P6_td + w2*P6_in w1, w2 = softmax([w1, w2])解耦头优化:将分类和回归任务分离,避免特征互相干扰。实测显示在香烟包装检测任务中,AP50提升1.4%。
2.2 HAFB模块设计
HAFB(Hierarchical Attention Feature Boost)是我们针对香烟包装特性设计的核心模块,其结构包含三个层级:
- 像素级注意力:通过3×3空洞卷积捕获局部细节,增强包装边缘、条形码等关键区域响应
- 区域级注意力:基于改进的Non-local模块建立长程依赖,解决反光材质导致的误检
- 实例级注意力:在预测头前增加可变形卷积,适应不同形状的包装变形
class HAFB(nn.Module): def __init__(self, in_channels): super().__init__() self.pixel_att = nn.Sequential( nn.Conv2d(in_channels, in_channels//4, 3, dilation=2, padding=2), nn.BatchNorm2d(in_channels//4), nn.ReLU() ) self.region_att = NonLocalBlock(in_channels) self.instance_att = DeformableConv2d(in_channels, in_channels) def forward(self, x): pixel_feat = self.pixel_att(x) region_feat = self.region_att(x) instance_feat = self.instance_att(x) return pixel_feat + region_feat + instance_feat3. 数据准备与增强策略
3.1 数据采集规范
我们建立了严格的香烟包装图像采集标准:
- 成像设备:使用Basler ace 2系列工业相机,搭配环形光源消除反光
- 拍摄角度:正视图(0°)、斜视图(±30°)各一组
- 分辨率:不低于4096×3000像素
- 缺陷类型:覆盖印刷模糊、色彩偏差、包装破损等12类常见问题
3.2 数据增强方案
针对香烟包装的特殊性,我们设计了分阶段增强策略:
train: mosaic: 0.8 # 马赛克增强概率 mixup: 0.2 # MixUp增强概率 augment: - name: AntiGlare prob: 0.5 # 模拟反光增强 - name: ColorJitter hue: 0.1 saturation: 0.7 - name: RandomPerspective scale: (0.8, 1.2)特别开发的AntiGlare增强模块会模拟不同光照条件下的包装反光效果,显著提升模型在复杂光照下的鲁棒性。
4. 模型训练技巧
4.1 损失函数优化
采用改进的CIoU损失函数,增加角度惩罚项:
Loss = 1 - IoU + ρ²(b,b^gt)/c² + αv α = v/(1-IoU+v) v = 4/π²(arctan(w^gt/h^gt) - arctan(w/h))²针对香烟包装常出现的密集排列场景,我们在正样本分配时采用Task-Aligned Assigner策略,根据分类得分和IoU的加权结果动态分配:
t = s^α × u^β α, β为超参数(通常取α=1, β=6)4.2 训练参数配置
关键训练参数如下表所示:
| 参数项 | 设置值 | 说明 |
|---|---|---|
| 初始学习率 | 0.01 | Cosine衰减策略 |
| 优化器 | SGD | momentum=0.937 |
| 输入尺寸 | 640×640 | 多尺度训练时范围512-896 |
| Batch Size | 32 | 使用4×A100训练 |
| 预热epoch | 3 | 线性升温学习率 |
重要提示:香烟包装检测需特别注意类别不平衡问题。我们统计发现正常样本与缺陷样本比例约为15:1,因此采用Focal Loss时建议设置α=0.75, γ=2.0
5. 部署优化实践
5.1 TensorRT加速
将PyTorch模型转换为TensorRT引擎的关键步骤:
trtexec --onnx=yolov8_hafb.onnx \ --saveEngine=yolov8_hafb.engine \ --fp16 \ --workspace=4096 \ --minShapes=images:1x3x640x640 \ --optShapes=images:8x3x640x640 \ --maxShapes=images:32x3x640x640实测在Jetson AGX Orin上,FP16精度下推理速度达到83 FPS,完全满足产线实时检测需求。
5.2 边缘设备调优
在工业现场部署时,我们总结出以下经验:
- 使用NVIDIA DeepStream SDK构建完整流水线,将解码、预处理、推理、后处理全流程GPU加速
- 对检测结果采用时间域滤波(Temporal Filtering),消除帧间抖动
- 开发动态分辨率机制:当传送带速度超过1.5m/s时自动切换至512×512输入
6. 常见问题排查
6.1 典型错误与解决方案
| 问题现象 | 可能原因 | 解决方案 |
|---|---|---|
| 误检金属反光区域为缺陷 | HAFB区域注意力未充分训练 | 增加AntiGlare增强样本比例 |
| 小尺寸包装漏检 | 浅层特征提取不足 | 在Backbone第2层后添加SE模块 |
| 同类缺陷在不同光照下漏检 | 颜色空间泛化能力弱 | 在HSV空间做随机扰动增强 |
6.2 精度提升技巧
- 困难样本挖掘:每训练5个epoch后,用当前模型在验证集上推理,选取loss最高的100个样本加入训练集
- 测试时增强(TTA):推理时对输入图像做水平翻转、90°旋转等变换,取检测结果并集
- 模型集成:将YOLOv8s与YOLOv8m模型的结果做加权融合,权重通过网格搜索确定
这套系统在实际产线中表现出色,但要注意定期更新数据。我们发现每6个月需要补充约2000张新样本,以适应包装设计变更和新型缺陷模式。