<gh_stars>10-100
'''This module contains common schemes'''

from markov.architecture.constants import SchemeInfo, Input, ActivationFunctions

# Default network
DEFAULT_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                                 [64, 4, 2],
                                                                                 [64, 3, 1]],
                                               SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                                               SchemeInfo.BN_INFO_CONV.value: [False,
                                                                               ActivationFunctions.RELU.value,
                                                                               0.0],
                                               SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                ActivationFunctions.RELU.value,
                                                                                0.0],
                                               SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

DEFAULT_MIDDLEWARE = {SchemeInfo.CONV_INFO_LIST.value: [],
                      SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512],
                      SchemeInfo.BN_INFO_CONV.value: [False, ActivationFunctions.RELU.value, 0.0],
                      SchemeInfo.BN_INFO_DENSE.value: [False, ActivationFunctions.RELU.value, 0.0],
                      SchemeInfo.IS_FIRST_LAYER_BN.value: False}

# Shallow network with left and stereo (Left + right)
SHALLOW_LEFT_STEREO_INPUT_EMBEDDER = {
    Input.LEFT_CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                [64, 4, 2],
                                                                [64, 3, 1]],
                              SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                              SchemeInfo.BN_INFO_CONV.value: [False,
                                                              ActivationFunctions.RELU.value,
                                                              0.0],
                              SchemeInfo.BN_INFO_DENSE.value: [False,
                                                               ActivationFunctions.RELU.value,
                                                               0.0],
                              SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                         SchemeInfo.BN_INFO_CONV.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.0],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

# Shallow network with left and stereo (Left + right) and batch norms
SHALLOW_LEFT_STEREO_WITH_BN_INPUT_EMBEDDER = {
    Input.LEFT_CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                [64, 4, 2],
                                                                [64, 3, 1]],
                              SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                              SchemeInfo.BN_INFO_CONV.value: [True,
                                                              ActivationFunctions.RELU.value,
                                                              0.0],
                              SchemeInfo.BN_INFO_DENSE.value: [False,
                                                               ActivationFunctions.RELU.value,
                                                               0.5],
                              SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                         SchemeInfo.BN_INFO_CONV.value: [True,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.5],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

# Shallow network with only stereo
SHALLOW_STEREO_INPUT_EMBEDDER = {
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                         SchemeInfo.BN_INFO_CONV.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.0],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False}
}

# Default lidar network without batch norms
SHALLOW_LIDAR_INPUT_EMBEDDER = {
    Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                         SchemeInfo.BN_INFO_CONV.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.0],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.LIDAR.value: {SchemeInfo.CONV_INFO_LIST.value: [],
                        SchemeInfo.DENSE_LAYER_INFO_LIST.value: [32, 32],
                        SchemeInfo.BN_INFO_CONV.value: [False,
                                                        ActivationFunctions.RELU.value,
                                                        0.0],
                        SchemeInfo.BN_INFO_DENSE.value: [True,
                                                         ActivationFunctions.RELU.value,
                                                         0.5],
                        SchemeInfo.IS_FIRST_LAYER_BN.value: False}
}

# Default lidar network with stereo left
SHALLOW_LIDAR_SETEREO_LEFT_INPUT_EMBEDDER = {
    Input.LEFT_CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                [64, 4, 2],
                                                                [64, 3, 1]],
                              SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                              SchemeInfo.BN_INFO_CONV.value: [False,
                                                              ActivationFunctions.RELU.value,
                                                              0.3],
                              SchemeInfo.BN_INFO_DENSE.value: [False,
                                                               ActivationFunctions.RELU.value,
                                                               0.0],
                              SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                         SchemeInfo.BN_INFO_CONV.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.0],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.LIDAR.value: {SchemeInfo.CONV_INFO_LIST.value: [],
                        SchemeInfo.DENSE_LAYER_INFO_LIST.value: [32, 32],
                        SchemeInfo.BN_INFO_CONV.value: [False,
                                                        ActivationFunctions.RELU.value,
                                                        0.0],
                        SchemeInfo.BN_INFO_DENSE.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.5],
                        SchemeInfo.IS_FIRST_LAYER_BN.value: False}
}

# Default lidar network, use BN_SCHEME when creating the embedder, embedder activation should be
# NONE
SHALLOW_LIDAR_BN_INPUT_EMBEDDER = {
    Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [32, 4, 2],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512, 512],
                         SchemeInfo.BN_INFO_CONV.value: [True,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.5],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.LIDAR.value: {SchemeInfo.CONV_INFO_LIST.value: [],
                        SchemeInfo.DENSE_LAYER_INFO_LIST.value: [256, 256],
                        SchemeInfo.BN_INFO_CONV.value: [False,
                                                        ActivationFunctions.RELU.value,
                                                        0.0],
                        SchemeInfo.BN_INFO_DENSE.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.5],
                        SchemeInfo.IS_FIRST_LAYER_BN.value: False}
}

SHALLOW_LIDAR_MIDDLEWARE = {SchemeInfo.CONV_INFO_LIST.value: [],
                            SchemeInfo.DENSE_LAYER_INFO_LIST.value: [256, 128],
                            SchemeInfo.BN_INFO_CONV.value: [False, ActivationFunctions.RELU.value, 0.0],
                            SchemeInfo.BN_INFO_DENSE.value: [False, ActivationFunctions.RELU.value, 0.5],
                            SchemeInfo.IS_FIRST_LAYER_BN.value: False}

# Deep Scheme, use default middle ware, use BN_SCHEME when creating the embedder.
# embedder activation should be RELU
DEEP_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 5, 2],
                                                                                   [32, 3, 1],
                                                                                   [64, 3, 2],
                                                                                   [64, 3, 1]],
                                            SchemeInfo.DENSE_LAYER_INFO_LIST.value: [64],
                                            SchemeInfo.BN_INFO_CONV.value: [True,
                                                                            ActivationFunctions.TANH.value,
                                                                            0.0],
                                            SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                             ActivationFunctions.TANH.value,
                                                                             0.3],
                                            SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

DEEP_LEFT_STEREO_INPUT_EMBEDDER = {
    Input.LEFT_CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                [64, 4, 2],
                                                                [64, 3, 1]],
                              SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                              SchemeInfo.BN_INFO_CONV.value: [False,
                                                              ActivationFunctions.RELU.value,
                                                              0.0],
                              SchemeInfo.BN_INFO_DENSE.value: [False,
                                                               ActivationFunctions.RELU.value,
                                                               0.0],
                              SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 1],
                                                           [64, 3, 2],
                                                           [64, 3, 1],
                                                           [128, 3, 2],
                                                           [128, 3, 1]],
                        SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                        SchemeInfo.BN_INFO_CONV.value: [False,
                                                        ActivationFunctions.RELU.value,
                                                        0.0],
                        SchemeInfo.BN_INFO_DENSE.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                        SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

DEEP_STEREO_INPUT_EMBEDDER = {
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 1],
                                                           [64, 3, 2],
                                                           [64, 3, 1],
                                                           [128, 3, 2],
                                                           [128, 3, 1]],
                        SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                        SchemeInfo.BN_INFO_CONV.value: [False,
                                                        ActivationFunctions.RELU.value,
                                                        0.0],
                        SchemeInfo.BN_INFO_DENSE.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                        SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

#VGG like Scheme, use BN_SCHEME when creating the embedder, embedder activation should be
# NONE
VGG_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                                  [32, 4, 2],
                                                                                  [64, 4, 2],
                                                                                  [64, 3, 1]],
                                                SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512, 512],
                                                SchemeInfo.BN_INFO_CONV.value: [True,
                                                                                ActivationFunctions.RELU.value,
                                                                                0.0],
                                                SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                 ActivationFunctions.RELU.value,
                                                                                 0.5],
                                                SchemeInfo.IS_FIRST_LAYER_BN.value: False}}


VGG_LEFT_STEREO_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                                  [32, 4, 2],
                                                                                  [64, 4, 2],
                                                                                  [64, 3, 1]],
                                                SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512, 512],
                                                SchemeInfo.BN_INFO_CONV.value: [True,
                                                                                ActivationFunctions.RELU.value,
                                                                                0.0],
                                                SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                 ActivationFunctions.RELU.value,
                                                                                 0.5],
                                                SchemeInfo.IS_FIRST_LAYER_BN.value: False},
                                  Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 1],
                                                                                             [64, 3, 2],
                                                                                             [64, 3, 1],
                                                                                             [128, 3, 2],
                                                                                             [128, 3, 1]],
                                                          SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                                                          SchemeInfo.BN_INFO_CONV.value: [False,
                                                                                          ActivationFunctions.RELU.value,
                                                                                          0.0],
                                                          SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                           ActivationFunctions.RELU.value,
                                                                                           0.0],
                                                          SchemeInfo.IS_FIRST_LAYER_BN.value: False}}


VGG_STEREO_INPUT_EMBEDDER = {Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 1],
                                                                                   [64, 3, 2],
                                                                                   [64, 3, 1],
                                                                                   [128, 3, 2],
                                                                                   [128, 3, 1]],
                                                SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                                                SchemeInfo.BN_INFO_CONV.value: [False,
                                                                                ActivationFunctions.RELU.value,
                                                                                0.0],
                                                SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                 ActivationFunctions.RELU.value,
                                                                                 0.0],
                                                SchemeInfo.IS_FIRST_LAYER_BN.value: False}}                                               


VGG_MIDDLEWARE = {SchemeInfo.CONV_INFO_LIST.value: [],
                  SchemeInfo.DENSE_LAYER_INFO_LIST.value: [256, 128],
                  SchemeInfo.BN_INFO_CONV.value: [False, ActivationFunctions.RELU.value, 0.0],
                  SchemeInfo.BN_INFO_DENSE.value: [False, ActivationFunctions.RELU.value, 0.5],
                  SchemeInfo.IS_FIRST_LAYER_BN.value: False}

# This archetecture was labled default 7
DEF7_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 2],
                                                                                   [32, 3, 1],
                                                                                   [64, 3, 2],
                                                                                   [64, 3, 1],
                                                                                   [128, 3, 2],
                                                                                   [128, 3, 1],
                                                                                   [256, 3, 2]],
                                                 SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512, 512],
                                                 SchemeInfo.BN_INFO_CONV.value: [True,
                                                                                 ActivationFunctions.RELU.value,
                                                                                 0.0],
                                                 SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                  ActivationFunctions.RELU.value,
                                                                                  0.5],
                                                 SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

DEF7_MIDDLEWARE = {SchemeInfo.CONV_INFO_LIST.value: [],
                   SchemeInfo.DENSE_LAYER_INFO_LIST.value: [256, 128],
                   SchemeInfo.BN_INFO_CONV.value: [False, ActivationFunctions.RELU.value, 0.0],
                   SchemeInfo.BN_INFO_DENSE.value: [False, ActivationFunctions.RELU.value, 0.5],
                   SchemeInfo.IS_FIRST_LAYER_BN.value: False}

# This archetecture was labled default 5
DEF5_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 2],
                                                                                   [32, 3, 1],
                                                                                   [64, 3, 2],
                                                                                   [64, 3, 1],
                                                                                   [128, 3, 2]],
                                                 SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512, 512],
                                                 SchemeInfo.BN_INFO_CONV.value: [True,
                                                                                 ActivationFunctions.RELU.value,
                                                                                 0.0],
                                                 SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                  ActivationFunctions.RELU.value,
                                                                                  0.5],
                                                 SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

DEF5_MIDDLEWARE = {SchemeInfo.CONV_INFO_LIST.value: [],
                   SchemeInfo.DENSE_LAYER_INFO_LIST.value: [256, 128],
                   SchemeInfo.BN_INFO_CONV.value: [False, ActivationFunctions.RELU.value, 0.0],
                   SchemeInfo.BN_INFO_DENSE.value: [False, ActivationFunctions.RELU.value, 0.5],
                   SchemeInfo.IS_FIRST_LAYER_BN.value: False}

'''This module contains common schemes'''

from markov.architecture.constants import SchemeInfo, Input, ActivationFunctions

# Default network
DEFAULT_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                                 [64, 4, 2],
                                                                                 [64, 3, 1]],
                                               SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                                               SchemeInfo.BN_INFO_CONV.value: [False,
                                                                               ActivationFunctions.RELU.value,
                                                                               0.0],
                                               SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                ActivationFunctions.RELU.value,
                                                                                0.0],
                                               SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

DEFAULT_MIDDLEWARE = {SchemeInfo.CONV_INFO_LIST.value: [],
                      SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512],
                      SchemeInfo.BN_INFO_CONV.value: [False, ActivationFunctions.RELU.value, 0.0],
                      SchemeInfo.BN_INFO_DENSE.value: [False, ActivationFunctions.RELU.value, 0.0],
                      SchemeInfo.IS_FIRST_LAYER_BN.value: False}

# Shallow network with left and stereo (Left + right)
SHALLOW_LEFT_STEREO_INPUT_EMBEDDER = {
    Input.LEFT_CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                [64, 4, 2],
                                                                [64, 3, 1]],
                              SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                              SchemeInfo.BN_INFO_CONV.value: [False,
                                                              ActivationFunctions.RELU.value,
                                                              0.0],
                              SchemeInfo.BN_INFO_DENSE.value: [False,
                                                               ActivationFunctions.RELU.value,
                                                               0.0],
                              SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                         SchemeInfo.BN_INFO_CONV.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.0],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

# Shallow network with left and stereo (Left + right) and batch norms
SHALLOW_LEFT_STEREO_WITH_BN_INPUT_EMBEDDER = {
    Input.LEFT_CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                [64, 4, 2],
                                                                [64, 3, 1]],
                              SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                              SchemeInfo.BN_INFO_CONV.value: [True,
                                                              ActivationFunctions.RELU.value,
                                                              0.0],
                              SchemeInfo.BN_INFO_DENSE.value: [False,
                                                               ActivationFunctions.RELU.value,
                                                               0.5],
                              SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                         SchemeInfo.BN_INFO_CONV.value: [True,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.5],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

# Shallow network with only stereo
SHALLOW_STEREO_INPUT_EMBEDDER = {
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                         SchemeInfo.BN_INFO_CONV.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.0],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False}
}

# Default lidar network without batch norms
SHALLOW_LIDAR_INPUT_EMBEDDER = {
    Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                         SchemeInfo.BN_INFO_CONV.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.0],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.LIDAR.value: {SchemeInfo.CONV_INFO_LIST.value: [],
                        SchemeInfo.DENSE_LAYER_INFO_LIST.value: [32, 32],
                        SchemeInfo.BN_INFO_CONV.value: [False,
                                                        ActivationFunctions.RELU.value,
                                                        0.0],
                        SchemeInfo.BN_INFO_DENSE.value: [True,
                                                         ActivationFunctions.RELU.value,
                                                         0.5],
                        SchemeInfo.IS_FIRST_LAYER_BN.value: False}
}

# Default lidar network with stereo left
SHALLOW_LIDAR_SETEREO_LEFT_INPUT_EMBEDDER = {
    Input.LEFT_CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                [64, 4, 2],
                                                                [64, 3, 1]],
                              SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                              SchemeInfo.BN_INFO_CONV.value: [False,
                                                              ActivationFunctions.RELU.value,
                                                              0.3],
                              SchemeInfo.BN_INFO_DENSE.value: [False,
                                                               ActivationFunctions.RELU.value,
                                                               0.0],
                              SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                         SchemeInfo.BN_INFO_CONV.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.0],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.LIDAR.value: {SchemeInfo.CONV_INFO_LIST.value: [],
                        SchemeInfo.DENSE_LAYER_INFO_LIST.value: [32, 32],
                        SchemeInfo.BN_INFO_CONV.value: [False,
                                                        ActivationFunctions.RELU.value,
                                                        0.0],
                        SchemeInfo.BN_INFO_DENSE.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.5],
                        SchemeInfo.IS_FIRST_LAYER_BN.value: False}
}

# Default lidar network, use BN_SCHEME when creating the embedder, embedder activation should be
# NONE
SHALLOW_LIDAR_BN_INPUT_EMBEDDER = {
    Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                           [32, 4, 2],
                                                           [64, 4, 2],
                                                           [64, 3, 1]],
                         SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512, 512],
                         SchemeInfo.BN_INFO_CONV.value: [True,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                         SchemeInfo.BN_INFO_DENSE.value: [False,
                                                          ActivationFunctions.RELU.value,
                                                          0.5],
                         SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.LIDAR.value: {SchemeInfo.CONV_INFO_LIST.value: [],
                        SchemeInfo.DENSE_LAYER_INFO_LIST.value: [256, 256],
                        SchemeInfo.BN_INFO_CONV.value: [False,
                                                        ActivationFunctions.RELU.value,
                                                        0.0],
                        SchemeInfo.BN_INFO_DENSE.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.5],
                        SchemeInfo.IS_FIRST_LAYER_BN.value: False}
}

SHALLOW_LIDAR_MIDDLEWARE = {SchemeInfo.CONV_INFO_LIST.value: [],
                            SchemeInfo.DENSE_LAYER_INFO_LIST.value: [256, 128],
                            SchemeInfo.BN_INFO_CONV.value: [False, ActivationFunctions.RELU.value, 0.0],
                            SchemeInfo.BN_INFO_DENSE.value: [False, ActivationFunctions.RELU.value, 0.5],
                            SchemeInfo.IS_FIRST_LAYER_BN.value: False}

# Deep Scheme, use default middle ware, use BN_SCHEME when creating the embedder.
# embedder activation should be RELU
DEEP_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 5, 2],
                                                                                   [32, 3, 1],
                                                                                   [64, 3, 2],
                                                                                   [64, 3, 1]],
                                            SchemeInfo.DENSE_LAYER_INFO_LIST.value: [64],
                                            SchemeInfo.BN_INFO_CONV.value: [True,
                                                                            ActivationFunctions.TANH.value,
                                                                            0.0],
                                            SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                             ActivationFunctions.TANH.value,
                                                                             0.3],
                                            SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

DEEP_LEFT_STEREO_INPUT_EMBEDDER = {
    Input.LEFT_CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                [64, 4, 2],
                                                                [64, 3, 1]],
                              SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                              SchemeInfo.BN_INFO_CONV.value: [False,
                                                              ActivationFunctions.RELU.value,
                                                              0.0],
                              SchemeInfo.BN_INFO_DENSE.value: [False,
                                                               ActivationFunctions.RELU.value,
                                                               0.0],
                              SchemeInfo.IS_FIRST_LAYER_BN.value: False},
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 1],
                                                           [64, 3, 2],
                                                           [64, 3, 1],
                                                           [128, 3, 2],
                                                           [128, 3, 1]],
                        SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                        SchemeInfo.BN_INFO_CONV.value: [False,
                                                        ActivationFunctions.RELU.value,
                                                        0.0],
                        SchemeInfo.BN_INFO_DENSE.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                        SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

DEEP_STEREO_INPUT_EMBEDDER = {
    Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 1],
                                                           [64, 3, 2],
                                                           [64, 3, 1],
                                                           [128, 3, 2],
                                                           [128, 3, 1]],
                        SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                        SchemeInfo.BN_INFO_CONV.value: [False,
                                                        ActivationFunctions.RELU.value,
                                                        0.0],
                        SchemeInfo.BN_INFO_DENSE.value: [False,
                                                         ActivationFunctions.RELU.value,
                                                         0.0],
                        SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

#VGG like Scheme, use BN_SCHEME when creating the embedder, embedder activation should be
# NONE
VGG_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                                  [32, 4, 2],
                                                                                  [64, 4, 2],
                                                                                  [64, 3, 1]],
                                                SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512, 512],
                                                SchemeInfo.BN_INFO_CONV.value: [True,
                                                                                ActivationFunctions.RELU.value,
                                                                                0.0],
                                                SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                 ActivationFunctions.RELU.value,
                                                                                 0.5],
                                                SchemeInfo.IS_FIRST_LAYER_BN.value: False}}


VGG_LEFT_STEREO_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 8, 4],
                                                                                  [32, 4, 2],
                                                                                  [64, 4, 2],
                                                                                  [64, 3, 1]],
                                                SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512, 512],
                                                SchemeInfo.BN_INFO_CONV.value: [True,
                                                                                ActivationFunctions.RELU.value,
                                                                                0.0],
                                                SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                 ActivationFunctions.RELU.value,
                                                                                 0.5],
                                                SchemeInfo.IS_FIRST_LAYER_BN.value: False},
                                  Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 1],
                                                                                             [64, 3, 2],
                                                                                             [64, 3, 1],
                                                                                             [128, 3, 2],
                                                                                             [128, 3, 1]],
                                                          SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                                                          SchemeInfo.BN_INFO_CONV.value: [False,
                                                                                          ActivationFunctions.RELU.value,
                                                                                          0.0],
                                                          SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                           ActivationFunctions.RELU.value,
                                                                                           0.0],
                                                          SchemeInfo.IS_FIRST_LAYER_BN.value: False}}


VGG_STEREO_INPUT_EMBEDDER = {Input.STEREO.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 1],
                                                                                   [64, 3, 2],
                                                                                   [64, 3, 1],
                                                                                   [128, 3, 2],
                                                                                   [128, 3, 1]],
                                                SchemeInfo.DENSE_LAYER_INFO_LIST.value: [],
                                                SchemeInfo.BN_INFO_CONV.value: [False,
                                                                                ActivationFunctions.RELU.value,
                                                                                0.0],
                                                SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                 ActivationFunctions.RELU.value,
                                                                                 0.0],
                                                SchemeInfo.IS_FIRST_LAYER_BN.value: False}}                                               


VGG_MIDDLEWARE = {SchemeInfo.CONV_INFO_LIST.value: [],
                  SchemeInfo.DENSE_LAYER_INFO_LIST.value: [256, 128],
                  SchemeInfo.BN_INFO_CONV.value: [False, ActivationFunctions.RELU.value, 0.0],
                  SchemeInfo.BN_INFO_DENSE.value: [False, ActivationFunctions.RELU.value, 0.5],
                  SchemeInfo.IS_FIRST_LAYER_BN.value: False}

# This archetecture was labled default 7
DEF7_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 2],
                                                                                   [32, 3, 1],
                                                                                   [64, 3, 2],
                                                                                   [64, 3, 1],
                                                                                   [128, 3, 2],
                                                                                   [128, 3, 1],
                                                                                   [256, 3, 2]],
                                                 SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512, 512],
                                                 SchemeInfo.BN_INFO_CONV.value: [True,
                                                                                 ActivationFunctions.RELU.value,
                                                                                 0.0],
                                                 SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                  ActivationFunctions.RELU.value,
                                                                                  0.5],
                                                 SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

DEF7_MIDDLEWARE = {SchemeInfo.CONV_INFO_LIST.value: [],
                   SchemeInfo.DENSE_LAYER_INFO_LIST.value: [256, 128],
                   SchemeInfo.BN_INFO_CONV.value: [False, ActivationFunctions.RELU.value, 0.0],
                   SchemeInfo.BN_INFO_DENSE.value: [False, ActivationFunctions.RELU.value, 0.5],
                   SchemeInfo.IS_FIRST_LAYER_BN.value: False}

# This archetecture was labled default 5
DEF5_INPUT_EMBEDDER = {Input.CAMERA.value: {SchemeInfo.CONV_INFO_LIST.value: [[32, 3, 2],
                                                                                   [32, 3, 1],
                                                                                   [64, 3, 2],
                                                                                   [64, 3, 1],
                                                                                   [128, 3, 2]],
                                                 SchemeInfo.DENSE_LAYER_INFO_LIST.value: [512, 512],
                                                 SchemeInfo.BN_INFO_CONV.value: [True,
                                                                                 ActivationFunctions.RELU.value,
                                                                                 0.0],
                                                 SchemeInfo.BN_INFO_DENSE.value: [False,
                                                                                  ActivationFunctions.RELU.value,
                                                                                  0.5],
                                                 SchemeInfo.IS_FIRST_LAYER_BN.value: False}}

DEF5_MIDDLEWARE = {SchemeInfo.CONV_INFO_LIST.value: [],
                   SchemeInfo.DENSE_LAYER_INFO_LIST.value: [256, 128],
                   SchemeInfo.BN_INFO_CONV.value: [False, ActivationFunctions.RELU.value, 0.0],
                   SchemeInfo.BN_INFO_DENSE.value: [False, ActivationFunctions.RELU.value, 0.5],
                   SchemeInfo.IS_FIRST_LAYER_BN.value: False}
This module contains common schemes # Default network # Shallow network with left and stereo (Left + right) # Shallow network with left and stereo (Left + right) and batch norms # Shallow network with only stereo # Default lidar network without batch norms # Default lidar network with stereo left # Default lidar network, use BN_SCHEME when creating the embedder, embedder activation should be # NONE # Deep Scheme, use default middle ware, use BN_SCHEME when creating the embedder. # embedder activation should be RELU #VGG like Scheme, use BN_SCHEME when creating the embedder, embedder activation should be # NONE # This archetecture was labled default 7 # This archetecture was labled default 5