# grokcv/drpca-net architecture

> Architecture diagram of the GitHub repository grokcv/drpca-net, 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/grokcv/drpca-net
- Repository: https://github.com/grokcv/drpca-net

## Overview

DRPCA-Net is a research implementation for infrared small-target detection. Its main workflow prepares labeled images for training, optimizes the DRPCA-Net model, runs inference with a dataset-specific checkpoint, then evaluates saved predictions with segmentation, detection, and ROC metrics. The README also documents four supported datasets and result exports. Training and evaluation wiring is grounded in the shown excerpts and SOURCE INDEX; some README-described capabilities have no sampled implementation details, so their internal links are omitted.

Main entry points: [`train.py`](https://github.com/grokcv/drpca-net/blob/master/train.py) (Training loop), [`cal_from_mask.py`](https://github.com/grokcv/drpca-net/blob/master/cal_from_mask.py) (Mask evaluation), [`inference.py`](https://github.com/grokcv/drpca-net/blob/master/inference.py) (Inference runner), [`models/DRPCANet.py`](https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py) (Decomposition stages)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_data["Data preparation"]
  node_dataset_loaders["Dataset loaders<br/>[data.py]"]
end

subgraph group_model["Detection model"]
  node_network["DRPCANet<br/>[DRPCANet.py]"]
  node_decomposition["Decomposition stages<br/>[DRPCANet.py]"]
  node_sparse["Dynamic sparse module<br/>[DRPCANet.py]"]
  node_hypernetwork["Parameter generator<br/>[DRPCANet.py]"]
  node_residual["Residual merge group<br/>[DRPCANet.py]"]
end

subgraph group_learning["Training"]
  node_trainer["Training loop<br/>[train.py]"]
  node_losses["Training losses<br/>[loss.py]"]
  node_scheduler["Learning-rate scheduler<br/>[lr_scheduler.py]"]
  node_logger["Training logger<br/>[logger.py]"]
end

subgraph group_assessment["Inference and evaluation"]
  node_inference["Inference runner<br/>[inference.py]"]
  node_mask_evaluator["Mask evaluation<br/>[cal_from_mask.py]"]
  node_miou_metrics["TP/FP/FN metrics<br/>[TPFNFP.py]"]
  node_pd_fa_metrics["Pd/Fa metrics<br/>[pd_fa.py]"]
  node_roc_metrics["ROC metrics<br/>[roc_cruve.py]"]
end

node_researcher(("Researcher"))
node_datasets[("Labeled datasets")]
node_checkpoints[("Model checkpoints")]
node_predictions[("Prediction files")]
node_evaluation_results[("Evaluation results")]

node_researcher -->|"configures training"| node_trainer
node_researcher -->|"starts inference"| node_inference
node_researcher -->|"runs evaluation"| node_mask_evaluator
node_datasets -->|"provides images"| node_dataset_loaders
node_dataset_loaders -->|"supplies batches"| node_trainer
node_trainer -->|"trains model"| node_network
node_trainer -->|"computes loss"| node_losses
node_trainer -->|"updates learning rate"| node_scheduler
node_trainer -->|"logs progress"| node_logger
node_trainer -->|"updates metrics"| node_miou_metrics
node_trainer -->|"saves weights"| node_checkpoints
node_network -->|"runs stages"| node_decomposition
node_decomposition -->|"updates sparse target"| node_sparse
node_sparse -->|"generates parameters"| node_hypernetwork
node_decomposition -->|"merges components"| node_residual
node_inference -->|"loads weights"| node_checkpoints
node_inference -->|"runs prediction"| node_network
node_inference -->|"writes files"| node_predictions
node_predictions -->|"provides predictions"| node_mask_evaluator
node_mask_evaluator -->|"computes overlap scores"| node_miou_metrics
node_mask_evaluator -->|"computes Pd and Fa"| node_pd_fa_metrics
node_mask_evaluator -->|"computes ROC"| node_roc_metrics
node_mask_evaluator -->|"writes reports"| node_evaluation_results

click node_dataset_loaders "https://github.com/grokcv/drpca-net/blob/master/utils/data.py"
click node_trainer "https://github.com/grokcv/drpca-net/blob/master/train.py"
click node_losses "https://github.com/grokcv/drpca-net/blob/master/utils/loss.py"
click node_scheduler "https://github.com/grokcv/drpca-net/blob/master/utils/lr_scheduler.py"
click node_logger "https://github.com/grokcv/drpca-net/blob/master/utils/logger.py"
click node_network "https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py"
click node_decomposition "https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py"
click node_sparse "https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py"
click node_hypernetwork "https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py"
click node_residual "https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py"
click node_inference "https://github.com/grokcv/drpca-net/blob/master/inference.py"
click node_mask_evaluator "https://github.com/grokcv/drpca-net/blob/master/cal_from_mask.py"
click node_miou_metrics "https://github.com/grokcv/drpca-net/blob/master/utils/evaluation/TPFNFP.py"
click node_pd_fa_metrics "https://github.com/grokcv/drpca-net/blob/master/utils/evaluation/pd_fa.py"
click node_roc_metrics "https://github.com/grokcv/drpca-net/blob/master/utils/evaluation/roc_cruve.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_dataset_loaders toneBlue
class node_network,node_decomposition,node_sparse,node_hypernetwork,node_residual,node_datasets,node_checkpoints,node_predictions,node_evaluation_results toneAmber
class node_trainer,node_losses,node_scheduler,node_logger toneMint
class node_inference,node_mask_evaluator,node_miou_metrics,node_pd_fa_metrics,node_roc_metrics toneRose
class node_researcher toneIndigo
```

## Components

### Data preparation

- [Dataset loaders](https://github.com/grokcv/drpca-net/blob/master/utils/data.py): `utils/data.py`

### Detection model

- [DRPCANet](https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py): `models/DRPCANet.py`
- [Decomposition stages](https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py): `models/DRPCANet.py`
- [Dynamic sparse module](https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py): `models/DRPCANet.py`
- [Parameter generator](https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py): `models/DRPCANet.py`
- [Residual merge group](https://github.com/grokcv/drpca-net/blob/master/models/DRPCANet.py): `models/DRPCANet.py`

### Training

- [Training loop](https://github.com/grokcv/drpca-net/blob/master/train.py): `train.py`
- [Training losses](https://github.com/grokcv/drpca-net/blob/master/utils/loss.py): `utils/loss.py`
- [Learning-rate scheduler](https://github.com/grokcv/drpca-net/blob/master/utils/lr_scheduler.py): `utils/lr_scheduler.py`
- [Training logger](https://github.com/grokcv/drpca-net/blob/master/utils/logger.py): `utils/logger.py`

### Inference and evaluation

- [Inference runner](https://github.com/grokcv/drpca-net/blob/master/inference.py): `inference.py`
- [Mask evaluation](https://github.com/grokcv/drpca-net/blob/master/cal_from_mask.py): `cal_from_mask.py`
- [TP/FP/FN metrics](https://github.com/grokcv/drpca-net/blob/master/utils/evaluation/TPFNFP.py): `utils/evaluation/TPFNFP.py`
- [Pd/Fa metrics](https://github.com/grokcv/drpca-net/blob/master/utils/evaluation/pd_fa.py): `utils/evaluation/pd_fa.py`
- [ROC metrics](https://github.com/grokcv/drpca-net/blob/master/utils/evaluation/roc_cruve.py): `utils/evaluation/roc_cruve.py`

### Other components

- **Researcher**
- **Labeled datasets**
- **Model checkpoints**
- **Prediction files**
- **Evaluation results**

## Connections

- Researcher → Training loop: configures training (evidence: `README.md`)
- Researcher → Inference runner: starts inference (evidence: `README.md`)
- Researcher → Mask evaluation: runs evaluation (evidence: `README.md`)
- Labeled datasets → Dataset loaders: provides images (evidence: `README.md`)
- Dataset loaders → Training loop: supplies batches (evidence: `train.py`)
- Training loop → DRPCANet: trains model (evidence: `train.py`)
- Training loop → Training losses: computes loss (evidence: `train.py`)
- Training loop → Learning-rate scheduler: updates learning rate (evidence: `train.py`)
- Training loop → Training logger: logs progress (evidence: `train.py`)
- Training loop → TP/FP/FN metrics: updates metrics (evidence: `train.py`)
- Training loop → Model checkpoints: saves weights (evidence: `train.py`)
- DRPCANet → Decomposition stages: runs stages (evidence: `models/DRPCANet.py`)
- Decomposition stages → Dynamic sparse module: updates sparse target (evidence: `models/DRPCANet.py`)
- Dynamic sparse module → Parameter generator: generates parameters (evidence: `models/DRPCANet.py`)
- Decomposition stages → Residual merge group: merges components (evidence: `models/DRPCANet.py`)
- Inference runner → Model checkpoints: loads weights (evidence: `inference.py`)
- Inference runner → DRPCANet: runs prediction (evidence: `inference.py`)
- Inference runner → Prediction files: writes files (evidence: `inference.py`)
- Prediction files → Mask evaluation: provides predictions (evidence: `cal_from_mask.py`)
- Mask evaluation → TP/FP/FN metrics: computes overlap scores (evidence: `cal_from_mask.py`)
- Mask evaluation → Pd/Fa metrics: computes Pd and Fa (evidence: `cal_from_mask.py`)
- Mask evaluation → ROC metrics: computes ROC (evidence: `cal_from_mask.py`)
- Mask evaluation → Evaluation results: writes reports (evidence: `cal_from_mask.py`)
