1. 项目背景与核心思路
在计算机视觉领域,预训练模型已经成为解决各类图像识别任务的标配方案。但直接使用预训练模型进行迁移学习时,往往会遇到特征提取不够精细、关键区域关注不足的问题。这个项目尝试在经典预训练模型架构中嵌入CBAM(Convolutional Block Attention Module)注意力模块,通过空间和通道双重注意力机制提升模型对关键特征的捕捉能力。
我选择这个方案是因为在实际工业质检项目中,发现传统预训练模型对微小缺陷的识别效果不稳定。通过引入注意力机制,可以让模型更聚焦于图像的关键区域,比如产品表面的划痕或污渍。这种改进在医疗影像分析、自动驾驶感知等需要精细特征提取的场景中同样适用。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 关键技术解析
2.1 预训练模型选型
当前主流的预训练模型主要分为几个流派:
- ResNet系列:结构简单稳定,适合作为基础骨架
- EfficientNet:参数量优化出色,适合资源受限场景
- Vision Transformer:长距离依赖建模能力强,但计算成本高
经过对比测试,最终选择ResNet50作为基础架构。原因有三:
- 成熟的图像特征提取能力,在ImageNet上有稳定表现
- 清晰的残差连接结构,便于插入注意力模块
- 社区支持完善,便于后续调试和优化
实际部署时发现,ResNet34在小数据集上容易过拟合,而ResNet101的计算成本与精度提升不成正比。ResNet50在大多数场景下取得了最佳平衡。
2.2 CBAM模块实现细节
CBAM模块包含两个串联的子模块:
-
通道注意力模块(CAM)
- 通过全局平均池化和最大池化获取通道统计信息
- 使用共享MLP生成通道权重
- 公式:$M_c(F) = \sigma(MLP(AvgPool(F)) + MLP(MaxPool(F)))$
-
空间注意力模块(SAM)
- 沿通道维度应用平均池化和最大池化
- 卷积层生成空间权重图
- 公式:$M_s(F) = \sigma(f^{7×7}([AvgPool(F); MaxPool(F)]))$
在代码实现时需要注意:
python复制class CBAM(nn.Module):
def __init__(self, ch
