def obtain_arc()

in lib/models/resnet_video.py [0:0]


def obtain_arc(arc_type):
    """
    Architecture definition.
    This function defines the temporal kernel radius and temporal strides for
    each layer in a ResNet.
    For example, use_temp_convs = 1 stands for a temporal kernel size of 3.
    In ResNet50, it has (3, 4, 6, 3) blocks in conv2, 3, 4, 5.
    so the lengths of the corresponding lists are (3, 4, 6, 3).
    """
    pool_stride = 1

    # C2D, ResNet50.
    if arc_type == 1:
        use_temp_convs_1 = [0]
        temp_strides_1 = [1]
        use_temp_convs_2 = [0, 0, 0]
        temp_strides_2 = [1, 1, 1]
        use_temp_convs_3 = [0, 0, 0, 0]
        temp_strides_3 = [1, 1, 1, 1]
        use_temp_convs_4 = [0, ] * 6
        temp_strides_4 = [1, ] * 6
        use_temp_convs_5 = [0, 0, 0]
        temp_strides_5 = [1, 1, 1]

        pool_stride = int(cfg.TRAIN.VIDEO_LENGTH / 2)

    # I3D, ResNet50.
    if arc_type == 2:
        use_temp_convs_1 = [2]
        temp_strides_1 = [1]
        use_temp_convs_2 = [1, 1, 1]
        temp_strides_2 = [1, 1, 1]
        use_temp_convs_3 = [1, 0, 1, 0]
        temp_strides_3 = [1, 1, 1, 1]
        use_temp_convs_4 = [1, 0, 1, 0, 1, 0]
        temp_strides_4 = [1, 1, 1, 1, 1, 1]
        use_temp_convs_5 = [0, 1, 0]
        temp_strides_5 = [1, 1, 1]

        pool_stride = int(cfg.TRAIN.VIDEO_LENGTH / 2)

    # C2D, ResNet101.
    if arc_type == 3:
        use_temp_convs_1 = [0]
        temp_strides_1 = [1]
        use_temp_convs_2 = [0, 0, 0]
        temp_strides_2 = [1, 1, 1]
        use_temp_convs_3 = [0, 0, 0, 0]
        temp_strides_3 = [1, 1, 1, 1]
        use_temp_convs_4 = [0, ] * 23
        temp_strides_4 = [1, ] * 23
        use_temp_convs_5 = [0, 0, 0]
        temp_strides_5 = [1, 1, 1]

        pool_stride = int(cfg.TRAIN.VIDEO_LENGTH / 2)

    # I3D, ResNet101.
    if arc_type == 4:
        use_temp_convs_1 = [2]
        temp_strides_1 = [1]
        use_temp_convs_2 = [1, 1, 1]
        temp_strides_2 = [1, 1, 1]
        use_temp_convs_3 = [1, 0, 1, 0]
        temp_strides_3 = [1, 1, 1, 1]
        use_temp_convs_4 = []
        for i in range(23):
            if i % 2 == 0:
                use_temp_convs_4.append(1)
            else:
                use_temp_convs_4.append(0)

        temp_strides_4 = [1, ] * 23
        use_temp_convs_5 = [0, 1, 0]
        temp_strides_5 = [1, 1, 1]

        pool_stride = int(cfg.TRAIN.VIDEO_LENGTH / 2)

    use_temp_convs_set = [
        use_temp_convs_1,
        use_temp_convs_2,
        use_temp_convs_3,
        use_temp_convs_4,
        use_temp_convs_5
    ]
    temp_strides_set = [
        temp_strides_1,
        temp_strides_2,
        temp_strides_3,
        temp_strides_4,
        temp_strides_5
    ]
    return use_temp_convs_set, temp_strides_set, pool_stride