MonoPCA
Rethinking Geometric Depth in Monocular 3D Object Detection: A Projection-Consistent Reformulation (NeurIPS 2026)
Zhihao Zhang, Abhinav Kumar, Huaizhi Qu, Tianlong Chen, Xiaoming Liu
This repository hosts the pretrained MonoPCA model with the MoB (Mixture of Backbone) backbone. MoB fuses a ResNet-50 pyramid with EVA-02-L, and depth is predicted with PCDepth. This model serves as the teacher for GeoAlign.
Model
| Backbone | MoB: ResNet-50 + EVA-02-L |
| Training data | KITTI + nuScenes (front camera) + Waymo (front camera) |
| Classes | Car, Pedestrian, Trailer, Bus, Motorcycle, Cyclist, Barrier, Truck, Van, Traffic_cone, Bicycle |
| Input | 1280 x 512. Each image is resampled to a virtual focal length of 748.84 px. |
| Parameters | 354M |
Files
model.safetensors: model weights.monopca_inference.yaml: inference-only config. It is the same file asconfigs/monopca_inference.yamlin the code repository.
Usage
Set up the code repository, then compile the deformable attention op:
git clone https://github.com/alanzhangcs/MonoPCA.git
cd MonoPCA
pip install -r requirements.txt
cd lib/models/monopca/ops && bash make.sh && cd ../../../..
Run inference. The weights are downloaded from this repository automatically:
# a single image with its KITTI calib file (P2 is used)
python tools/inference.py --image path/to/000001.png --calib path/to/000001.txt --output outputs/inference
# a folder of images with calib files of the same name
python tools/inference.py --image path/to/image_2 --calib path/to/calib --output outputs/inference
Each output file <image_name>.txt holds one object per line in KITTI format, with a confidence score at the end:
type truncated occluded alpha x1 y1 x2 y2 h w l x y z ry score
The 3D boxes are in the camera coordinate system of the given calibration.
You can also load the model in Python:
import yaml
from PIL import Image
from tools.inference import load_model, predict
from lib.datasets.kitti.kitti_utils import Calibration
cfg = yaml.safe_load(open("configs/monopca_inference.yaml"))
model = load_model(cfg) # downloads model.safetensors from zhihao406/MonoPCA
preds = predict(model, Image.open("000001.png").convert("RGB"), Calibration("000001.txt"), cfg)
A CUDA GPU is required, because the multi-scale deformable attention op only runs on CUDA.
Citation
@inproceedings{zhang2026rethinking,
title = {Rethinking Geometric Depth in Monocular 3D Object Detection:
A Projection-Consistent Reformulation},
author = {Zhang, Zhihao and Kumar, Abhinav and Qu, Huaizhi and
Chen, Tianlong and Liu, Xiaoming},
booktitle = {Advances in Neural Information Processing Systems (NeurIPS)},
year = {2026}
}