工具包Tools——feature map size计算工具
def map_size(size, k, s=1, p=0): # 计算一层的size变化
new_size = (size - k + 2 * p) / s + 1
return int(new_size)
def feature_map_size(size, kernel_size: list, stride: list, padding: list = None):
"""
:param size: 最开始的输入尺寸
:param kernel_size: 所有特征层的 kernel 的尺寸 列表
:param stride: 所有特征层的步距
:param padding: 所有特征层的padding填充
:return:
"""
size_list = [size]
if padding is None:
padding = []
for _ in range(len(kernel_size)):
padding.append(0)
assert len(kernel_size) == len(stride) == len(padding), 'kernel_size, stride or padding length do not equal.'
for i, k in enumerate(kernel_size):
size = map_size(size, k, stride[i], padding[i])
size_list.append(size)
print('feature map size is :', size_list)
for i, v in enumerate(size_list):
print('第%3d 个conv or Maxpool的尺寸为: %3d' % (i, v))
# 应用示例
kernel_size = [11, 3, 5, 3, 3, 3, 3, 3]
stride = [2, 2, 1, 2, 1, 1, 1, 1]
feature_map_size(255, kernel_size, stride)
输出:
"""
feature map size is : [255, 123, 61, 57, 28, 26, 24, 22, 20]
第 0 个conv or Maxpool的尺寸为: 255
第 1 个conv or Maxpool的尺寸为: 123
第 2 个conv or Maxpool的尺寸为: 61
第 3 个conv or Maxpool的尺寸为: 57
第 4 个conv or Maxpool的尺寸为: 28
第 5 个conv or Maxpool的尺寸为: 26
第 6 个conv or Maxpool的尺寸为: 24
第 7 个conv or Maxpool的尺寸为: 22
第 8 个conv or Maxpool的尺寸为: 20
"""