이미지에서 화재 감지
이 저장소의 목적은 화재 감지 신경망 모델을 시연하는 것입니다. 사용 시 이 모델은 이미지의 모든 불 주위에 경계 상자를 배치합니다.
최상의 결과
객체 감지: 다양한 모델 아키텍처를 실험한 후 Yolov5 pytorch 모델을 선택했습니다( pytorch/object-detection/yolov5/experiment1/best.pt
참조). 몇 시간의 실험 끝에 [email protected]
0.657, 정밀도 0.6, 재현율 0.7의 모델을 생성하고 1155개 이미지(337개 기본 이미지 + 확대)에 대해 훈련했습니다.
분류: 아직 자체 모델을 학습시키지 않았지만 ResNet50을 사용하여 95% 정확도가 보고되었습니다.
세분화: 주석이 필요합니다.
동기부여와 도전
기존 연기 감지기는 연기 입자의 물리적 존재를 감지하여 작동합니다. 그러나 이들은 잘못 감지하는 경향이 있으며(예: 토스터기 등) 화재 위치를 특히 잘 파악하지 못합니다. 이러한 상황에서 카메라 솔루션은 응답 시간을 개선하거나 화재 규모 및 위치와 같은 추가 지표를 제공하기 위해 기존 감지기를 보완할 수 있습니다. 화재의 위치와 성격이 확인되면 스프링클러 시스템이나 드론 등을 통해 자동화된 개입이 가능할 수 있습니다. 또한 존재하지 않는 상황 인식을 제공하기 위해 데이터를 소방서에 전송할 수도 있습니다. 제가 관심을 갖고 있는 특정 위치는 부엌과 거실, 차고와 별채, 화재가 이미 존재하지만 원하는 구역 외부로 퍼지는 구역(예: 화덕)입니다.
몇 가지 중요한 과제와 공개 질문이 있습니다.
- 빠른 에지 모델의 경우 '최고' 아키텍처는 무엇입니까? Yolo3은 상용 애플리케이션에 매우 인기가 있으며 현재 SOTA이고 Jetson에 대한 배포 가이드가 있으므로 keras 또는 pytorch, 기준 Yolov5에서 구현할 수 있습니다.
- 단일 클래스만 감지하므로 아키텍처를 최적화할 수 있습니까?
- 기본 객체 감지이지만 분류기 또는 세분화에 이점이 있습니까? Obj 모델은 mAP 및 Recall 측정 항목을 학습하지만 애플리케이션 경계 상자 정확도가 최우선 순위가 아닐 수 있습니까? 그러나 분류 모델은 대상 개체만 포함된 멋진 장면에서 가장 잘 작동하지만 실제 화재 시나리오에서는 장면이 이 시나리오만큼 단순하지 않습니다.
- Tensorflow + Google 생태계 또는 Pytorch + NVIDIA/MS? Tensorflow는 tf1 레거시로 인해 어려움을 겪고 있습니다.
- 단일 '슈퍼' 모델이 선호됩니까, 아니면 여러 개의 특수 모델이 선호됩니까? 화재의 일반적인 범주에는 촛불, 실내/실외, 차량 등이 있습니다.
- 포괄적이고 대표적이며 균형 잡힌 교육 데이터 세트 수집 또는 찾기
- 다양한 시점, 다양한 카메라 제조업체 및 설정, 다양한 주변 조명 조건을 처리합니다.
- 불은 너무 밝아서 종종 이미지를 씻어내고 다른 광학적 교란을 일으킬 수 있는데, 이를 어떻게 보상할 수 있습니까?
- 모델에 한계가 있을 것으로 예상하는데 어떻게 모델 결과를 해석 가능하게 만들 수 있을까요?
- 화재는 촛불부터 숲 전체를 삼키는 것까지 매우 다양한 규모로 발생할 수 있습니다. 이것이 작은 물체와 큰 물체의 문제입니까? 화재 등급별로 데이터세트를 분할하고 각 등급별로 모델을 훈련하면 더 나은 결과를 얻을 수 있을까요? 의미론적 분할 문제로 처리하시겠습니까(데이터세트에 다시 주석을 달아야 함)?
아이디어:
- 이미지 전처리(예: 배경 제거 또는 필터 적용)
- 불의 움직임이 매우 특징적이므로 짧은 비디오 시퀀스를 분류합니다.
- 시뮬레이션된 데이터, 실제 화재를 발생시킬 수 있는 소프트웨어를 식별하고 기존 데이터 세트에 추가
- 다양한 카메라 및 노출 설정의 효과를 시뮬레이션하기 위한 확장
- 화재 감지 기술에 필요한 정확성에 대한 관련 지침/법규를 식별합니다.
- 오탐을 억제하기 위해 RGB + 열을 결합하시겠습니까? 예: https://openmv.io/blogs/news/introducing-the-openmv-cam-pure-thermal 또는 더 저렴한 Grideye 또는 melexsis 사용
접근 방식 및 툴링
- 프레임은 신경망을 통해 공급됩니다. 화재가 긍정적으로 감지되면 측정항목이 추출됩니다. MVP에 대한 연기를 무시하십시오. 다양한 아키텍처 및 매개변수를 사용해 '좋은' 기준 모델을 설정하세요.
- RPi 및 모바일을 대상으로 하는 정확도는 낮지만 빠른 모델과 Jetson과 같은 GPU 장치를 대상으로 하는 정확도가 높은 모델을 개발합니다. Yolo는 모바일용 yolo4 lite와 GPU용 yolo5라는 두 가지 옵션을 모두 제공합니다. 대안으로 mobilenet과 tf-object-Detection-api가 있습니다. 더 높은 정확도의 GPU 모델이 우선입니다.
- 교육에 Google Colab을 사용하세요.
기사 및 저장소
- Fire_Detection -> gettyimages의 이미지 데이터세트와 함께 Jetson nano 및 Yolov5를 사용하는 화재 및 연기 감지 시스템
- Roboflow와 가중치 및 편향을 사용한 YOLOv5 산불 연기 감지
- Yolov5-Fire-Detection -> Kaggle 데이터로 훈련된 잘 문서화된 모델
- pyimagesearch를 통한 Keras 및 딥 러닝을 사용한 화재 및 연기 감지 - Google 이미지를 스크랩하여 수집한 데이터세트(1315개의 화재 이미지가 있는 데이터세트에 대한 링크 제공), tf2 및 keras 순차 CNN을 사용한 이진 화재/비화재 분류, 92% 정확도 달성, 결론은 다음과 같습니다. 더 나은 데이터 세트가 필요합니다
- YOLOv3를 사용하여 처음부터 화재 감지 - 여기에서는 LabelImg를 사용한 주석, Google 드라이브 및 Colab을 사용한 주석, Heroku를 통한 배포 및 Streamlit을 사용한 viz에 대해 설명합니다. Devdarshan Mishra의 작품
- 화재 및 총 감지 -> 이미지뿐만 아니라 비디오에서도 yolov3를 사용하여 화재 및 총 감지. 훈련 코드, 데이터 세트 및 훈련된 가중치 파일을 사용할 수 있습니다.
- YOLOv3-Cloud-Based-Fire-Detection -> 클라우드에서 YOLOv3를 사용하여 사용자 정의 개체를 감지합니다. 주어진 프레임에서 화재를 감지하도록 훈련되었습니다. 산불, 화재사고 등에 크게 활용될 수 있습니다.
- 화재 감지-yolov4 -> Yolo v4 모델 훈련
- midasklr/FireSmokeDetectionByEfficientNet - EfficientNet, Python 3.7, PyTorch1.3을 사용한 화재 및 연기 분류 및 감지, 활성화 맵 시각화, 열차 및 추론 스크립트 포함
- arpit-jadon/FireNet-LightWeight-Network-for-Fire-Detection - 실시간 IoT 애플리케이션(예: RPi)을 위한 특수 경량 화재 및 연기 감지 모델, 정확도 약. 95%. 논문 https://arxiv.org/abs/1905.11922v2
- tobybreckon/fire-Detection-cnn - 몇 가지 데이터 세트에 대한 링크
- EmergencyNet - 드론으로 화재 및 기타 긴급 상황을 식별합니다.
- CCTV 이미지를 이용한 화재 감지 — Monk Library 애플리케이션 - kaggle 데이터세트, mobilenet-v2,densensenet121 및densensenet201에 대한 keras 분류자
- fire-Detection-cnn - 실시간 범위 내에서 비디오(또는 스틸) 이미지의 화재 픽셀 영역을 자동으로 감지합니다. 전체 이미지 바이너리 화재 감지에 대해 최대 0.93의 정확도(1), 슈퍼픽셀 위치 파악 프레임워크 내에서 0.89의 정확도를 달성할 수 있습니다.
- 딥 러닝 및 OpenCV를 사용한 조기 화재 감지 시스템 - 실내 및 실외 화재 감지를 위한 맞춤형 InceptionV3 및 CNN 아키텍처입니다. 훈련용 이미지 980개 및 검증용 이미지 239개, 훈련 정확도 98.04 및 검증 정확도 96.43, 웹캠의 실시간 감지에 사용되는 openCV - https://github.com/jackfrost1411/fire-의 코드 및 데이터 세트(여기에서 이미 참조됨) 발각
- Smoke-Detection-using-Tensorflow 2.2 - EfficientDet-D0, 733 주석이 달린 연기 이미지, Roboflow 블로그에 언급됨
- 화재 감지를 위한 항공 영상 데이터 세트: 무인 항공기(UAV)를 사용한 분류 및 분할 - 이진 분류기, 테스트 세트 정확도 76%
- 앙상블 학습 기반 산불 감지 시스템 -> 먼저 두 명의 개별 학습자인 Yolov5와 EfficientDet을 통합하여 화재 감지 프로세스를 수행합니다. 둘째, 또 다른 개별 학습자 EfficientNet은 오탐을 피하기 위해 글로벌 정보를 학습하는 역할을 담당합니다.
- GradCAM이 설명하는 다중 라벨 분류 모델을 갖춘 화재 경보 시스템 -> CAM을 사용하여 이미지의 어느 영역이 예측을 담당하는지 시각화하고 합성 데이터를 사용하여 부족한 클래스를 채워 클래스 분포의 균형을 유지합니다.
- fast.ai 모델 학습 및 Gradio 앱을 통한 배포
- Deepfire -> ResNet50 및 EfficientNetB7을 사용하여 UAV에서 산불 인식 수행
- 산불-연기 감지 -> 산불 연기 감지를 위한 Faster-RCNN 아키텍처 기반 컨볼루셔널 신경망 모델
- FireNet-LightWeight-Network-for-Fire-Detection -> ArXiv 논문을 사용한 실시간 IoT 애플리케이션을 위한 특수 경량 화재 및 연기 감지 모델
- 산불-연기 감지-연구 -> 종이를 이용한 조기 산불 연기 감지
데이터세트
- FireNET - 약. Pascal voc XML 형식의 경계 상자가 있는 500개의 화재 이미지. Repo에는 성능을 알 수 없는 imageai를 사용하여 훈련된 Yolo3 모델이 포함되어 있습니다. 그러나 평균 275x183픽셀의 작은 이미지는 네트워크가 학습할 텍스처 특징이 적다는 것을 의미합니다.
- Kaggle CCTV의 화재 감지 - 이미지 및 비디오, 이미지는 비디오에서 추출됩니다. 모든 이미지는 3-4개의 비디오에서만 가져온 상대적으로 작은 데이터 세트입니다. 테스트할 비디오가 있으므로 현재 작업과 매우 관련이 있습니다. 일반/연기/화재 분류 작업을 위해 구성된 데이터 세트, 경계 상자 주석 없음
- cair/Fire-Detection-Image-Dataset - 이 데이터세트에는 많은 일반 이미지와 111개의 화재 이미지가 포함되어 있습니다. 데이터세트는 실제 상황을 반영하기에는 매우 불균형합니다. 이미지 크기는 적당하지만 주석이 없습니다.
- mivia 화재 감지 데이터 세트 - 약. 영상 30개
- USTC 연기 감지 - 연기 비디오를 제공하는 다양한 소스에 대한 링크
- pyimagesearch 기사의 화재/비발화 데이터 세트를 다운로드할 수 있습니다. 예를 들어, 실제 화재가 포함되지 않은 화재 장면의 이미지가 많이 있지만, 불타버린 집이 있다는 점에 유의하세요.
- Kaggle의 FIRE 데이터세트 - 755개의 실외 화재 이미지와 244개의 화재 이외의 이미지. 이미지 크기는 적당하지만 주석이 없습니다.
- Dunnings 2018 연구를 위한 화재 이미지 데이터 세트 - PNG 정지 이미지 세트
- Samarth 2019 연구를 위한 Fire 슈퍼픽셀 이미지 데이터 세트 - PNG 정지 이미지 세트
- 산불 연기 데이터세트 - 주석이 달린(경계 박스형) 이미지 737개
- jackfrost1411의 데이터 세트 -> 분류 작업을 위해 수백 개의 이미지가 화재/중성으로 분류됩니다. 경계 상자 주석 없음
- Kaggle의 화재 및 연기 데이터 세트 -> 691개의 불꽃 전용 이미지, 3721개의 연기 전용 이미지, 4207개의 화재 {불꽃 및 연기} 이미지로 구성된 7000개 이상의 이미지
- 국내 화재 및 연기 데이터 세트 -> 약. 5000개의 고유 이미지, 2클래스(화재 및 연기), 경계 상자 주석, COCO, PASCAL VOC 및 YOLO 형식
- Kaggle 사격 및 총 데이터 세트
- 산불 감지 -> PerceptiLabs의 데이터 세트, 일반 장면과 화재가 포함된 장면을 묘사하는 250x250픽셀 이미지. 기사와 함께. Kaggle의 데이터 세트입니다.
- DFireDataset -> 화재 및 연기 감지를 위한 이미지 데이터 세트
화재 안전 참고 자료
- 가정에서 발생하는 다양한 종류의 화재, 일반적인 시나리오 및 개입 방법을 다루는 참고 자료를 찾아보세요.
- ROC 특성을 포함한 화재 감지기의 안전/정확도 표준
집에서 화재가 발생했습니다.
- 담배 연기가 남아 있는 경우, 양초, 전기 고장, 칩 팬 화재 등 일반적인 원인
- 많은 요인이 화재의 성격에 영향을 미치며, 주로 연료 및 산소화뿐만 아니라 화재가 발생한 위치, 방 중앙/벽 반대, 방의 열 용량, 벽, 주변 온도, 습도, 표면의 오염 물질에도 영향을 미칩니다. 재료(먼지, 오일 기반 제품, 완화제 등)
- 화재를 진압하기 위해 물(전기 또는 칩 팬이 아닌), 거품, CO2, 건조 분말 등 다양한 지연제가 고려됩니다.
- 전기 화재가 발생하면 먼저 전기 공급을 차단해야 합니다.
- 문을 닫는 등 환기를 줄이면 화재가 제한됩니다.
- 연기 자체는 화재의 성격을 나타내는 강력한 지표입니다.
- https://en.m.wikipedia.org/wiki/Fire_triangle 및 https://en.m.wikipedia.org/wiki/Combustion을 읽어보세요.
엣지 배포
에지 장치(RPi, jetson nano, android 또는 ios)에 배포하려는 최종 목표는 아키텍처 및 기타 장단점에 대한 결정에 영향을 미칩니다.
- 30FPS에서 Jetson Xavier NX에 YOLOv5 배포 - 30FPS에서 추론
- 사용자 정의 데이터 세트에서 YOLOv5를 훈련하는 방법
- 사용자 정의 데이터에 대한 YOLOv4-tiny 학습 - 번개처럼 빠른 객체 감지
- 사용자 정의 TensorFlow Lite 객체 감지 모델을 훈련하는 방법 - Colab Notebook, MobileNetSSDv2, RPi에 배포
- YOLOv4 Tiny 및 TensorFlow Lite를 사용하여 맞춤형 모바일 개체 감지 모델을 교육하는 방법 - YOLOv4 Tiny Darknet을 교육하고 tflite로 변환하고 Android에서 데모하며 tflite에 대한 직접 교육보다 더 많은 단계
- AG용 AI: 농업용 생산 기계 학습 - 교육부터 배포까지 전체 워크플로
- Pytorch는 이제 공식적으로 RPi를 지원합니다https://pytorch.org/blog/prototype-features-now-available-apis-for-hardware-accelerated-mobile-and-arm64-builds/
- Hermes는 Computer Vision을 활용하고 NVIDIA Deepstream을 사용하여 가속화되는 산불 감지 시스템입니다.
클라우드 배포
우리는 엣지 배포에 비해 최소한의 변경으로 클라우드에도 배포할 수 있는 솔루션을 원합니다. 몇 가지 옵션:
- 람다 함수로 배포 - 내 경험상 응답 시간은 최대 45초로 길다
- 요청 대기열을 처리하기 위해 커스텀 코드를 사용하여 VM에 배포
- Sagemaker에서 torchserve를 사용하고 EC2 인스턴스에서 실행됩니다. 잘 문서화되어 있지만 AWS에만 해당됩니다.
- 클라우드 제공업체 중 하나를 이용하세요. 예를 들어 AWS Rekognition이 화재를 식별합니다.
이미지 전처리 및 확대
Roboflow는 기본 자르기 외에도 데이터세트당 최대 3가지 유형의 확대를 허용합니다. 더 많은 기능 강화를 실험하고 싶다면 https://imgaug.readthedocs.io/en/latest/를 확인해 보세요.
- 이미지 전처리 및 확대가 중요한 이유
- 이미지 확대 기술로서 블러의 중요성
- 대비를 전처리 단계로 사용하는 경우
- YOLOv4의 데이터 확대
- 머신러닝을 위해 이미지에 노이즈를 추가하는 이유
- 무작위 작물 데이터 확대를 구현하는 이유와 방법
- 회색조를 전처리 단계로 사용하는 경우
ML 측정항목
-
Precision
예측의 정확도이며 precision = TP/(TP+FP)
또는 "예측의 몇 %가 정확합니까?"로 계산됩니다. -
Recall
은 recall = TP/(TP+FN)
또는 "모델이 포착하는 참양성 비율(%)"로 계산되는 참양성률 (TPR)입니다. -
F1 score
(F 점수 또는 F 측정값이라고도 함)는 정밀도와 재현율의 조화 평균으로, F1 = 2*(precision * recall)/(precision + recall)
로 계산됩니다. 이는 정밀도와 재현율 간의 균형을 전달합니다. 참조 -
FPR = FP/(FP+TN)
으로 계산되는 FPR( 위양성률 )은 TPR/FPR 절충이 분류 임계값에 따라 어떻게 달라지는지 보여주는 ROC 곡선에서 재현율/TPR에 대해 표시되는 경우가 많습니다. 분류 임계값을 낮추면 참양성이 더 많이 반환되지만 거짓양성도 더 많이 반환됩니다. - mAP, IoU, 정밀도 및 재현율은 여기와 여기에 모두 잘 설명되어 있습니다.
- IceVision은 일반적으로 "평균 평균 정밀도"(mAP)라고 하는 COCOMetric, 특히
AP at IoU=.50:.05:.95 (primary challenge metric)
반환합니다. -
[email protected]
: 모든 라벨을 고려한 각 라벨의 평균 정밀도 또는 정확성입니다. @0.5
예측된 경계 상자가 원래 주석과 얼마나 겹치는지에 대한 임계값을 설정합니다(예: "50% 중복").
댓글
- Firenet은 매우 일반적인 모델 이름이므로 사용하지 마십시오.
논의
- 스레드는 fast.ai 포럼에서 시작했습니다.
데모
Gradio로 제작한 데모 앱을 실행하면 가장 성능이 좋은 모델을 사용할 수 있습니다. demo
디렉토리 보기