深入解析py-faster-rcnn中的ZF测试网络结构
2025-07-07 02:13:24作者:凌朦慧Richard
概述
本文将详细解析py-faster-rcnn项目中使用的ZF(Zeiler and Fergus)网络在测试阶段的网络结构定义文件(test.prototxt)。这个文件定义了目标检测模型在推理阶段的数据流向和层结构,是理解Faster R-CNN实现细节的重要切入点。
网络输入部分
input: "data"
input_shape {
dim: 1
dim: 3
dim: 224
dim: 224
}
input: "rois"
input_shape {
dim: 1 # to be changed on-the-fly to num ROIs
dim: 5 # [batch ind, x1, y1, x2, y2] zero-based indexing
}
网络定义了两个输入层:
- data输入:处理原始图像数据,形状为1×3×224×224,表示批大小为1、3通道、224×224分辨率的图像
- rois输入:接收区域建议(Region of Interest),形状为1×5,其中5维表示[批次索引, x1, y1, x2, y2],使用零基坐标
值得注意的是,rois的第一个维度会在运行时根据实际ROI数量动态调整。
卷积特征提取部分(conv1-conv5)
ZF网络的前五层卷积构成了特征提取器,这部分结构如下:
conv1层
- 7×7卷积核,输出96个特征图
- 步长为2,padding为3
- 后接ReLU激活和LRN(Local Response Normalization)归一化
- 最大池化层(3×3核,步长2)
layer {
name: "conv1"
type: "Convolution"
bottom: "data"
top: "conv1"
convolution_param {
num_output: 96
kernel_size: 7
pad: 3
stride: 2
}
}
conv2层
- 5×5卷积核,输出256个特征图
- 步长为2,padding为2
- 同样后接ReLU、LRN和最大池化
conv3-conv5层
- 采用更小的3×3卷积核
- conv3输出384个特征图
- conv4输出384个特征图
- conv5输出256个特征图
- 这些层都使用步长1和padding 1,保持空间分辨率不变
这种设计遵循了经典的卷积神经网络架构,随着网络深度增加,特征图数量增多而空间分辨率降低。
RCNN部分(区域分类与回归)
这部分实现了Faster R-CNN的核心创新之一:区域建议网络(RPN)生成候选区域后,对每个区域进行分类和边界框回归。
ROI Pooling层
layer {
name: "roi_pool_conv5"
type: "ROIPooling"
bottom: "conv5"
bottom: "rois"
top: "roi_pool_conv5"
roi_pooling_param {
pooled_w: 6
pooled_h: 6
spatial_scale: 0.0625 # 1/16
}
}
- 将不同大小的ROI区域池化为固定大小(6×6)
- spatial_scale=0.0625(1/16)表示相对于输入图像,特征图缩小了16倍
全连接层
- fc6和fc7都是4096维的全连接层
- 每层后接ReLU激活和Dropout(测试时Dropout实际不生效)
layer {
name: "fc6"
type: "InnerProduct"
bottom: "roi_pool_conv5"
top: "fc6"
inner_product_param {
num_output: 4096
}
}
输出层
- cls_score:21维全连接层,对应PASCAL VOC的20类+背景类
- bbox_pred:84维全连接层,为每个类别预测边界框偏移量(4×21)
- cls_prob:对cls_score应用Softmax得到类别概率
layer {
name: "cls_score"
type: "InnerProduct"
bottom: "fc7"
top: "cls_score"
inner_product_param {
num_output: 21
}
}
技术要点解析
-
测试与训练的区别:测试网络不包含损失层,Dropout层在测试时不起作用(scale_train: false)
-
多任务输出:同时输出类别概率和边界框回归值,体现了Faster R-CNN的多任务学习特性
-
特征共享:整个网络共享卷积特征提取器,RCNN部分处理的是共享特征图上提取的ROI
-
尺度处理:通过spatial_scale参数将原始图像坐标映射到特征图坐标
总结
py-faster-rcnn中的ZF测试网络结构展示了Faster R-CNN模型在推理阶段的工作流程:首先通过卷积网络提取图像特征,然后对RPN生成的候选区域进行ROI Pooling,最后通过全连接网络完成分类和回归。这种设计实现了端到端的目标检测,同时保持了较高的效率和准确性。理解这一结构对于深入掌握Faster R-CNN算法原理和实现细节至关重要。