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

Code | Project Page

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 as configs/monopca_inference.yaml in 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}
}
Downloads last month

-

Downloads are not tracked for this model. How to track
Safetensors
Model size
0.4B params
Tensor type
F32
ยท
Inference Providers NEW
This model isn't deployed by any Inference Provider. ๐Ÿ™‹ Ask for provider support