This repository contains my submissions for the IOAI 2025 Radar Challenge. The task involves detecting human targets from radar data using AI, focusing on accuracy for moving and stationary objects.
Radar is a core technology in wireless communication with applications in self-driving cars, security, and robotics. The challenge simulates real-world radar signal processing, where reflections from non-target objects (trees, walls, etc.) create noise.
The dataset contains radar measurements processed into heatmaps. Each sample is a tensor of shape 7 × 50 × 181, where:
-
Indices 0–5: Input heatmaps
- Static range-azimuth
- Dynamic range-azimuth
- Static range-elevation
- Dynamic range-elevation
- Static range-velocity
- Dynamic range-velocity
-
Index 6: Target semantic label map
0: No human1: Human present
- Training samples:
Datasets/train_v2/training_set/*.mat.pt(1–1800) - Heatmaps are normalized, so no unit conversion is required.
Input: 6 radar heatmaps (6 × 50 × 181)
Output: Semantic label map (50 × 181) predicting human presence.
The goal is to maximize the weighted accuracy:
- Background points: 1 point
- Human target points: 1500 points
Score is normalized to [0,1].
The final best model is a UNet architecture with weighted BCE loss and a manually tuned threshold.
Key points:
- Input channels: 6
- Output channels: 2 (binary classification)
- Upsampling: Bilinear interpolation
- BatchNorm & ReLU after each convolution
- Dropout used to improve generalization
# Final UNet Model
from submission_model import MyModel
model = MyModel()Training notes:
- Weighted CrossEntropy:
[1.0, 1500.0]for background/human classes - Optimizer: Adam (
lr=0.001) - Scheduler: ReduceLROnPlateau (
patience=3) - Epochs: 150
- Threshold for human detection: 0.55
| Notebook | Model Variant | Public Score | Private Score |
|---|---|---|---|
baseline_0.8081.ipynb |
Basic UNet | 0.8081 | – |
baseline_0.8514.ipynb |
UNet + tuning | 0.8514 | – |
baseline_0.8799.ipynb |
UNet + better loss | 0.8799 | – |
baseline_0.9433_pub_0.957_priv.ipynb |
UNet (weighted BCE, tuned threshold) | 0.9433 | 0.957 |
💡 Best private score achieved: 0.957
Radar/
├── Competition info/
│ ├── IOAI_2025_Home_Radar.ipynb
│ └── download.png
├── Datasets/
│ ├── train_v2/
│ │ ├── training_set/
│ │ │ ├── 1.mat.pt … 1800.mat.pt
│ │ └── dataloader.py
├── Submissions/
│ ├── baseline_0.8081.ipynb
│ ├── baseline_0.8514.ipynb
│ ├── baseline_0.8799.ipynb
│ └── baseline_0.9433_pub_0.957_priv.ipynb
└── submission_model.py
- Install dependencies:
pip install torch torchvision numpy pandas matplotlib opencv-python- Load dataset using the provided
dataloader.py:
from Datasets.train_v2.dataloader import load_data
train_loader, test_loader = load_data(
base_path="Datasets/train_v2/training_set",
batch_size=10,
test_size=0.2
)- Load the model and evaluate:
from submission_model import MyModel
import torch
device = "cuda" if torch.cuda.is_available() else "cpu"
model = MyModel().to(device)
model.load_state_dict(torch.load("submission_dic.pth"))
model.eval()- Calculate weighted accuracy:
from utils import cal_accuracy # optional: define as per notebook
score = cal_accuracy(model, test_loader, bonus=1500)
print(f"IOAI Radar Score: {score:.6f}")- Multiple notebook submissions show model improvements over time.
- The private score may differ from the public leaderboard, demonstrating robustness.
- All heatmaps are preprocessed, so the model directly uses them as input.
- IOAI 2025
- IOAI 2025 GitHub Repo
- UNet architecture: Ronneberger et al., U-Net: Convolutional Networks for Biomedical Image Segmentation, 2015.