Faster R-CNN中VGG_CNN_M_1024模型的训练网络结构解析
2025-07-07 02:10:11作者:申梦珏Efrain
概述
本文将深入解析Faster R-CNN目标检测框架中使用的VGG_CNN_M_1024模型的训练网络结构(train.prototxt)。这个网络结构是基于VGG的变种模型,专门为PASCAL VOC数据集设计,包含21个类别(20个物体类别+背景)。
网络结构详解
1. 数据输入层
layer {
name: 'data'
type: 'Python'
top: 'data'
top: 'rois'
top: 'labels'
top: 'bbox_targets'
top: 'bbox_inside_weights'
top: 'bbox_outside_weights'
python_param {
module: 'roi_data_layer.layer'
layer: 'RoIDataLayer'
param_str: "'num_classes': 21"
}
}
数据输入层使用Python层实现,负责提供以下数据:
- 原始图像数据(data)
- 候选区域(rois)
- 类别标签(labels)
- 边界框回归目标(bbox_targets)
- 边界框内部权重(bbox_inside_weights)
- 边界框外部权重(bbox_outside_weights)
2. 卷积特征提取部分
网络采用经典的卷积神经网络结构提取图像特征:
-
第一卷积层(conv1)
- 96个7×7卷积核,步长2
- 使用ReLU激活函数
- 局部响应归一化(LRN)
- 3×3最大池化,步长2
-
第二卷积层(conv2)
- 256个5×5卷积核,步长2
- 使用ReLU激活函数
- 局部响应归一化(LRN)
- 3×3最大池化,步长2
-
后续卷积层(conv3-conv5)
- 512个3×3卷积核
- 使用ReLU激活函数
- 无池化层
3. ROI池化层
layer {
name: "roi_pool5"
type: "ROIPooling"
bottom: "conv5"
bottom: "rois"
top: "pool5"
roi_pooling_param {
pooled_w: 6
pooled_h: 6
spatial_scale: 0.0625 # 1/16
}
}
ROI池化层是Faster R-CNN的关键组件,它将不同大小的候选区域(ROIs)池化为固定大小(6×6)的特征图。空间比例因子0.0625表示特征图相对于原始图像缩小了16倍。
4. 全连接部分
网络包含两个全连接层:
- fc6层:4096个神经元
- fc7层:1024个神经元(这也是模型名称VGG_CNN_M_1024的由来)
每个全连接层后都跟随:
- ReLU激活函数
- Dropout层(丢弃率0.5)防止过拟合
5. 输出层
网络有两个并行输出分支:
-
分类分支(cls_score)
- 21个输出(对应PASCAL VOC的20类+背景)
- 使用SoftmaxWithLoss计算分类损失
-
边界框回归分支(bbox_pred)
- 84个输出(21类×4个坐标值)
- 使用SmoothL1Loss计算回归损失
训练参数设置
网络中的每一层都包含学习率乘数(lr_mult)和衰减乘数(decay_mult)参数:
-
卷积层参数:
- 第一卷积层参数固定(lr_mult: 0)
- 其他卷积层:权重学习率乘数1,偏置学习率乘数2
-
全连接层参数:
- 权重学习率乘数1
- 偏置学习率乘数2
-
权重初始化:
- 分类分支:高斯初始化(std=0.01)
- 回归分支:高斯初始化(std=0.001)
损失函数
网络使用多任务损失函数:
- 分类损失(loss_cls):SoftmaxWithLoss
- 边界框回归损失(loss_bbox):SmoothL1Loss
两种损失的权重均为1,在训练过程中同时优化这两个目标。
总结
VGG_CNN_M_1024是Faster R-CNN框架中一个中等大小的模型,相比原始的VGG16模型,它在保持较好性能的同时减少了参数量。该网络结构体现了Faster R-CNN的核心思想:通过卷积网络提取特征,ROI池化处理不同大小的候选区域,最后通过两个分支同时完成分类和定位任务。