| # Hybrid Velocity Estimator trained with non augmented data (5202 samples) and 80 Epochs. L1 loss was modified into a weighted loss. Modified FC |
|
|
| The main purpose of this experiment is training the first version of Hybrid Estimator using ImageVelocityEstimator for image2embedding transformation and TabularVelocityEstimator aproach in a new regressor. |
|
|
| - L1 loss was modified into a weighted loss in order to lower MAE in higher speed bins |
| - Fully connected regressor was modifed into a more powerfull architecture |
|
|
| **Experiment Architecture**: |
|
|
| ```python |
| VelocityEstimatorModel( |
| (model): VelocityNetwork( |
| (image_encoder): VelocityNetwork( |
| (backbone): Sequential( |
| (0): Conv2d(3, 64, kernel_size=(7, 7), stride=(2, 2), padding=(3, 3), bias=False) |
| (1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (2): ReLU(inplace=True) |
| (3): MaxPool2d(kernel_size=3, stride=2, padding=1, dilation=1, ceil_mode=False) |
| (4): Sequential( |
| (0): Bottleneck( |
| (conv1): Conv2d(64, 64, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| (downsample): Sequential( |
| (0): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| ) |
| ) |
| (1): Bottleneck( |
| (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| (2): Bottleneck( |
| (conv1): Conv2d(256, 64, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(64, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(64, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(64, 256, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| ) |
| (5): Sequential( |
| (0): Bottleneck( |
| (conv1): Conv2d(256, 128, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| (downsample): Sequential( |
| (0): Conv2d(256, 512, kernel_size=(1, 1), stride=(2, 2), bias=False) |
| (1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| ) |
| ) |
| (1): Bottleneck( |
| (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| (2): Bottleneck( |
| (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| (3): Bottleneck( |
| (conv1): Conv2d(512, 128, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(128, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(128, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(128, 512, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| ) |
| (6): Sequential( |
| (0): Bottleneck( |
| (conv1): Conv2d(512, 256, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| (downsample): Sequential( |
| (0): Conv2d(512, 1024, kernel_size=(1, 1), stride=(2, 2), bias=False) |
| (1): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| ) |
| ) |
| (1): Bottleneck( |
| (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| (2): Bottleneck( |
| (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| (3): Bottleneck( |
| (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| (4): Bottleneck( |
| (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| (5): Bottleneck( |
| (conv1): Conv2d(1024, 256, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(256, 256, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(256, 1024, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(1024, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| ) |
| (7): Sequential( |
| (0): Bottleneck( |
| (conv1): Conv2d(1024, 512, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(2, 2), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| (downsample): Sequential( |
| (0): Conv2d(1024, 2048, kernel_size=(1, 1), stride=(2, 2), bias=False) |
| (1): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| ) |
| ) |
| (1): Bottleneck( |
| (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| (2): Bottleneck( |
| (conv1): Conv2d(2048, 512, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn1): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv2): Conv2d(512, 512, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1), bias=False) |
| (bn2): BatchNorm2d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (conv3): Conv2d(512, 2048, kernel_size=(1, 1), stride=(1, 1), bias=False) |
| (bn3): BatchNorm2d(2048, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (relu): ReLU(inplace=True) |
| ) |
| ) |
| (8): AdaptiveAvgPool2d(output_size=(1, 1)) |
| ) |
| (embedding_head): Sequential( |
| (0): Linear(in_features=2048, out_features=512, bias=True) |
| (1): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (2): GELU(approximate='none') |
| (3): Dropout(p=0.3, inplace=False) |
| ) |
| (regression_head): Sequential( |
| (0): Linear(in_features=512, out_features=128, bias=True) |
| (1): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (2): GELU(approximate='none') |
| (3): Dropout(p=0.2, inplace=False) |
| (4): Linear(in_features=128, out_features=1, bias=True) |
| ) |
| ) |
| (regressor): Sequential( |
| (0): Linear(in_features=521, out_features=512, bias=True) |
| (1): BatchNorm1d(512, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (2): GELU(approximate='none') |
| (3): Dropout(p=0.2, inplace=False) |
| (4): Linear(in_features=512, out_features=256, bias=True) |
| (5): BatchNorm1d(256, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (6): GELU(approximate='none') |
| (7): Dropout(p=0.2, inplace=False) |
| (8): Linear(in_features=256, out_features=128, bias=True) |
| (9): BatchNorm1d(128, eps=1e-05, momentum=0.1, affine=True, bias=True, track_running_stats=True) |
| (10): GELU(approximate='none') |
| (11): Linear(in_features=128, out_features=64, bias=True) |
| (12): GELU(approximate='none') |
| (13): Linear(in_features=64, out_features=1, bias=True) |
| ) |
| ) |
| (train_mae): MeanAbsoluteError() |
| (val_mae): MeanAbsoluteError() |
| (test_mae): MeanAbsoluteError() |
| ) |
| |
| |
| ``` |