π‘ Radar
Detect humans in radar heatmaps β image classification on data that isn't photos.
πThe task, in plain English
Given radar rangeβazimuth heatmaps (static and dynamic maps from a radar sensor), decide whether a human is present. The data looks nothing like a photo β it's a 2-D intensity map β but that doesn't matter: it's a grid of numbers, so it's an image to a CNN.
| Input | Radar heatmap tensors (static + dynamic channels) |
|---|---|
| Output | Human present: yes/no (classification) |
| Really tests | Running an image-classification pipeline on unfamiliar data; channel handling; not panicking at non-photo inputs |
π§The baseline you're given
A small CNN (or simple classifier) trained on the raw heatmaps with a standard loop. Limitations: minimal architecture, no normalization/augmentation strategy tuned to radar data, static and dynamic maps possibly underused as complementary channels.
πBaseline vs. solution
- Small CNN on raw maps
- Channels handled naively
- Little augmentation, default preprocessing
- Stack static + dynamic maps as channels of one input so the network sees both views at once
- Normalize per channel (radar intensities have very different scales than photos)
- Transfer learning: adapt a pretrained ResNet18 β replace the first conv (accept N channels instead of 3) and final layer (2 classes)
- Augment thoughtfully: flips may be fine, but rotations can break range/azimuth semantics β think before augmenting non-photo data
π§Explain it like I'm brand new
Key mental unlock: a CNN doesn't know what a photo is. It sees a grid of numbers with local structure. Spectrograms, radar maps, satellite bands, even game boards β if nearby values relate to each other, CNN recipes apply. IOAI loves this trick: Speech Detector (spectrograms), Weather (satellite), Night Watch 2026 (audio-as-image). Learn the ResNet transfer recipe once, reuse forever.
π¬The Gemma 4 playthrough (2000-token limit)
torchvision resnet18 (weights already local). My input is a 2-channel 64x64 tensor, 2 output classes. Give ONLY the code to modify the first conv layer to accept 2 channels and the fc layer for 2 classes. Max 12 lines.
import torch.nn as nn
from torchvision.models import resnet18
m = resnet18()
m.load_state_dict(torch.load('resnet18.pth'))
m.conv1 = nn.Conv2d(2, 64, kernel_size=7, stride=2, padding=3, bias=False)
m.fc = nn.Linear(m.fc.in_features, 2)π―Takeaways & what Day 1 might do with this
- Pattern family: "weird data as images". The 2025 Contest Day 1 shipped a Radar v2 extension β new twist, same pipeline. If your at-home pipeline is clean, Day 1 is a re-run with edits.