ResNet3D-34 for Tornado Detection
A larger 3D CNN variant trained on temporal dual-polarimetric NEXRAD radar sequences. This is the 64M parameter version -- see resnet3d-18-tornet for the smaller, equally performant 33M version.
Model Description
Same dual-head architecture as ResNet3D-18 but with deeper residual blocks (layers=[3,4,6,3]).
| Parameter | Value |
|---|---|
| Backbone | ResNet3D-34 (BasicBlock, layers=[3,4,6,3]) |
| Parameters | 63.7M |
| Input shape | (B, 24, 8, 128, 128) |
| Output shape | (B, 4) |
Performance
Test Set (3,685 events)
| Head | AUC | CSI | F1 | Precision | Recall |
|---|---|---|---|---|---|
| Detection | 0.898 | 0.540 | 0.701 | 0.596 | 0.851 |
| Prediction | 0.988 | 0.865 | 0.928 | 0.924 | 0.932 |
| Combined | 0.943 | -- | -- | -- | -- |
Key Finding
ResNet3D-34 (64M params) performs nearly identically to ResNet3D-18 (33M params) on this task (combined AUC 0.943 vs 0.942). The smaller model is recommended for deployment due to faster inference and lower memory usage.
Training
| Parameter | Value |
|---|---|
| Optimizer | AdamW (lr=1e-3) |
| Batch size | 512 |
| Epochs | 20 |
| GPU | NVIDIA H200 (144GB) |
Usage
Same as ResNet3D-18 -- see resnet3d-18-tornet for full usage instructions and deployment guidance.
from model_resnet3d import DualHeadResNet3D
model = DualHeadResNet3D(in_channels=24, arch="resnet34")
state = torch.load("best.pt", map_location="cpu")
model.load_state_dict(state["model_state_dict"])
Citation
@model{resnet3d-34-tornet,
title={ResNet3D-34 for Temporal Radar Tornado Detection},
author={DeepGuess},
year={2026},
url={https://huggingface.co/deepguess/resnet3d-34-tornet},
}
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support