Faster R-CNN中VGG_CNN_M_1024模型的训练网络结构解析
2025-07-07 02:12:25作者:卓艾滢Kingsley
模型概述
Faster R-CNN是目标检测领域的经典算法,而VGG_CNN_M_1024是该框架中使用的一个中等规模卷积神经网络模型。本文将从技术角度详细解析其训练网络结构(train.prototxt)的设计原理和实现细节。
网络整体架构
该模型采用端到端(end-to-end)的训练方式,主要由以下几个部分组成:
- 基础卷积网络(特征提取器)
- 区域建议网络(RPN)
- 感兴趣区域池化(RoI Pooling)
- 分类和回归网络
基础卷积网络
基础网络采用VGG_CNN_M_1024结构,包含5个卷积层和2个全连接层:
# 第一卷积层
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
param { lr_mult: 0 } # 固定预训练权重
convolution_param {
num_output: 96
kernel_size: 7
stride: 2
}
}
特征提取部分的特点:
- 前两层卷积后接LRN(局部响应归一化)层
- 使用较大的卷积核(7x7,5x5)和步长(2)快速降低特征图尺寸
- 固定前两层的学习率(lr_mult=0),保持预训练权重不变
区域建议网络(RPN)
RPN是Faster R-CNN的核心创新,用于生成候选区域:
layer {
name: "rpn_conv/3x3"
type: "Convolution"
bottom: "conv5"
top: "rpn/output"
convolution_param {
num_output: 256 # 中间特征维度
kernel_size: 3 pad: 1 stride: 1
}
}
RPN关键组件:
- 3x3卷积生成256维特征
- 两个1x1卷积分别输出分类得分(rpn_cls_score)和边界框回归(rpn_bbox_pred)
- AnchorTargetLayer生成训练目标
- 使用SoftmaxWithLoss和SmoothL1Loss进行多任务训练
感兴趣区域处理
从RPN生成的候选区域经过以下处理:
- ProposalLayer筛选高质量建议框
- ProposalTargetLayer为每个RoI分配标签和回归目标
- RoIPooling将不同大小的区域统一为6x6特征图
layer {
name: "roi_pool5"
type: "ROIPooling"
roi_pooling_param {
pooled_w: 6
pooled_h: 6
spatial_scale: 0.0625 # 1/16
}
}
分类与回归网络
最后的全连接网络完成两个任务:
-
分类网络(fc6,fc7,cls_score)
- 输出21类得分(PASCAL VOC 20类+背景)
- 使用SoftmaxWithLoss计算分类损失
-
回归网络(bbox_pred)
- 输出84维向量(21类×4个坐标偏移)
- 使用SmoothL1Loss计算回归损失
layer {
name: "cls_score"
type: "InnerProduct"
inner_product_param {
num_output: 21
weight_filler { type: "gaussian" std: 0.01 }
}
}
训练策略
-
多任务损失联合训练:
- RPN分类损失(rpn_loss_cls)
- RPN回归损失(rpn_loss_bbox)
- 最终分类损失(loss_cls)
- 最终回归损失(loss_bbox)
-
学习率策略:
- 基础网络底层固定(lr_mult=0)
- 新增层使用较高学习率(lr_mult=1, bias_lr_mult=2)
-
正则化:
- Dropout层(drop6, drop7)防止过拟合
- 权重使用高斯初始化
总结
该训练网络结构体现了Faster R-CNN的几个关键设计思想:
- 共享卷积特征计算
- 端到端的联合训练
- 多任务学习框架
- 高效的区域建议机制
理解这个网络结构对于掌握Faster R-CNN的实现原理和进行模型调优具有重要意义。