Skip to content

Repository files navigation

Radar Human Detection – IOAI 2025

Overview

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.


Dataset

The dataset contains radar measurements processed into heatmaps. Each sample is a tensor of shape 7 × 50 × 181, where:

  • Indices 0–5: Input heatmaps

    1. Static range-azimuth
    2. Dynamic range-azimuth
    3. Static range-elevation
    4. Dynamic range-elevation
    5. Static range-velocity
    6. Dynamic range-velocity
  • Index 6: Target semantic label map

    • 0: No human
    • 1: Human present

Data Split

  • Training samples: Datasets/train_v2/training_set/*.mat.pt (1–1800)
  • Heatmaps are normalized, so no unit conversion is required.

Task

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].


Model

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

Results

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


Repository Structure

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

Usage

  1. Install dependencies:
pip install torch torchvision numpy pandas matplotlib opencv-python
  1. 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
)
  1. 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()
  1. 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}")

Notes

  • 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.

References

About

AI-powered human detection from radar heatmaps using UNet for IOAI 2025.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages