Models · Stereo matching

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.

variantinputbackendtime (ms)peak memory (MiB, allocated / reserved)
igev-plusplus-sceneflowMiddlebury 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-sceneflow not measured yet; igev-plusplus-kitti12 not measured yet; igev-plusplus-kitti15 not measured yet; igev-plusplus-middlebury not measured yet; igev-plusplus-eth3d not measured yet
  • igev-plusplus-kitti12, igev-plusplus-kitti15, igev-plusplus-middlebury, igev-plusplus-eth3d: same network and settings as igev-plusplus-sceneflow, measured once (rows not repeated).
  • igev-plusplus-sceneflow original (fp32) 994x1482, original 994x1482, portable 994x1482, kernels 994x1482: measured on igev-plusplus-eth3d (same architecture, other checkpoint)
  • igev-plusplus-sceneflow load / first call: original 0.42 s / 2.335 s (375x1242), portable 0.2 s / 1.099† s, kernels 0.16† s / 0.396† s
  • igev-plusplus-kitti12 load / first call: original 0.42 s / 2.335 s (375x1242), portable 0.2 s / 1.099† s, kernels 0.16† s / 0.396† s
  • igev-plusplus-kitti15 load / first call: original 0.42 s / 2.335 s (375x1242), portable 0.2 s / 1.099† s, kernels 0.16† s / 0.396† s
  • igev-plusplus-middlebury load / first call: original 0.42 s / 2.335 s (375x1242), portable 0.2 s / 1.099† s, kernels 0.16† s / 0.396† s
  • igev-plusplus-eth3d load / 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.

variantdatasetoriginal fp32original fp16portablekernelsnote
igev-plusplus-sceneflowETH3D two-view train, bad > 1 px % / EPE4.66 / 0.3564.66 / 0.3554.65 / 0.3554.66 / 0.356
igev-plusplus-sceneflowMiddlebury 2014 trainingH, bad > 2 px % / EPE10.57 / 3.12010.58 / 3.12010.55 / 3.12810.56 / 3.153
igev-plusplus-kitti12ETH3D two-view train, bad > 1 px % / EPE26.75 / 1.96826.77 / 1.96626.73 / 1.96926.78 / 1.963
igev-plusplus-kitti12Middlebury 2014 trainingH, bad > 2 px % / EPE21.25 / 4.99521.25 / 4.99021.25 / 4.99621.25 / 4.976
igev-plusplus-kitti15ETH3D two-view train, bad > 1 px % / EPE25.52 / 1.89625.51 / 1.89325.47 / 1.88825.50 / 1.890
igev-plusplus-kitti15Middlebury 2014 trainingH, bad > 2 px % / EPE20.69 / 4.85620.70 / 4.86120.71 / 4.85120.69 / 4.859
igev-plusplus-middleburyETH3D two-view train, bad > 1 px % / EPE18.40 / 0.77918.31 / 0.77818.47 / 0.78018.46 / 0.782possibly in the training data
igev-plusplus-middleburyMiddlebury 2014 trainingH, bad > 2 px % / EPE4.70 / 0.7034.66 / 0.7034.76 / 0.7074.79 / 0.708trained on this dataset's public images; not a zero-shot result
igev-plusplus-eth3dETH3D two-view train, bad > 1 px % / EPE0.50 / 0.0930.50 / 0.0940.50 / 0.0930.50 / 0.094trained on this dataset's public images; not a zero-shot result
igev-plusplus-eth3dMiddlebury 2014 trainingH, bad > 2 px % / EPE10.61 / 2.70910.62 / 2.64910.58 / 2.71310.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).

variantkernels error vs original, mean / p99GPU, torchkernels used
igev-plusplus-sceneflow0.00074 / 0.00835RTX 5060 Ti, torch 2.14.1+cu130cudnn_hacc@cudnn92400, cutlass_conv@988138e042cb:sm_120, igev@f075827d68c6:sm_120, igevpp@df1bb4dbe09a:sm_120
igev-plusplus-kitti120.00116 / 0.00274RTX 5060 Ti, torch 2.14.1+cu130cudnn_hacc@cudnn92400, cutlass_conv@988138e042cb:sm_120, igev@f075827d68c6:sm_120, igevpp@df1bb4dbe09a:sm_120
igev-plusplus-kitti150.00189 / 0.00365RTX 5060 Ti, torch 2.14.1+cu130cudnn_hacc@cudnn92400, cutlass_conv@988138e042cb:sm_120, igev@f075827d68c6:sm_120, igevpp@df1bb4dbe09a:sm_120
igev-plusplus-middlebury0.00064 / 0.00229RTX 5060 Ti, torch 2.14.1+cu130cudnn_hacc@cudnn92400, cutlass_conv@988138e042cb:sm_120, igev@f075827d68c6:sm_120, igevpp@df1bb4dbe09a:sm_120
igev-plusplus-eth3d0.00081 / 0.00327RTX 5060 Ti, torch 2.14.1+cu130cudnn_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.