# FireViewer v2.5 · native PyTorch cascade [Presentation](../README.md) · [Choose a component](CHOOSING_VARIANTS.md) · [Dataset guide](DATASET_V25.md) · [Update log](../CHANGELOG.md) Four selected native PyTorch checkpoints implement full-image proposals, visible-flame refinement, one visual anchor per accepted flame crop and a separate smoke-compatibility branch. The published cascade diagnostic used PyTorch on NVIDIA L4. | Stage | Native checkpoint | Input | | --- | --- | --- | | Generate single-class probable_fire candidate regions from full images. | [rfdetr-medium-probable-fire-v2.5](https://huggingface.co/fireviewer/rfdetr-medium-probable-fire-v2.5) | 1088 px | | Find visible flames inside probable-fire proposals. | [rfdetr-medium-visible-flame-v2.5](https://huggingface.co/fireviewer/rfdetr-medium-visible-flame-v2.5) | 1088 px | | Predict one visual flame anchor for each detected flame box. | [dinov2-small-visible-flame-monopoint-v2.5](https://huggingface.co/fireviewer/dinov2-small-visible-flame-monopoint-v2.5) | 448 px | | Estimate fire-associated smoke compatibility with an abstention interval. | [dinov2-small-fire-associated-smoke-v2.5](https://huggingface.co/fireviewer/dinov2-small-fire-associated-smoke-v2.5) | 448 px | ![Native PyTorch cascade](media/cascade-v25.png) ## Functional routing ```mermaid flowchart TD I[RGB whole image] --> P[RF-DETR M probable_fire · 1088] P --> R[score .10 · NMS .75 · at most 6 ROI] R --> V[30% context · min 128px · RF-DETR M visible_flame · 1088] V --> F[Flame boxes · score .25 · reprojection · global NMS .60] F --> K[Tight flame crops · DINOv2-S heatmap · 448] K --> A[One flame_base_anchor per detected flame] V --> G[ROI without a local confirmed flame] G --> S[45% context · min 160px · DINOv2-S smoke classifier · 448] S --> T[Calibrated compatibility · low / ambiguous / high] ``` Context is added on each side: expanded width and height are multiplied by `1 + 2 × context`, before the minimum side and image clipping. RF-DETR receives NCHW float32 RGB resized with half-pixel bilinear interpolation, **no antialias**, with RGB converted to float before resize; normalization is ImageNet mean `[.485,.456,.406]`, std `[.229,.224,.225]`. Point crops use Pillow bilinear; smoke crops use Pillow bicubic. All models stretch to the specified square size. The supplied NumPy/Pillow runner preserves these differences. Proposal score ≥0.10, NMS IoU 0.75, limit 6; visible score ≥0.25 and global image-space NMS 0.60, limit 100. Tight point crops use floor for the minimum and ceil for the maximum. The heatmap point is the argmax followed by a local 5×5 softmax expectation at heatmap pixel centers. It is an appearance anchor, **not an ignition location**, geographic position or independently calibrated source confidence. Smoke temperature is **1.1490650177001953**. Low compatibility ≤**0.30160276398937463**; high compatibility ≥**0.8199750333466715**; values between these are ambiguous and do not raise the benchmark image alarm. Smoke is a binary visual compatibility classifier. It supplies no mask, smoke-core, smoke point or origin. No learned fire-group association is performed. ## Recorded external diagnostic · 680 images Frozen PyTorch FP32 pipeline on L4; no fitting or threshold selection on this panel. Case mix: 179 flame, 70 smoke, 431 negative images, 229 visual families. There may be several views of a family; families are not verified independent fire incidents. | Endpoint | Result | Numerator / denominator | |---|---:|---:| | Positive-image alarm recall | 88.35% | 220 / 249 | | Sampled image alarm precision | 81.78% | 220 / 269 | | Negative-image false-alarm rate | 11.37% | 49 / 431 | | Flame-image any-branch alarm recall | 99.44% | 178 / 179 | | Smoke-only any-branch alarm recall | 60.00% | 42 / 70 | | Flame bbox recall, IoU ≥ .5 | 25.64% | 231 / 901 | | Flame bbox precision, IoU ≥ .5 | 27.57% | 231 / 838 | | Tiny flame recall | 22.59% | 178 / 788 | | Multi-flame instance recall | 24.72% | 219 / 886 | | Expanded-proposal containment | 97.89% | 882 / 901 | | Point inside matched GT flame bbox | 97.84% | 226 / 231 | | Smoke-only image with false flame | 10.00% | 7 / 70 | An image alarm is any visible-flame output **or** high smoke compatibility; it is not a statement that every flame has a precise box. There were TP=220, FP=49, FN=29, TN=382 for image alarms; flame localization TP=231, FP=607, FN=670. Tiny means bbox area/image area ≤ `(32/1088)^2`, a protocol bin rather than original-pixel COCO-small. Proposal containment means at least 90% of the GT box lies within an expanded proposal. The 229-image one-representative-per-family panel still has tiny recall 101/399=25.31%. **Interpretation:** stage 1 generally provides coverage, while precise instance separation/localization of small visible flames remains the primary weakness. In the inspected worst-error gallery, several small annotated flames are merged into a broader detection. This is an observed error pattern, not a proven causal attribution for every miss. Good image suspicion and low box recall can coexist. The point-in-box statistic measures consistency only: no independent human flame-base GT is available, so PCK and base accuracy are unmeasured. Smoke-only labels establish visible smoke, not independently verified fire association. Mean end-to-end inference latency was 226.82 ms/image, median 172.44 ms, P95 458.01 ms on **L4 PyTorch**. All invoked stages, decoding, preprocessing, NMS and reprojection are included; model loading/warmup are excluded. Stage calls: proposal 680, visible 1636, point 838, smoke 855. These measurements describe the frozen native PyTorch cascade on NVIDIA L4. The image-level SHA/perceptual novelty audit covered all known historical splits including private sources and legacy FASDD/Pyro-SDIS manifests. Detected neighbors and suspected FLAME1 scenes were excluded before inference. No detected duplicate proves neither unseen events nor complete unknown provenance. Sources: [DIFD](https://zenodo.org/records/15860575) and [SAINetset v8](https://huggingface.co/datasets/SAINetset/SAINetset_v8.0), whose images may include synthetic/donated material. Only 208 retained images had a visual QA pass; there is no independent human annotation audit. Ratios describe this selected correlated panel, with no independent-event confidence intervals or deployment certification. ## Sources [Retained scientific source](https://huggingface.co/fireviewer/litert-models/blob/261c16b47744b893261481da089a4d9d5de569aa/docs/CASCADE_V25.md) · [Original diagnostic report](https://huggingface.co/fireviewer/litert-models/blob/261c16b47744b893261481da089a4d9d5de569aa/reports/cascade-v25-680/REPORT.md) · [Original metric JSON](https://huggingface.co/fireviewer/litert-models/blob/261c16b47744b893261481da089a4d9d5de569aa/reports/cascade-v25-680/metrics.json) · [Frozen release manifest](https://huggingface.co/fireviewer/litert-models/blob/261c16b47744b893261481da089a4d9d5de569aa/cascade/v2.5/source-release-manifest.json). Source-specific rights and the original evidence dates remain applicable. This English presentation extracts native-model routing and diagnostic results from the retained records; it does not rerun the cascade.