arch_settings = {
18: (BasicBlock3d, (2, 2, 2, 2)),
34: (BasicBlock3d, (3, 4, 6, 3)),
50: (Bottleneck3d, (3, 4, 6, 3)),
101: (Bottleneck3d, (3, 4, 23, 3)),
152: (Bottleneck3d, (3, 8, 36, 3))
}
def __init__(self,
depth=50,
pretrained=None,
stage_blocks=None,
pretrained2d=True,
in_channels=3,
num_stages=4,
base_channels=64,
out_indices=(3, ),
spatial_strides=(1, 2, 2, 2),
temporal_strides=(1, 1, 1, 1),
conv1_kernel=(3, 7, 7),
conv1_stride=(1, 2),
pool1_stride=(1, 2),
advanced=False,
frozen_stages=-1,
inflate=(1, 1, 1, 1),
inflate_style='3x1x1',
conv_cfg=dict(type='Conv3d'),
norm_cfg=dict(type='BN3d', requires_grad=True),
act_cfg=dict(type='ReLU', inplace=True),
norm_eval=False,
zero_init_residual=True):
这个 arch_settings 字典为不同深度的 ResNet 模型提供了标准的残差块数量配置。
当 stage_blocks 参数被设置为 None 时,表示使用 arch_settings 中为当前 depth 设置的默认配置。也就是说,如果你传入一个 ResNet50 模型(depth=50),那么 stage_blocks 参数会被自动设置为 (3, 4, 6, 3)。
但是如果你想覆盖这个默认配置,可以手动传入一个 4 元素的元组或列表作为 stage_blocks 的值。这样就可以自定义每个阶段使用的残差块数量,而不受 arch_settings 的限制。
总之,stage_blocks 的默认值 None 表示使用 arch_settings 中预定义的标准配置,如果需要自定义可以通过设置这个参数来实现。