# mrnabati/centerfusion architecture

> Architecture diagram of the GitHub repository mrnabati/centerfusion, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/mrnabati/centerfusion
- Repository: https://github.com/mrnabati/centerfusion

## Overview

CenterFusion is a radar-and-camera 3D object detection system built around center-point image detections and frustum-based radar association. Its main workflow is dataset selection and preparation, model training or inference, then decoding and post-processing detections for evaluation or visualization. The graph also preserves documented nuScenes conversion, tracking, and dataset support. Source excerpts show key runtime calls; some subsystem links are documented by the README or source-index references rather than fully sampled implementation.

Main entry points: [`src/main.py`](https://github.com/mrnabati/centerfusion/blob/master/src/main.py) (Train / evaluate), [`src/lib/detector.py`](https://github.com/mrnabati/centerfusion/blob/master/src/lib/detector.py) (Inference detector), [`src/lib/dataset/generic_dataset.py`](https://github.com/mrnabati/centerfusion/blob/master/src/lib/dataset/generic_dataset.py) (Sample preparation), [`src/demo.py`](https://github.com/mrnabati/centerfusion/blob/master/src/demo.py) (Demo entry)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_workflow["Runtime workflow"]
  node_main["Train / evaluate<br/>[main.py]"]
  node_options["Run options<br/>[opts.py]"]
  node_demo["Demo entry<br/>[demo.py]"]
  node_detector["Inference detector<br/>[detector.py]"]
  node_logger["Experiment logging<br/>[logger.py]"]
end

subgraph group_data["Data and datasets"]
  node_dataset_factory["Dataset registry<br/>[dataset_factory.py]"]
  node_dataset["Dataset adapters"]
  node_generic_dataset["Sample preparation<br/>[generic_dataset.py]"]
  node_nuscenes_convert["nuScenes conversion"]
  node_radar["Radar processing<br/>[pointcloud.py]"]
  node_image_utils["Image transforms<br/>[image.py]"]
end

subgraph group_model["Detection model"]
  node_model_factory["Model construction<br/>[model.py]"]
  node_networks["Network architectures"]
  node_base_model["Fusion heads<br/>[base_model.py]"]
  node_decode["Detection decoding<br/>[decode.py]"]
  node_trainer["Training loop<br/>[trainer.py]"]
  node_losses["Detection losses<br/>[losses.py]"]
end

subgraph group_results["Results and evaluation"]
  node_postprocess["3D post-processing<br/>[post_process.py]"]
  node_ddd_utils["3D geometry<br/>[ddd_utils.py]"]
  node_tracking["Object tracking<br/>[tracker.py]"]
  node_debugger["Detection visualization<br/>[debugger.py]"]
  node_eval_tools["Tracking evaluation"]
end

node_user(("Researcher"))
node_external_data[("Dataset files")]

node_user -->|"configures run"| node_main
node_user -->|"starts demo"| node_demo
node_main -->|"parses options"| node_options
node_main -->|"selects dataset"| node_dataset_factory
node_main -->|"creates model"| node_model_factory
node_main -->|"runs training"| node_trainer
node_main -->|"logs metrics"| node_logger
node_demo -->|"parses options"| node_options
node_demo -->|"invokes inference"| node_detector
node_dataset_factory -->|"selects adapter"| node_dataset
node_dataset -->|"inherits preparation"| node_generic_dataset
node_external_data -.->|"provides samples"| node_generic_dataset
node_nuscenes_convert -->|"converts annotations"| node_external_data
node_generic_dataset -->|"transforms images"| node_image_utils
node_generic_dataset -->|"loads radar data"| node_radar
node_main -->|"sets dataset heads"| node_options
node_model_factory -->|"builds architecture"| node_networks
node_networks -->|"extends base"| node_base_model
node_trainer -->|"computes losses"| node_losses
node_trainer -->|"decodes outputs"| node_decode
node_detector -->|"loads model"| node_model_factory
node_detector -->|"decodes predictions"| node_decode
node_detector -->|"post-processes detections"| node_postprocess
node_postprocess -->|"uses 3D geometry"| node_ddd_utils
node_detector -->|"updates tracks"| node_tracking
node_detector -->|"renders detections"| node_debugger
node_main -.->|"evaluates tracking"| node_eval_tools

click node_main "https://github.com/mrnabati/centerfusion/blob/master/src/main.py"
click node_options "https://github.com/mrnabati/centerfusion/blob/master/src/lib/opts.py"
click node_demo "https://github.com/mrnabati/centerfusion/blob/master/src/demo.py"
click node_detector "https://github.com/mrnabati/centerfusion/blob/master/src/lib/detector.py"
click node_dataset_factory "https://github.com/mrnabati/centerfusion/blob/master/src/lib/dataset/dataset_factory.py"
click node_dataset "https://github.com/mrnabati/centerfusion/tree/master/src/lib/dataset/datasets"
click node_generic_dataset "https://github.com/mrnabati/centerfusion/blob/master/src/lib/dataset/generic_dataset.py"
click node_nuscenes_convert "https://github.com/mrnabati/centerfusion/blob/master/src/tools/convert_nuScenes.py"
click node_radar "https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/pointcloud.py"
click node_model_factory "https://github.com/mrnabati/centerfusion/blob/master/src/lib/model/model.py"
click node_networks "https://github.com/mrnabati/centerfusion/tree/master/src/lib/model/networks"
click node_base_model "https://github.com/mrnabati/centerfusion/blob/master/src/lib/model/networks/base_model.py"
click node_decode "https://github.com/mrnabati/centerfusion/blob/master/src/lib/model/decode.py"
click node_trainer "https://github.com/mrnabati/centerfusion/blob/master/src/lib/trainer.py"
click node_losses "https://github.com/mrnabati/centerfusion/blob/master/src/lib/model/losses.py"
click node_postprocess "https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/post_process.py"
click node_ddd_utils "https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/ddd_utils.py"
click node_tracking "https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/tracker.py"
click node_debugger "https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/debugger.py"
click node_image_utils "https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/image.py"
click node_logger "https://github.com/mrnabati/centerfusion/blob/master/src/lib/logger.py"
click node_eval_tools "https://github.com/mrnabati/centerfusion/blob/master/src/tools/eval_kitti_track/evaluate_tracking.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_main,node_options,node_demo,node_detector,node_logger toneBlue
class node_dataset_factory,node_dataset,node_generic_dataset,node_nuscenes_convert,node_radar,node_image_utils,node_external_data toneAmber
class node_model_factory,node_networks,node_base_model,node_decode,node_trainer,node_losses toneMint
class node_postprocess,node_ddd_utils,node_tracking,node_debugger,node_eval_tools toneRose
class node_user toneIndigo
```

## Components

### Runtime workflow

- [Train / evaluate](https://github.com/mrnabati/centerfusion/blob/master/src/main.py): `src/main.py`
- [Run options](https://github.com/mrnabati/centerfusion/blob/master/src/lib/opts.py): `src/lib/opts.py`
- [Demo entry](https://github.com/mrnabati/centerfusion/blob/master/src/demo.py): `src/demo.py`
- [Inference detector](https://github.com/mrnabati/centerfusion/blob/master/src/lib/detector.py): `src/lib/detector.py`
- [Experiment logging](https://github.com/mrnabati/centerfusion/blob/master/src/lib/logger.py): `src/lib/logger.py`

### Data and datasets

- [Dataset registry](https://github.com/mrnabati/centerfusion/blob/master/src/lib/dataset/dataset_factory.py): `src/lib/dataset/dataset_factory.py`
- [Dataset adapters](https://github.com/mrnabati/centerfusion/tree/master/src/lib/dataset/datasets): `src/lib/dataset/datasets`
- [Sample preparation](https://github.com/mrnabati/centerfusion/blob/master/src/lib/dataset/generic_dataset.py): `src/lib/dataset/generic_dataset.py`
- [nuScenes conversion](https://github.com/mrnabati/centerfusion/blob/master/src/tools/convert_nuScenes.py): `src/tools/convert_nuScenes.py`
- [Radar processing](https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/pointcloud.py): `src/lib/utils/pointcloud.py`
- [Image transforms](https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/image.py): `src/lib/utils/image.py`

### Detection model

- [Model construction](https://github.com/mrnabati/centerfusion/blob/master/src/lib/model/model.py): `src/lib/model/model.py`
- [Network architectures](https://github.com/mrnabati/centerfusion/tree/master/src/lib/model/networks): `src/lib/model/networks`
- [Fusion heads](https://github.com/mrnabati/centerfusion/blob/master/src/lib/model/networks/base_model.py): `src/lib/model/networks/base_model.py`
- [Detection decoding](https://github.com/mrnabati/centerfusion/blob/master/src/lib/model/decode.py): `src/lib/model/decode.py`
- [Training loop](https://github.com/mrnabati/centerfusion/blob/master/src/lib/trainer.py): `src/lib/trainer.py`
- [Detection losses](https://github.com/mrnabati/centerfusion/blob/master/src/lib/model/losses.py): `src/lib/model/losses.py`

### Results and evaluation

- [3D post-processing](https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/post_process.py): `src/lib/utils/post_process.py`
- [3D geometry](https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/ddd_utils.py): `src/lib/utils/ddd_utils.py`
- [Object tracking](https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/tracker.py): `src/lib/utils/tracker.py`
- [Detection visualization](https://github.com/mrnabati/centerfusion/blob/master/src/lib/utils/debugger.py): `src/lib/utils/debugger.py`
- [Tracking evaluation](https://github.com/mrnabati/centerfusion/blob/master/src/tools/eval_kitti_track/evaluate_tracking.py): `src/tools/eval_kitti_track/evaluate_tracking.py`

### Other components

- **Researcher**
- **Dataset files**

## Connections

- Researcher → Train / evaluate: configures run (evidence: `README.md`)
- Researcher → Demo entry: starts demo (evidence: `src/demo.py`)
- Train / evaluate → Run options: parses options (evidence: `src/main.py`)
- Train / evaluate → Dataset registry: selects dataset (evidence: `src/main.py`)
- Train / evaluate → Model construction: creates model (evidence: `src/main.py`)
- Train / evaluate → Training loop: runs training (evidence: `src/main.py`)
- Train / evaluate → Experiment logging: logs metrics (evidence: `src/main.py`)
- Demo entry → Run options: parses options (evidence: `src/demo.py`)
- Demo entry → Inference detector: invokes inference (evidence: `src/demo.py`)
- Dataset registry → Dataset adapters: selects adapter (evidence: `src/lib/dataset/dataset_factory.py`)
- Dataset adapters → Sample preparation: inherits preparation (evidence: `src/lib/dataset/datasets/coco.py`)
- Dataset files → Sample preparation: provides samples (evidence: `README.md`)
- nuScenes conversion → Dataset files: converts annotations (evidence: `src/tools/convert_nuScenes.py`)
- Sample preparation → Image transforms: transforms images (evidence: `src/lib/dataset/generic_dataset.py`)
- Sample preparation → Radar processing: loads radar data (evidence: `src/lib/dataset/generic_dataset.py`)
- Train / evaluate → Run options: sets dataset heads (evidence: `src/main.py`)
- Model construction → Network architectures: builds architecture (evidence: `src/lib/model/model.py`)
- Network architectures → Fusion heads: extends base (evidence: `src/lib/model/networks/dla.py`)
- Training loop → Detection losses: computes losses (evidence: `src/lib/trainer.py`)
- Training loop → Detection decoding: decodes outputs (evidence: `src/lib/trainer.py`)
- Inference detector → Model construction: loads model (evidence: `src/lib/detector.py`)
- Inference detector → Detection decoding: decodes predictions (evidence: `src/lib/detector.py`)
- Inference detector → 3D post-processing: post-processes detections (evidence: `src/lib/detector.py`)
- 3D post-processing → 3D geometry: uses 3D geometry (evidence: `src/lib/utils/post_process.py`)
- Inference detector → Object tracking: updates tracks (evidence: `src/lib/detector.py`)
- Inference detector → Detection visualization: renders detections (evidence: `src/lib/detector.py`)
- Train / evaluate → Tracking evaluation: evaluates tracking
