File size: 7,399 Bytes
1ab14fa
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# 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.