Keras版Faster-RCNN代码学习(Batch Normalization)2

本文是Keras版Faster R-CNN系列的第二部分,重点讨论Batch Normalization的作用和原理。Batch Normalization通过加速训练、控制过拟合以及增强网络对权重初始化的不敏感性,提高了模型的性能。在Keras中,它被用于调整卷积层的激活值,使其均值接近0,标准差接近1。此外,文中还提供了一个名为`FixedBatchNormalization.py`的示例,展示了如何在ResNet中应用固定的Batch Normalization。

Keras版Faster-RCNN代码学习(IOU,RPN)1
Keras版Faster-RCNN代码学习(Batch Normalization)2
Keras版Faster-RCNN代码学习(loss,xml解析)3
Keras版Faster-RCNN代码学习(roipooling resnet/vgg)4
Keras版Faster-RCNN代码学习(measure_map,train/test)5

Batch Normalization介绍

参考文献:Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift
参考知乎魏秀参给出的答案:深度学习中 Batch Normalization为什么效果好?

根据我的了解,Batch Normalization在卷积神经网络中,是对每个核卷积出来的一个batchsize中所有图片的feature map上的值进行归一化后再进行激活,所以叫批标准化。
【Tips】BN层的作用
1)加速收敛 (2)控制过拟合,可以少用或不用Dropout和正则 (3)降低网络对初始化权重不敏感 (4)允许使用较大的学习率
可以把它看做一个自适应重参数化的方法,主要解决训练非常深的模型的困难。当然也不是万能的,对RNN来说,Batch Normalization并没有起到好的效果。
主要是把BN变换,置于网络激活函数层的前面。在没有采用BN的时候,激活函数层是这样的:

Y=g(WX+b)

也就是我们希望一个激活函数,比如sigmoid函数s(x)的自变量x是经过BN处理后的结果。因此前向传导的计算公式就应该是:

Y=g(BN(WX+b))

其实因为偏置参数b经过BN层后其实是没有用的,最后也会被均值归一化,当然BN层后面还有个β参数作为偏置项,所以b这个参数就可以不用了。因此最后把BN层+激活函数层就变成了:

Y=g(BN(WX))

Keras中的Batch Normalization

keras.layers.normalization.BatchNormalization(axis=-1, momentum=0.99, epsilon=0.001, center=True, scale=True, beta_initializer='zeros
### Faster R-CNN 的 GFLOPS 计算 在深度学习模型中,GFLOPS(每秒十亿次浮点运算)是一个衡量计算复杂度的重要指标。对于Faster R-CNN而言,其主要组成部分包括特征提取网络、区域提议网络(RPN)、感兴趣区域池化层以及分类器。 #### 特征提取阶段的GFLOPS计算 假设使用ResNet-50作为骨干网,在输入图像大小为\(H \times W\)的情况下: \[ \text{Feature Extraction GFLOPS} = H \cdot W \cdot C_{in} \cdot C_{out} \cdot K_h \cdot K_w / T_f \] 其中, - \(C_{in}\) 是输入通道数; - \(C_{out}\) 是输出通道数; - \(K_h, K_w\) 表示卷积核的高度宽度; - \(T_f\) 代表步幅[^1]。 #### 区域提议网络(RPN)的GFLOPS贡献 RPN负责生成候选框,通常会引入额外的计算开销。这部分可以近似表示为: \[ \text{RPN GFLOPS} = N_p \cdot (\sum_k {D_k})\] 这里, - \(N_p\) 表示锚点数量; - \(\sum_k D_k\) 总结了所有用于预测边界框回归参数所需的维度总。 #### RoI Pooling 层的影响 RoI Pooling操作本身涉及较少的乘法累加(MAC),因此对整体GFLOPS影响有限;然而它决定了后续全连接层或更复杂的头部结构处理多少个独立实例。 #### 分类与回归分支 最后两个模块执行目标类别识别及精修建议窗口位置的任务,它们各自的MACs取决于所选架构设计细节,比如MLP层数目及其单元数目等特性。 ```python def calculate_gflops(image_height, image_width, input_channels, output_channels, kernel_size=(3, 3), stride=1): """Calculate the approximate GFLOPs for feature extraction.""" kh, kw = kernel_size flops_per_pixel = 2 * input_channels * output_channels * kh * kw / stride ** 2 total_pixels = image_height * image_width gflops = (total_pixels * flops_per_pixel) / 1e9 return round(gflops, 2) gflops_feature_extraction = calculate_gflops(600, 800, 3, 256) print(f"Approximate Feature Extraction GFLOPs: {gflops_feature_extraction}") ``` ### Optimizations Techniques 为了提高效率并减少资源消耗,可以通过多种方式来优化Faster R-CNN中的GFLOPS利用率: - 使用混合精度训练(Half Precision Training)[^1]。 - 应用矢量化技术(vectorization techniques),例如利用SIMD指令集加速矩阵运算。 - 实施循环展开(loop unrolling)策略以降低控制流带来的性能损失。 - 对于大规模数据集上的分布式训练环境,则考虑采用多GPU同步批量归一化(multi-GPU synchronized batch normalization)
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值