对于带孔带孔卷积(atrous convolution)rate的计算

在这里我们都知道感受野的含义,同时也知道带孔卷积是为了在不缩小feature  map 的大小的同时保持感受野大小不变,在这里我们要明确的说明感受野大小不变是怎么达到的,我们已一个3 layer 的net 来进行说明:

对于带孔带孔卷积(atrous convolution)rate的计算_第1张图片

rate 是为了layer 能够保证原有的感受野,所以rate 的决定是由上一层的stride(stride >1 的一个作用就是增大下层的感受野)

rate的计算方式是rate *= stride,rate 的初始值为rate =1,如上图:layer 1 已经达到了output_stride的要求,接下来的layer2 feature map 大小应该保持不变,所以layer1 经过 rate=1的conv 得到layer 2,然后再通过公式计算得到layer 3 feature map 经过conv的rate,rate = rate * stride (layer 1->layer2 )=1*2=2

源代码如下:

 # than the target output_stride.
 current_stride = 1

 # The atrous convolution rate parameter.
 rate = 1
'''省略部分代码'''
 if output_stride is not None and current_stride == output_stride:
            net = block.unit_fn(net, rate=rate, **dict(unit, stride=1))
            rate *= unit.get('stride', 1)

          else:
            net = block.unit_fn(net, rate=1, **unit)
            current_stride *= unit.get('stride', 1)

 

你可能感兴趣的:(tensorflow)