最近研究SSD代码时,发现在Conv4_3特征层后,进行了L2 Norm 的处理,最后研究了一下。
首先介绍一下L2 Norm,其实很简单,就是把所有值平方后加起来,求根以后当分母,然后每个数当分子,进行求解, L2 Regularization and Batch Norm 详细介绍了他的不同
但是简而言之,L2 Norm 是在channel上进行求平均, 而batch_norm 是对=[batch,higth,width]进行求平均


至于为什么要用L2Normal,原作者说conv4_3和其他特种层不一样,有这不同的scale
That was discovered in my other paper (ParseNet) that conv4_3 has different scale from other layers. That is why I add L2 normalization for conv4_3 only.
然后看了不同版本的SSD代码,主要有以下几种实现方法:
# 1、tensorflow,新建一个layer
# 自定义layer层,会有正向传播,和反向传播
class L2Normalization(Layer):
"""
在深度神经网络中,偶尔会出现多个量纲不同的向量拼接在一起的情况,
此时就可以使用L2归一化统一拼接后的向量的量纲,使得网络能够快速收敛。
"""
def __init__(self, gamma_init=20, **kwargs):
self.axis = 3
self.gamma_init = gamma_init
super(L2Normalization, self).__init__(**kwargs)
def build(self, input_shape):
self.input_spec =</

本文深入探讨了SSD目标检测模型中L2Norm的使用,解释了其在conv4_3特征层的必要性和作用。通过对比L2Regularization和BatchNorm,阐述了L2Norm的独特之处,并提供了四种不同实现方式的代码示例。
最低0.47元/天 解锁文章
3万+

被折叠的 条评论
为什么被折叠?



