Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cfgs/igev_rt/igev_rt_sceneflow_amp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ OPTIMIZATION:
FREEZE_BN: true
SYNC_BN: false
AMP: true
BATCH_SIZE_PER_GPU: 8
NUM_EPOCHS: 45
BATCH_SIZE_PER_GPU: 1
MAX_ITER: 200000

OPTIMIZER:
NAME: AdamW
Expand Down
84 changes: 84 additions & 0 deletions cfgs/igev_rt/igev_rt_sceneflow_uniform.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
DATA_CONFIG:
DATA_INFOS:
- DATASET: SceneFlowDataset
DATA_SPLIT: {
TRAINING: ./data/SceneFlow/sceneflow_finalpass_train.txt,
EVALUATING: ./data/SceneFlow/sceneflow_finalpass_test.txt,
TESTING: ./data/SceneFlow/sceneflow_finalpass_test.txt
}
RETURN_RIGHT_DISP: false

DATA_TRANSFORM:
TRAINING:
- { NAME: RandomCrop, SIZE: [ 320, 736 ], Y_JITTER: false }
- { NAME: TransposeImage }
- { NAME: ToTensor }
- { NAME: NormalizeImage, MEAN: [ 0.485, 0.456, 0.406 ], STD: [ 0.229, 0.224, 0.225 ] }
EVALUATING:
#- { NAME: RightTopPad, SIZE: [ 540, 960 ] }
- { NAME: RightTopPad, SIZE: [ 544, 960 ] }
- { NAME: TransposeImage }
- { NAME: ToTensor }
- { NAME: NormalizeImage, MEAN: [ 0.485, 0.456, 0.406 ], STD: [ 0.229, 0.224, 0.225 ] }

MODEL:
NAME: IGEVRT
MAX_DISP: &max_disp 192
HIDDEN_DIMS: [ 128, 128, 128 ]
MIXED_PRECISION: false
PRECISION_DTYPE: float32
HIDDEN_DIM: 96
N_GRU_LAYERS: 3
N_DOWNSAMPLE: 2
SLOW_FAST_GRU: True
CORR_LEVELS: 2
CORR_RADIUS: 4
TRAIN_ITERS: 22
VALID_ITERS: 8
FIND_UNUSED_PARAMETERS: true
CKPT: -1
PRETRAINED_MODEL: ''

OPTIMIZATION:
FREEZE_BN: false
SYNC_BN: true
AMP: false
BATCH_SIZE_PER_GPU: 1
MAX_ITER: 200000

OPTIMIZER:
NAME: AdamW
LR: &lr 0.0002
WEIGHT_DECAY: 1.0e-05
EPS: 1.0e-08

SCHEDULER:
NAME: OneCycleLR
ON_EPOCH: False
MAX_LR: *lr
PCT_START: 0.01
CYCLE_MOMENTUM: False
ANNEAL_STRATEGY: linear

CLIP_GRAD:
TYPE: norm
MAX_NORM: 1.0
NORM_TYPE: 2

EVALUATOR:
BATCH_SIZE_PER_GPU: 8
MAX_DISP: *max_disp
METRIC:
- d1_all
- epe
- thres_1
- thres_2
- thres_3

TRAINER:
EVAL_INTERVAL: 1
CKPT_SAVE_INTERVAL: 1
MAX_CKPT_SAVE_NUM: 30
LOGGER_ITER_INTERVAL: 10
TRAIN_VISUALIZATION: True
EVAL_VISUALIZATION: True
4 changes: 2 additions & 2 deletions cfgs/igevpp/igevpp_sceneflow_amp.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -50,11 +50,11 @@ MODEL:
PRETRAINED_MODEL: ''

OPTIMIZATION:
BATCH_SIZE_PER_GPU: 8
BATCH_SIZE_PER_GPU: 1
FREEZE_BN: true
SYNC_BN: false
AMP: true
NUM_EPOCHS: 45
MAX_ITER: 200000

OPTIMIZER:
NAME: AdamW
Expand Down
92 changes: 92 additions & 0 deletions cfgs/igevpp/igevpp_sceneflow_uniform.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
DATA_CONFIG:
DATA_INFOS:
- DATASET: SceneFlowDataset
DATA_SPLIT: {
TRAINING: ./data/SceneFlow/sceneflow_finalpass_train.txt,
EVALUATING: ./data/SceneFlow/sceneflow_finalpass_test.txt,
TESTING: ./data/SceneFlow/sceneflow_finalpass_test.txt
}
RETURN_RIGHT_DISP: false

DATA_TRANSFORM:
TRAINING:
- { NAME: RandomCrop, SIZE: [ 320, 736 ], Y_JITTER: false }
- { NAME: TransposeImage }
- { NAME: ToTensor }
- { NAME: NormalizeImage, MEAN: [ 0.485, 0.456, 0.406 ], STD: [ 0.229, 0.224, 0.225 ] }
EVALUATING:
- { NAME: RightTopPad, SIZE: [ 544, 960 ] }
- { NAME: TransposeImage }
- { NAME: ToTensor }
- { NAME: NormalizeImage, MEAN: [ 0.485, 0.456, 0.406 ], STD: [ 0.229, 0.224, 0.225 ] }

MODEL:
NAME: IGEVPP
MAX_DISP: 768
HIDDEN_DIMS: [ 128, 128, 128 ]

MIXED_PRECISION: false
PRECISION_DTYPE: float32


S_DISP_RANGE: 48
S_DISP_INTERVAL: 1
M_DISP_RANGE: 96
M_DISP_INTERVAL: 2
L_DISP_RANGE: 192
L_DISP_INTERVAL: 4

N_GRU_LAYERS: 3
N_DOWNSAMPLE: 2
SLOW_FAST_GRU: True
CORR_LEVELS: 2
CORR_RADIUS: 4
TRAIN_ITERS: 22
VALID_ITERS: 32
FIND_UNUSED_PARAMETERS: false
CKPT: -1
PRETRAINED_MODEL: ''

OPTIMIZATION:
BATCH_SIZE_PER_GPU: 1
FREEZE_BN: false
SYNC_BN: true
AMP: false
MAX_ITER: 200000

OPTIMIZER:
NAME: AdamW
LR: &lr 0.0002
WEIGHT_DECAY: 0.00001
EPS: 0.00000001

SCHEDULER:
NAME: OneCycleLR
ON_EPOCH: False
MAX_LR: *lr
PCT_START: 0.01
CYCLE_MOMENTUM: False
ANNEAL_STRATEGY: linear

CLIP_GRAD:
TYPE: norm
MAX_NORM: 1.0
NORM_TYPE: 2

EVALUATOR:
BATCH_SIZE_PER_GPU: 8
MAX_DISP: 192
METRIC:
- d1_all
- epe
- thres_1
- thres_2
- thres_3

TRAINER:
EVAL_INTERVAL: 1
CKPT_SAVE_INTERVAL: 1
MAX_CKPT_SAVE_NUM: 30
LOGGER_ITER_INTERVAL: 10
TRAIN_VISUALIZATION: True
EVAL_VISUALIZATION: True
4 changes: 3 additions & 1 deletion docs/1.model_zoo.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,9 @@
| [COEX](https://arxiv.org/abs/2108.05773) | 0.68| 0.67 | [coex_sceneflow_amp.yaml](../cfgs/coex/coex_sceneflow_amp.yaml) | 288x576 |0.64 |
| [FADNet++](https://arxiv.org/abs/2110.02582) | 0.76 | 0.65 | [fadnet_sceneflow.yaml](../cfgs/fadnet/fadnet_sceneflow.yaml) | 384x768 | - |
| [CasStereo](https://arxiv.org/abs/1912.06378) | 0.72 | 0.67 | [casnet_psm_sceneflow.yaml](../cfgs/casnet/casnet_psm_sceneflow.yaml) | 256x512 |0.58 |
| [IGEV](https://arxiv.org/pdf/2303.06615.pdf)| 0.47| 0.46 | [igev_sceneflow_amp.yaml](../cfgs/igev/igev_sceneflow_amp.yaml) | 256x512 |0.46 |
| [IGEV](https://arxiv.org/pdf/2303.06615.pdf)| 0.47| 0.46 | [igev_sceneflow_amp.yaml](../cfgs/igevpp/igevpp_sceneflow_amp.yaml) | 256x512 |0.46 |
| [IGEV++](https://arxiv.org/abs/2409.00638)| 0.43| 0.44 | [igevpp_sceneflow_amp.yaml](../cfgs/igevpp/igevpp_sceneflow_amp.yaml) | 256x768 |0.38 |
| [IGEV_RT](https://arxiv.org/abs/2409.00638)| 0.50| 0.52 | [igev_rt_sceneflow_amp.yaml](../cfgs/igev_rt/igev_rt_sceneflow_amp.yaml) | 320x768 |0.52 |
| [StereoBase](https://arxiv.org/abs/2312.00343) (*Ours*) | -| **0.34** | [stereobase_sceneflow.yaml](../cfgs/stereobase/stereobase_sceneflow.yaml) | 320x736 | **0.34** |
| [FoundationStereo](https://arxiv.org/abs/2501.09898) | 0.34| 0.34 | [foundationstereo_sceneflow.yaml](../cfgs/foundationstereo/fstereo_sceneflow.yaml) | 320x736 | 0.34 |
| [Monster](https://arxiv.org/abs/2501.08643) | 0.37| 0.40 | [monster_sceneflow.yaml](../cfgs/monster/monster_sceneflow.yaml) | 320x736 | 0.33 |
Expand Down
22 changes: 22 additions & 0 deletions stereo/modeling/models/igev_rt/trainer.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,11 @@
from stereo.modeling.trainer_template import TrainerTemplate
from .igev_rt_stereo import IGEVRTtereo

from stereo.modeling.trainer_template import TrainerTemplate
from .igev_rt_stereo import IGEVRTtereo
import torch
from stereo.utils import common_utils

__all__ = {
'IGEVRT': IGEVRTtereo,
}
Expand All @@ -11,3 +16,20 @@ class Trainer(TrainerTemplate):
def __init__(self, args, cfgs, local_rank, global_rank, logger, tb_writer):
model = __all__[cfgs.MODEL.NAME](cfgs.MODEL)
super().__init__(args, cfgs, local_rank, global_rank, logger, tb_writer, model)


def build_optimizer_and_scheduler(self):
if self.cfgs.OPTIMIZATION.OPTIMIZER.NAME == 'Lamb':
from stereo.utils.lamb import Lamb
optimizer_cls = Lamb
else:
optimizer_cls = getattr(torch.optim, self.cfgs.OPTIMIZATION.OPTIMIZER.NAME)
valid_arg = common_utils.get_valid_args(optimizer_cls, self.cfgs.OPTIMIZATION.OPTIMIZER, ['name'])
optimizer = optimizer_cls(params=[p for p in self.model.parameters() if p.requires_grad], **valid_arg)

self.cfgs.OPTIMIZATION.SCHEDULER.TOTAL_STEPS = self.max_iter + 100
scheduler_cls = getattr(torch.optim.lr_scheduler, self.cfgs.OPTIMIZATION.SCHEDULER.NAME)
valid_arg = common_utils.get_valid_args(scheduler_cls, self.cfgs.OPTIMIZATION.SCHEDULER, ['name', 'on_epoch'])
scheduler = scheduler_cls(optimizer, **valid_arg)

return optimizer, scheduler
19 changes: 19 additions & 0 deletions stereo/modeling/models/igevpp/trainer.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@
# @Author : Qian Zhou
from stereo.modeling.trainer_template import TrainerTemplate
from .igevpp_stereo import IGEVPPStereo
import torch
from stereo.utils import common_utils

__all__ = {
'IGEVPP': IGEVPPStereo,
Expand All @@ -11,3 +13,20 @@ class Trainer(TrainerTemplate):
def __init__(self, args, cfgs, local_rank, global_rank, logger, tb_writer):
model = __all__[cfgs.MODEL.NAME](cfgs.MODEL)
super().__init__(args, cfgs, local_rank, global_rank, logger, tb_writer, model)


def build_optimizer_and_scheduler(self):
if self.cfgs.OPTIMIZATION.OPTIMIZER.NAME == 'Lamb':
from stereo.utils.lamb import Lamb
optimizer_cls = Lamb
else:
optimizer_cls = getattr(torch.optim, self.cfgs.OPTIMIZATION.OPTIMIZER.NAME)
valid_arg = common_utils.get_valid_args(optimizer_cls, self.cfgs.OPTIMIZATION.OPTIMIZER, ['name'])
optimizer = optimizer_cls(params=[p for p in self.model.parameters() if p.requires_grad], **valid_arg)

self.cfgs.OPTIMIZATION.SCHEDULER.TOTAL_STEPS = self.max_iter + 100
scheduler_cls = getattr(torch.optim.lr_scheduler, self.cfgs.OPTIMIZATION.SCHEDULER.NAME)
valid_arg = common_utils.get_valid_args(scheduler_cls, self.cfgs.OPTIMIZATION.SCHEDULER, ['name', 'on_epoch'])
scheduler = scheduler_cls(optimizer, **valid_arg)

return optimizer, scheduler