IGEV++
The successor of IGEV-Stereo by Gangwei Xu et al., with multi-range geometry encoding volumes for large disparity ranges. Commercially usable.
Commercial use: yes.
| variant | input | backend | time (ms) | peak memory (MiB, allocated / reserved) |
|---|---|---|---|---|
igev-plusplus-sceneflow | Middlebury 2014 half (994x1482) | original (fp32) original portable kernels | 2012 1278 1081 393 | 4152 / 4242 2891 / 3108 1594 / 1840 1389 / 2302 |
Details
- Original code: https://github.com/gangweix/IGEV-plusplus at
099dec979897 - Code licence: MIT (permissive); files:
LICENSE - Weights licence: MIT (assumed from code)
- Licence evidence: https://github.com/gangweix/IGEV-plusplus/blob/099dec97989780d151700459c682df1cc2c18e88/README.md#L23
- Training data: Freiburg SceneFlow (FlyingThings3D, Driving, Monkaa)
igev-plusplus-kitti12: Freiburg SceneFlow (FlyingThings3D, Driving, Monkaa), KITTI stereo 2012 / 2015 (SceneFlow, then fine-tuned on KITTI 2012 + 2015 (README recipe; KITTI 2012 model))igev-plusplus-kitti15: Freiburg SceneFlow (FlyingThings3D, Driving, Monkaa), KITTI stereo 2012 / 2015 (SceneFlow, then fine-tuned on KITTI 2012 + 2015 (README recipe; KITTI 2015 model))igev-plusplus-middlebury: Freiburg SceneFlow (FlyingThings3D, Driving, Monkaa), TartanAir, NVIDIA Falling Things (FAT), CREStereo synthetic stereo dataset (Megvii), InStereo2K, Middlebury stereo (2014), not stated by the authors (Middlebury submission model; original recipe (README, core/stereo_datasets.py): SceneFlow model, then TartanAir, SceneFlow, Falling Things, InStereo2K, CARLA, CREStereo and Middlebury 2005 / 2006 / 2014 / 2021 / MiddEval3, then a fine-tune on CREStereo, InStereo2K, CARLA, Falling Things and Middlebury)igev-plusplus-eth3d: Freiburg SceneFlow (FlyingThings3D, Driving, Monkaa), TartanAir, MPI Sintel stereo, CREStereo synthetic stereo dataset (Megvii), InStereo2K, ETH3D two-view stereo (ETH3D submission model; original recipe (README, core/stereo_datasets.py): SceneFlow model, then TartanAir, SceneFlow, Sintel, CREStereo, InStereo2K and ETH3D, then a fine-tune on CREStereo, InStereo2K and ETH3D)
- Options:
iters= 32 (>= 1),cuda_graphs= True (speed only) - Kernel libraries:
igev,igevpp,cutlass_conv,cudnn_hacc - Variants:
igev-plusplus-sceneflow,igev-plusplus-kitti12,igev-plusplus-kitti15,igev-plusplus-middlebury,igev-plusplus-eth3d - Outputs: disparity
- Input size: any H x W >= 32, padded to a multiple of 32
- Tested up to (portable, fp16, RTX 5060 Ti 16 GB):
igev-plusplus-sceneflownot measured yet;igev-plusplus-kitti12not measured yet;igev-plusplus-kitti15not measured yet;igev-plusplus-middleburynot measured yet;igev-plusplus-eth3dnot measured yet igev-plusplus-kitti12,igev-plusplus-kitti15,igev-plusplus-middlebury,igev-plusplus-eth3d: same network and settings asigev-plusplus-sceneflow, measured once (rows not repeated).igev-plusplus-scenefloworiginal (fp32) 994x1482, original 994x1482, portable 994x1482, kernels 994x1482: measured on igev-plusplus-eth3d (same architecture, other checkpoint)igev-plusplus-sceneflowload / first call: original 0.42 s / 2.335 s (375x1242), portable 0.2 s / 1.099† s, kernels 0.16† s / 0.396† sigev-plusplus-kitti12load / first call: original 0.42 s / 2.335 s (375x1242), portable 0.2 s / 1.099† s, kernels 0.16† s / 0.396† sigev-plusplus-kitti15load / first call: original 0.42 s / 2.335 s (375x1242), portable 0.2 s / 1.099† s, kernels 0.16† s / 0.396† sigev-plusplus-middleburyload / first call: original 0.42 s / 2.335 s (375x1242), portable 0.2 s / 1.099† s, kernels 0.16† s / 0.396† sigev-plusplus-eth3dload / first call: original 0.42 s / 2.335 s (375x1242), portable 0.2 s / 1.099† s, kernels 0.16† s / 0.396† s- † measured in the speed sweep after the portable load (or an earlier size) in the same process: file cache and kernels are warm, so the time is lower than a fresh start.
- Protocol, median of 9 after 3 warm-up, uint8 CUDA input (synthetic for bench_inputs sizes), card defaults; gc before each load; peak = max over the first call and the timed calls
Measured
Original = the original code named under Details, same checkpoint and protocol.
| variant | dataset | original fp32 | original fp16 | portable | kernels | note |
|---|---|---|---|---|---|---|
igev-plusplus-sceneflow | ETH3D two-view train, bad > 1 px % / EPE | 4.66 / 0.356 | 4.66 / 0.355 | 4.65 / 0.355 | 4.66 / 0.356 | |
igev-plusplus-sceneflow | Middlebury 2014 trainingH, bad > 2 px % / EPE | 10.57 / 3.120 | 10.58 / 3.120 | 10.55 / 3.128 | 10.56 / 3.153 | |
igev-plusplus-kitti12 | ETH3D two-view train, bad > 1 px % / EPE | 26.75 / 1.968 | 26.77 / 1.966 | 26.73 / 1.969 | 26.78 / 1.963 | |
igev-plusplus-kitti12 | Middlebury 2014 trainingH, bad > 2 px % / EPE | 21.25 / 4.995 | 21.25 / 4.990 | 21.25 / 4.996 | 21.25 / 4.976 | |
igev-plusplus-kitti15 | ETH3D two-view train, bad > 1 px % / EPE | 25.52 / 1.896 | 25.51 / 1.893 | 25.47 / 1.888 | 25.50 / 1.890 | |
igev-plusplus-kitti15 | Middlebury 2014 trainingH, bad > 2 px % / EPE | 20.69 / 4.856 | 20.70 / 4.861 | 20.71 / 4.851 | 20.69 / 4.859 | |
igev-plusplus-middlebury | ETH3D two-view train, bad > 1 px % / EPE | 18.40 / 0.779 | 18.31 / 0.778 | 18.47 / 0.780 | 18.46 / 0.782 | possibly in the training data |
igev-plusplus-middlebury | Middlebury 2014 trainingH, bad > 2 px % / EPE | 4.70 / 0.703 | 4.66 / 0.703 | 4.76 / 0.707 | 4.79 / 0.708 | trained on this dataset's public images; not a zero-shot result |
igev-plusplus-eth3d | ETH3D two-view train, bad > 1 px % / EPE | 0.50 / 0.093 | 0.50 / 0.094 | 0.50 / 0.093 | 0.50 / 0.094 | trained on this dataset's public images; not a zero-shot result |
igev-plusplus-eth3d | Middlebury 2014 trainingH, bad > 2 px % / EPE | 10.61 / 2.709 | 10.62 / 2.649 | 10.58 / 2.713 | 10.60 / 2.734 |
Measured on portable: NVIDIA GeForce RTX 5060 Ti, torch 2.14.1+cu130, fastforks 468fba10, 2026-11-05; kernels: NVIDIA GeForce RTX 5060 Ti, torch 2.14.1+cu130, fastforks 939adfe8, 2026-11-06.
Parity
CPU, float32: max |diff| <= 0.002 vs the original. GPU, float16 (the default), portable and kernels: mean |diff| <= 0.02 px and p99 <= 0.25 px. On real pairs up to 720x1280 the limits are mean 0.1 / p99 2.0 (precision-sensitive there, see Limitations).
| variant | kernels error vs original, mean / p99 | GPU, torch | kernels used |
|---|---|---|---|
igev-plusplus-sceneflow | 0.00074 / 0.00835 | RTX 5060 Ti, torch 2.14.1+cu130 | cudnn_hacc@cudnn92400, cutlass_conv@988138e042cb:sm_120, igev@f075827d68c6:sm_120, igevpp@df1bb4dbe09a:sm_120 |
igev-plusplus-kitti12 | 0.00116 / 0.00274 | RTX 5060 Ti, torch 2.14.1+cu130 | cudnn_hacc@cudnn92400, cutlass_conv@988138e042cb:sm_120, igev@f075827d68c6:sm_120, igevpp@df1bb4dbe09a:sm_120 |
igev-plusplus-kitti15 | 0.00189 / 0.00365 | RTX 5060 Ti, torch 2.14.1+cu130 | cudnn_hacc@cudnn92400, cutlass_conv@988138e042cb:sm_120, igev@f075827d68c6:sm_120, igevpp@df1bb4dbe09a:sm_120 |
igev-plusplus-middlebury | 0.00064 / 0.00229 | RTX 5060 Ti, torch 2.14.1+cu130 | cudnn_hacc@cudnn92400, cutlass_conv@988138e042cb:sm_120, igev@f075827d68c6:sm_120, igevpp@df1bb4dbe09a:sm_120 |
igev-plusplus-eth3d | 0.00081 / 0.00327 | RTX 5060 Ti, torch 2.14.1+cu130 | cudnn_hacc@cudnn92400, cutlass_conv@988138e042cb:sm_120, igev@f075827d68c6:sm_120, igevpp@df1bb4dbe09a:sm_120 |
Limitations
- CUDA output (float16, kernels, float32 with PyTorch's default TF32 convolutions) differs from the CPU by ~0.06 px mean / 1.2 px p99 at 720x1280, 0.005 px with full float32: rounding amplified by 32 GRU iterations. Portable and kernels reach the same ETH3D / Middlebury accuracy.