YOLOv8改进与HAFB模块在香烟包装检测中的应用

YOLOv8改进与HAFB模块在香烟包装检测中的应用

1. 项目背景与核心价值

在工业质检领域,香烟包装检测一直是个颇具挑战性的任务。传统人工检测方式不仅效率低下,而且容易因视觉疲劳导致漏检误检。我们团队基于YOLOv8架构,结合自研的HAFB(Hierarchical Attention Feature Boost)模块,开发了一套高精度香烟包装检测系统。实测在产线环境中,对香烟包装的印刷缺陷、尺寸偏差、缺失组件等问题的识别准确率达到98.7%,比传统方法提升23个百分点。

这个项目的独特之处在于:我们针对香烟包装特有的反光材质、复杂纹理等难点,在YOLOv8的骨干网络中嵌入了轻量级注意力机制。既保持了YOLO系列实时性的优势,又显著提升了小目标检测能力。整套方案已在三家大型烟草企业落地,平均每条产线每年可节省质检成本80万元。

2. 技术架构解析

2.1 YOLOv8的改进与适配

我们在原生YOLOv8s(small版本)基础上做了三处关键改进:

  1. 浅层特征增强:在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)
  2. 多尺度特征融合:在Neck部分引入BiFPN(加权双向特征金字塔),通过可学习的权重参数平衡不同尺度的特征贡献:

    P6_out = w1*P6_td + w2*P6_in w1, w2 = softmax([w1, w2])
  3. 解耦头优化:将分类和回归任务分离,避免特征互相干扰。实测显示在香烟包装检测任务中,AP50提升1.4%。

2.2 HAFB模块设计

HAFB(Hierarchical Attention Feature Boost)是我们针对香烟包装特性设计的核心模块,其结构包含三个层级:

  1. 像素级注意力:通过3×3空洞卷积捕获局部细节,增强包装边缘、条形码等关键区域响应
  2. 区域级注意力:基于改进的Non-local模块建立长程依赖,解决反光材质导致的误检
  3. 实例级注意力:在预测头前增加可变形卷积,适应不同形状的包装变形
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_feat

3. 数据准备与增强策略

3.1 数据采集规范

我们建立了严格的香烟包装图像采集标准:

  1. 成像设备:使用Basler ace 2系列工业相机,搭配环形光源消除反光
  2. 拍摄角度:正视图(0°)、斜视图(±30°)各一组
  3. 分辨率:不低于4096×3000像素
  4. 缺陷类型:覆盖印刷模糊、色彩偏差、包装破损等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.01Cosine衰减策略
优化器SGDmomentum=0.937
输入尺寸640×640多尺度训练时范围512-896
Batch Size32使用4×A100训练
预热epoch3线性升温学习率

重要提示:香烟包装检测需特别注意类别不平衡问题。我们统计发现正常样本与缺陷样本比例约为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 边缘设备调优

在工业现场部署时,我们总结出以下经验:

  1. 使用NVIDIA DeepStream SDK构建完整流水线,将解码、预处理、推理、后处理全流程GPU加速
  2. 对检测结果采用时间域滤波(Temporal Filtering),消除帧间抖动
  3. 开发动态分辨率机制:当传送带速度超过1.5m/s时自动切换至512×512输入

6. 常见问题排查

6.1 典型错误与解决方案

问题现象可能原因解决方案
误检金属反光区域为缺陷HAFB区域注意力未充分训练增加AntiGlare增强样本比例
小尺寸包装漏检浅层特征提取不足在Backbone第2层后添加SE模块
同类缺陷在不同光照下漏检颜色空间泛化能力弱在HSV空间做随机扰动增强

6.2 精度提升技巧

  1. 困难样本挖掘:每训练5个epoch后,用当前模型在验证集上推理,选取loss最高的100个样本加入训练集
  2. 测试时增强(TTA):推理时对输入图像做水平翻转、90°旋转等变换,取检测结果并集
  3. 模型集成:将YOLOv8s与YOLOv8m模型的结果做加权融合,权重通过网格搜索确定

这套系统在实际产线中表现出色,但要注意定期更新数据。我们发现每6个月需要补充约2000张新样本,以适应包装设计变更和新型缺陷模式。