• Stars
    star
    284
  • Rank 142,633 (Top 3 %)
  • Language
    Jupyter Notebook
  • License
    MIT License
  • Created almost 4 years ago
  • Updated about 1 year ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Detect fire in images using neural nets

fire-detection-from-images

The purpose of this repo is to demonstrate a fire detection neural net model. In use this model will place a bounding box around any fire in an image.

Best results

Object detection: After experimenting with various model architectures I settled on Yolov5 pytorch model (see pytorch/object-detection/yolov5/experiment1/best.pt). After a few hours of experimentation I generated a model of [email protected] of 0.657, Precision of 0.6, Recall of 0.7, trained on 1155 images (337 base images + augmentation).

Classification: I have yet to train my own model, but 95% accuracy is reported using ResNet50

Segmentation: requires annotation

Motivation and challenges

Traditional smoke detectors work by detecting the physical presence of smoke particles. However they are prone to false detections (e.g. from toasters) and do not localise the fire particularly well. In these situations a camera solution could complement a traditional detector, in order to improve response times or to provide additional metrics such as the size and location of a fire. With the location and nature of the fire identified, an automated intervention may be possible, e.g. via a sprinkler system or drone. Also data can be sent to fire services to provide otherwise non-existent situational awareness. Particular locations I am interested in are: kitchens & living rooms, garages and outbuildings, and areas where fires might already be present but spreading outside a desired zone e.g. fire pit.

There are a couple of significant challenges & open questions:

  • For fast edge model what is 'best' architecture? Yolo3 is very popular for commecrial applications and can be implemented in keras or pytorch, baseline Yolov5 as it is currently SOTA and has deployment guide to Jetson.
  • Can the architecture be optimised since we are detecting only a single class?
  • Baseline object detection, but is there benefit to classifier or segmentation? Obj models train on mAP and Recall metrics but for our application bounding box accuracy may not be top priority? However classification models work best on a nice shot containing only the target object but in real life fire scenarios the scene will not be as simple as this scenario.
  • Tensorflow + google ecosystem or Pytorch + NVIDIA/MS? Tensorflow suffers from tf1 legacy
  • Is a single 'super' model preferable, or several specialised models? Typical categories of fire include candle flame, indoor/outdoor, vehicle
  • Gathering or locating a comprehensive, representative and balanced training dataset
  • Handling different viewpoints, different camera manufacturers and settings, and different ambient lighting conditions.
  • Since fires are so bright they can often wash out images and cause other optical disturbances, how can this be compensated for?
  • Since we expect the model will have limitations, how do we make the model results interpretable?
  • Fires can be a very wide range of sizes, from an candle flame to engulfing an entire forest - is this a small object & large object problem? Splitting dataset by fire class and training models for each class may give better results? Treat as a semantic segmentation problemn (requires reannotating dataset)?

Ideas:

  • Preprocessing images, e.g. to remove background or apply filters
  • Classifying short sequences of video, since the movement of fire is quite characteristic
  • Simulated data, identify any software which can generate realistic fires and add to existing datasets
  • Augmentations to simulate effect of different cameras and exposure settings
  • Identify any relevant guidance/legislation on required accuracy of fire detection techniques
  • Combine RGB + thermal for suppressing false positives? e.g. using https://openmv.io/blogs/news/introducing-the-openmv-cam-pure-thermal or cheaper grideye or melexsis

Approach & Tooling

  • Frames will be fed through neural net. On positive detection of fire metrics are extracted. Ignore smoke for MVP. Try various architectures & parameters to establish a 'good' baseline model.
  • Develop a lower accuracy but fast model targeted at RPi and mobile, and a high accuracy model targeted at GPU devices like Jetson. Yolo present both options, yolo4 lite for mobile and yolo5 for GPU. Alternatively there is mobilenet and tf-object-detection-api. Higher accuracy GPU model is priority.
  • Use Google Colab for training

Articles & repos

Datasets

Fire safety references

  • Locate reference covering the different kinds of fires in the home, common scenarios & interventions
  • Safety/accuracy standards for fire detectors, including ROC characteristics

Fires in the home

  • Common causes including cigarettes left smouldering, candles, electrical failures, chip pan fires
  • A large number of factors affect the nature of the fire, primarily the fuel and oxygenation, but also where the fire is, middle of the room/against a wall, thermal capacity of a room, the walls, ambient temperature, humidity, contaminants on the material (dust, oil based products, emollients etc)
  • To put out a fire a number of retardants are considered - water (not on electrical or chip pan), foam, CO2, dry powder
  • In electrical fires the electricity supply should first be isolated
  • Reducing ventillation, e.g. by closing doors, will limit fire
  • Smoke itself is a strong indicator of the nature of the fire
  • Read https://en.m.wikipedia.org/wiki/Fire_triangle and https://en.m.wikipedia.org/wiki/Combustion

Edge deployment

Our end goal of deployment to an edge device (RPi, jetson nano, android or ios) will influence decisions about architecture and other tradeoffs.

Cloud deployment

We want a solution that could also be deployed to the cloud, with minimal changes vs the edge deployment. A couple of options:

Image preprocessing and augmentation

Roboflow allows up to 3 types of augmentation per dataset, in addition to basic cropping. If we want to experiment with more augmentations we can checkout https://imgaug.readthedocs.io/en/latest/

ML metrics

  • Precision is the accuracy of the predictions, calculated as precision = TP/(TP+FP) or "what % of predictions are correct?"
  • Recall is the true positive rate (TPR), calculated as recall = TP/(TP+FN) or "what % of true positives does the model capture?"
  • The F1 score (also called the F score or the F measure) is the harmonic mean of precision and recall, calculated as F1 = 2*(precision * recall)/(precision + recall). It conveys the balance between the precision and the recall. Ref
  • The false positive rate (FPR), calculated as FPR = FP/(FP+TN) is often plotted against recall/TPR in an ROC curve which shows how the TPR/FPR tradeoff varies with classification threshold. Lowering the classification threshold returns more true positives, but also more false positives
  • mAP, IoU, precision and recall are all explained well here and here
  • IceVision returns the COCOMetric, specifically the AP at IoU=.50:.05:.95 (primary challenge metric), from here, typically referred to as the "mean average precision" (mAP)
  • [email protected]: the mean Average Precision or correctness of each label taking into account all labels. @0.5 sets a threshold for how much of the predicted bounding box overlaps the original annotation, i.e. "50% overlap"

Comments

  • Firenet is a VERY common name for model, do not use

Discussion

Demo

The best performing model can be used by running the demo app that created with Gradio. See the demo directory or try online at huggingface.co

More Repositories

1

HASS-Deepstack-object

Home Assistant custom component for using Deepstack object detection
Python
411
star
2

Hue-sensors-HASS

Support for Hue motion sensors and device tracker
Python
347
star
3

HASS-Deepstack-face

Home Assistant custom component for using Deepstack face recognition
Jupyter Notebook
202
star
4

mqtt-camera-streamer

Stream images from a connected camera over MQTT, view using Streamlit, record to file and sqlite
Python
194
star
5

HASS-data-detective

Explore and analyse your Home Assistant data
Python
181
star
6

deepstack-ui

UI for working with Deepstack
Python
121
star
7

HASS-plate-recognizer

Read number plates with https://platerecognizer.com/
Python
86
star
8

HASS-amazon-rekognition

Home Assistant Object detection with Amazon Rekognition
Jupyter Notebook
84
star
9

Useful-python

Python code and notebooks for reference
Jupyter Notebook
76
star
10

object-detection-app

Simple object detection app with streamlit
Python
73
star
11

tensorflow-lite-rest-server

Expose tensorflow-lite models via a rest API using FastAPI
Jupyter Notebook
73
star
12

coral-pi-rest-server

Perform inferencing of tensorflow-lite models on an RPi with acceleration from Coral USB stick
Jupyter Notebook
61
star
13

rpi-enviro-mqtt

Send air quality data from a Pimoroni RPi Enviro+ over MQTT
Jupyter Notebook
43
star
14

streamlit-image-juxtapose

A simple Streamlit Component to compare images in Streamlit apps. It integrates Knightlab's JuxtaposeJS
Python
33
star
15

HASS-Sighthound

Beta features for Home Assistant Sighthound integration
Python
33
star
16

Hue-remotes-HASS

PLEASE READ THE README
Python
31
star
17

Useful-python-for-medical-physics

Scripts that have been useful. Includes some analysis of EGSnrc 3ddose files
Jupyter Notebook
24
star
18

HASS-Machinebox-Facebox

Home Assistant face detection using Machinebox.io
Jupyter Notebook
24
star
19

HASS-Google-Vision

Instead use https://github.com/robmarkcole/HASS-amazon-rekognition
Jupyter Notebook
21
star
20

HASS-Machinebox-Classificationbox

Home-Assistant image classification using Machinebox.io
Jupyter Notebook
21
star
21

HASS-Google-Coral

RETIRED - instead use https://github.com/robmarkcole/HASS-Deepstack-object
Jupyter Notebook
18
star
22

text-insights-app

Upload an image of a document and extract text, names, facts and figures
Python
18
star
23

HASS-S3

Home Assistant integration for S3
Python
16
star
24

kaggle-ships-in-Google-Earth-with-YOLOv8

Applying YOLOv8 to Kaggle Ships in Google Earth dataset
Jupyter Notebook
16
star
25

streamlit-segmentation-app

streamlit app for binary segmentation
Python
16
star
26

HASS-Google-Cloud-SQL

Guide on using Google Cloud SQL as a database recorder for Home-assistant
Jupyter Notebook
15
star
27

bme680-mqtt

Publish bme680 data via MQTT
Python
14
star
28

bme680-mqtt-micropython

Publish data from the bme680 sensor over MQTT using micropython
Python
14
star
29

HASS-amazon-rekognition-text

Home Assistant integration to extract text from digital and mechanical displays using AWS rekognition
Python
14
star
30

HASS-Deepstack-scene

Home Assistant custom integration for using Deepstack scene recognition
Python
13
star
31

HASS-data-science

Data science with Home-assistant
Jupyter Notebook
13
star
32

robins-homeassistant-config

My Home-assistant config
Python
13
star
33

python-scripts-for-home-assistant

Python scripts for use with the home-assistant python_scripts component
Python
11
star
34

TrasportAPI-HASS

UK bus & train status TransportAPI Home-assistant component ADDED TO HA
Jupyter Notebook
11
star
35

deepstack-python

Unofficial python API for DeepStack
Jupyter Notebook
11
star
36

hassio-addons

Addons for Home Assistant
Dockerfile
10
star
37

robins-hassio-config

My home-assistant config from my experimental hassio instance
10
star
38

satellite-imagery-projects

Jupyter Notebook
10
star
39

HASS-filesize-sensor

Custom component for displaying the size (in MB) of files - ADDED TO HA 0.64
Jupyter Notebook
10
star
40

yolov5-fastapi

FastAPI app exposing yolov5 object detection
Python
10
star
41

simple-fastAPI-webapp

Use fastAPI to generate html web app that will serve a local directory or S3 bucket of images
Python
10
star
42

HASS-Clarifai

Home-Assistant image tagging with Clarifai https://clarifai.com/developer/guide/
Jupyter Notebook
9
star
43

HASS-BBC-envirobit

Stream sensor readings from the BBC micropython envirobit to Home-Assistant
Python
9
star
44

Medical_physics_imageJ

Scripts and plugins for performing analysis of images in imageJ
Python
9
star
45

deepstack-analytics

Analytics with deepstack
Jupyter Notebook
9
star
46

HASS-hammerspoon

hammerspoon script to toggle a Home-assistant switch on wake/sleep of my MacBook
Lua
8
star
47

HASS-circuitpython-air-quality-sensor-node

A circuitpython board with various air quality sensors, data processed by Home Assistant
Jupyter Notebook
8
star
48

HASS-kalman-filter

Home-Assistant custom integration adding a 1D Kalman filter
Jupyter Notebook
8
star
49

pan-tilt-hat-HASS

Custom component adding the pimoroni pan-tilt-hat to Home-assistant: tested in HA 0.94 ok
Python
7
star
50

tensorflow_files_for_home_assistant_component

All the files you need for the Home-Assistant tensorflow component
Python
7
star
51

London-tube-status

Fetch the tube status in a python dictionary
Jupyter Notebook
5
star
52

arxiv-github-scanner

Streamlit app for querying the arxiv api
Python
5
star
53

HASS-folder-sensor

Home-assistant custom component for monitoring the contents of a folder - ADDED TO HA 0.64
Jupyter Notebook
5
star
54

circuitpython-on-home-assistant

Programming and managing circuitpython boards from Home-Assistant
Python
5
star
55

HASS-Machinebox-Tagbox

Home-Assistant custom integration for image tag detection using Tagbox
Python
5
star
56

aerotech

Class to enable control of the Ensemble controllers by Aerotech using TCP
Jupyter Notebook
5
star
57

HASS-rest-image-process

Home-assistant component for image processing via local REST API machinebox.io
Python
4
star
58

aws-lambda-pytorch-image-classification-example

Example of implementing a pytorch image classifier service using AWS lambda
Python
4
star
59

streamlit-codespace

tryout Streamlit in a Github Codespace
4
star
60

wildlife-camera-trap-data-visualsation-app

Visualise wildlife camera trap data
4
star
61

robmarkcole

3
star
62

HASS-Yolo

Object detection in Home-Assistant using Yolo
3
star
63

Hue-sensors

Standalone package for parsing the Hue API data for Hue sensors
Jupyter Notebook
3
star
64

streamlit-image-table-pandas-app

Place images in a table using pandas and generate a shareable report
HTML
3
star
65

RF-doorbell-serial

Using an Arduino with RF receiver to detect when my doorbell has been pressed
Arduino
3
star
66

arduino-tensorflow-example

Code and results from https://medium.com/p/7daf95b4157
C
3
star
67

HASS-data-detective-analysis

Analysis using the HASS-data-detective package
Jupyter Notebook
3
star
68

tagbox_python

A python script to teach Machinebox/Tagbox
Python
2
star
69

fastpages-blog

My blog
Jupyter Notebook
2
star
70

fastAPI-chatGPT-experiment

Use chatGPT to create a simple fastAPI app
Python
2
star
71

quickstart-with-geotiffs

A quickstart guide to working with geotiffs
Jupyter Notebook
2
star
72

rpi-rf-mqtt

Monitor a 433 MHz signal and post to an MQTT topic - WIP - do not use
Python
2
star
73

jupyter-codespace

Tryout running jupyter notebooks in a Github Codespace
Jupyter Notebook
2
star
74

yolov5-ui

Web ui for yolov5 using Streamlit
Python
2
star
75

jupyterlite-playground

Jupyter Notebook
2
star
76

London-Air-Quality

Queries the London air quality data feed provided by Kings College London
Jupyter Notebook
2
star
77

HASS-Photo-browser

Instead use media_dirs: local: /config/images/
Jupyter Notebook
2
star
78

classificationbox_python

Python script for teaching Classificationbox image classes
Jupyter Notebook
2
star
79

simplehound

Unofficial python API for Sighthound Cloud
Jupyter Notebook
1
star
80

HASS-mqtt-camera-forwarder

Custom integration which forwards a camera feed onto an MQTT topic
Python
1
star
81

Hue-sensors-phue

Identical to Hue-sensors but using the phue package
Jupyter Notebook
1
star
82

robins-google-colaboratory

My Google CoLaboratory notebooks
Jupyter Notebook
1
star
83

artist-classification-with-ML

Train an "off-the-shelf" deep image network with color images of Impressionist paintings from the web (Seurat, Signac, Monet, Degas, Renoir, ...) for classification of both artist and simple subject matter
Jupyter Notebook
1
star
84

google-app-engine-flask-example

Working through Building a Python 3 App on App Engine tutorial
Dockerfile
1
star
85

HASS-SigFox

SigFox component for Home-Assistant
Jupyter Notebook
1
star
86

reproducible-satellite-image-analysis

Use Binder for reproducible satellite image analysis
Jupyter Notebook
1
star
87

water-sensor-micropython

Simple micropython script to detect water using a dirt cheap sensor
Python
1
star
88

HASS-rest-camera

Custom component for a camera which displays images served by a REST API
Python
1
star
89

umap-image-embedding-streamlit-app

App to explore umap image embeddings for MNIST class datasets
Jupyter Notebook
1
star