unicornwhodev's picture
Update README.md
82d7af7 verified
|
Raw History Blame Contribute Delete
7.6 kB
metadata
license: bsd-3-clause
tags:
  - fireviewer
  - convnext
  - torchvision
  - fire
  - smoke
  - image-classification
library_name: pytorch
pipeline_tag: image-classification
datasets:
  - fireviewer/fireviewer_fire_smoke_flame_v3_native
model-index:
  - name: FireViewer ConvNeXt-Tiny · Context
    results:
      - task:
          type: image-classification
          name: Image Classification
        dataset:
          type: fireviewer/fireviewer_fire_smoke_flame_v3_native
          name: FireViewer · validation avec catégorie
          config: default
          split: validation
          revision: 8c8b197fa1c928217529a04bff434fb70a66614e
        metrics:
          - type: f1
            name: F1 macro (%)
            value: 76.92
          - type: accuracy
            name: Accuracy (%)
            value: 87.72

FireViewer · Classification de contexte

ConvNeXt-Tiny · Six catégories de contexte

Classer une image selon le contexte visuel du feu ou de la fumée. Ce modèle PyTorch produit une catégorie parmi six ; les cibles de classification proviennent des annotations Luna du corpus FireViewer.

Architecture Entrée F1 macro validation Accuracy validation
ConvNeXt-Tiny 920 × 920 · RGB 76,92 % 87,72 %

Checkpoint disponible

Fichier Contenu
best.pth Meilleur checkpoint de validation ; recommandé pour l’inférence.
last.pth Dernier checkpoint complet conservé pour une éventuelle reprise.
architecture.json Architecture Torchvision et provenance de l’initialisation.
class_mapping.json Correspondance exacte des six indices de sortie.

Catégories prédites

ID Catégorie Sens de l’annotation
0 human_useful_fire Usage humain contrôlé : feu de camp, barbecue, activité agricole ou industrielle.
1 domestic_origin Foyer, poêle, cuisson ou contexte domestique identifiable.
2 suspect_origin Origine ou détails insuffisants ; feu ou fumée potentiellement dangereux.
3 fire_road_urban Véhicules, routes ou incident en milieu bâti.
4 forest_natural_area_wildfire Feu apparent de végétation non maîtrisé en zone naturelle.
5 negative Ni feu ni fumée visibles selon l’annotation de contexte.

Ces catégories décrivent le contexte apparent d’une image. Elles ne forment pas une échelle ordinale de gravité. suspect_origin ne signifie pas une origine criminelle établie ; il couvre une origine ou des détails insuffisants avec un feu ou une fumée potentiellement dangereux.

Résultats sur la validation

Évaluation du meilleur checkpoint sur 11 237 images disposant d’une catégorie, à l’époque 5. La prédiction est la classe au logit maximal parmi les six sorties.

ID Contexte Précision Rappel F1 Images
0 Usage contrôlé 62,39 % 78,46 % 69,51 % 260
1 Contexte domestique 47,46 % 58,33 % 52,34 % 48
2 Origine suspecte / indéterminée 74,71 % 75,26 % 74,98 % 2292
3 Route / urbain 88,35 % 84,57 % 86,42 % 1121
4 Feu en zone naturelle 80,20 % 87,47 % 83,68 % 1181
5 Négatif 95,76 % 93,43 % 94,58 % 6335

Le F1 macro donne le même poids aux six classes. L’accuracy agrège toutes les images et dépend davantage des classes fréquentes. La classe domestique ne compte que 48 images de validation : son score est plus sensible à quelques erreurs.

Évolution de la validation et F1 par classe

Ces chiffres évaluent la concordance avec les catégories Luna du split de validation. Ils ne constituent ni une validation indépendante de la dangerosité réelle ni une mesure sur le test réservé.

Inférence avec PyTorch

pip install torch torchvision pillow huggingface_hub
import torch
from PIL import Image
from torch import nn
from torchvision.models import convnext_tiny
from torchvision.transforms import functional as TF
from huggingface_hub import hf_hub_download

path = hf_hub_download(
    "fireviewer/convnext-tiny-alert-categories-v2",
    "best.pth",
)
checkpoint = torch.load(path, map_location="cpu", weights_only=False)
labels = checkpoint["classes"]
size = int(checkpoint["image_size"])

model = convnext_tiny(weights=None)
model.classifier[2] = nn.Linear(model.classifier[2].in_features, len(labels))
model.load_state_dict(checkpoint["model"])
model.eval()

with Image.open("image.jpg") as image:
    image.draft("RGB", (size, size))
    image = image.convert("RGB").resize((size, size), Image.Resampling.BILINEAR)
    tensor = TF.normalize(
        TF.to_tensor(image),
        mean=[0.485, 0.456, 0.406],
        std=[0.229, 0.224, 0.225],
    ).unsqueeze(0)

with torch.inference_mode():
    logits = model(tensor)
    category = labels[int(logits.argmax(dim=1).item())]
print(category)

Le prétraitement doit rester cohérent avec le run : RGB, redimensionnement direct en 920 × 920, interpolation bilinéaire, pixels dans [0, 1], puis normalisation ImageNet. Le modèle n’utilise pas le letterboxing du détecteur YOLO.

Données et paramètres du run

Paramètre Valeur
Base torchvision.convnext_tiny, initialisation IMAGENET1K_V1
Tête de classification Couche linéaire finale à 6 sorties
Dataset fireviewer/fireviewer_fire_smoke_flame_v3_native
Révision des données 8c8b197fa1c928217529a04bff434fb70a66614e
Catégories manquantes 191 valeurs nulles exclues de la classification
GPU NVIDIA L4
Résolution 920 × 920
Batch physique / accumulation 8 / 4, soit un batch effectif de 32
Optimiseur AdamW, LR de référence 0.0003
Plan de LR Warmup de 3 époques puis décroissance cosinus
Fonction de perte Entropie croisée pondérée, label_smoothing=0.05
Précision BF16
Sélection du best F1 macro de validation
Patience configurée / plafond 7 validations sans amélioration / 75 époques
Époques complètes de ce checkpoint 5

Les splits du corpus sont conservés. Les images sans catégorie ne sont pas transformées en exemples negative.

Usages et limites

Le modèle peut servir à explorer, filtrer ou regrouper des images par contexte visuel. Il classe l’image entière : il ne produit pas de boîtes et n’identifie pas une distance caméra / foyer.

Une même image peut contenir plusieurs contextes, alors que le modèle ne renvoie qu’une catégorie. Les scènes ambiguës et les différences entre caméras, éclairages ou environnements peuvent diminuer les performances. Les catégories d’origine sont visuelles et ne déterminent pas avec certitude la cause d’un incendie.

Licence et traçabilité

Licence déclarée : BSD-3-Clause. Les conditions des images sont décrites dans la fiche du dataset. Les poids évalués proviennent de la révision 12dd4da71da5dd4264c63e07cab5f41c3a007b77 ; cette mise à jour de documentation ne modifie pas les checkpoints.

Projet : FireViewer · Documentation mise à jour : 12 novembre 2026.