画像からの火災検知
このリポジトリの目的は、火災検知ニューラル ネット モデルをデモンストレーションすることです。このモデルを使用すると、画像内の火災の周囲に境界ボックスが配置されます。
最高の結果
オブジェクト検出:さまざまなモデル アーキテクチャを試した後、Yolov5 pytorch モデルに落ち着きました ( pytorch/object-detection/yolov5/experiment1/best.pt
参照)。数時間の実験の後、1155 枚の画像 (337 枚の基本画像 + 拡張) でトレーニングされた、0.657、精度 0.6、再現率 0.7 の[email protected]
のモデルを生成しました。
分類:まだ独自のモデルをトレーニングしていませんが、ResNet50 を使用すると 95% の精度が報告されています
セグメンテーション:注釈が必要です
モチベーションと課題
従来の煙探知機は、煙粒子の物理的な存在を検出することによって機能します。しかし、それらは誤検知される傾向があり(トースターなどから)、火災の位置を特に正確に特定することはできません。このような状況では、応答時間を改善したり、火災の規模や位置などの追加の指標を提供したりするために、カメラ ソリューションが従来の検知器を補完する可能性があります。火災の場所と性質が特定されると、スプリンクラー システムやドローンなどによる自動介入が可能になる場合があります。また、データを消防機関に送信して、存在しない状況認識を提供することもできます。私が興味がある特定の場所は、キッチンとリビングルーム、ガレージと別棟、そして火災がすでに発生しているが目的のゾーンの外側に広がっている可能性のあるエリア、たとえばファイヤーピットです。
いくつかの重要な課題と未解決の疑問があります。
- 高速エッジ モデルにとって「最適な」アーキテクチャとは何ですか? Yolo3 は商用アプリケーションとして非常に人気があり、keras または pytorch、ベースラインの Yolov5 で実装できます。現在は SOTA であり、Jetson へのデプロイメント ガイドがあります。
- 単一クラスのみを検出しているため、アーキテクチャを最適化できますか?
- ベースラインのオブジェクト検出ですが、分類器やセグメンテーションには利点がありますか? 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 データでトレーニングされた十分に文書化されたモデル
- Keras と pyimagesearch によるディープラーニングによる火災と煙の検出 - Google 画像をスクレイピングして収集されたデータセット (1315 個の火災画像を含むデータセットへのリンクを提供)、tf2 および keras シーケンシャル CNN によるバイナリ火災/非火災分類は、92% の精度を達成すると結論付けています。より優れたデータセットが必要です
- YOLOv3 を使用したゼロからの火災検出 - ここでは、LabelImg を使用したアノテーション、Google ドライブと Colab を使用した、Heraku を介したデプロイメント、および Streamlit を使用した Viz について説明します。デヴダルシャン・ミシュラの作品
- fire-and-gun-detection -> ビデオと画像で yolov3 を使用した火災と銃の検出。トレーニング コード、データセット、トレーニングされた重みファイルが利用可能です。
- YOLOv3-Cloud-Based-Fire-Detection -> クラウド上の YOLOv3 を使用したカスタム オブジェクト検出。特定のフレームで火災を検出するようにトレーニングされています。山火事や火災事故などに幅広く使用できます。
- fire-detect-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、densenet121、densenet201 の keras 分類子
- fire-detection-cnn - ビデオ (または静止画) 画像内の火災ピクセル領域をリアルタイム境界内で自動検出します。画像全体のバイナリ火災検知 (1) では最大精度 0.93、スーパーピクセル位置特定フレームワーク内では 0.89 の精度を達成できます。
- ディープラーニングと OpenCV を使用した早期火災検知システム - 屋内および屋外の火災検知用にカスタマイズされた InceptionV3 と CNN アーキテクチャ。トレーニング用の 980 枚の画像と検証用の 239 枚の画像、トレーニング精度 98.04、検証精度 96.43、ウェブカメラでのライブ検出に openCV を使用 - コードとデータセット (すでにここで参照) https://github.com/jackfrost1411/fire-検出
- Tensorflow 2.2 を使用した煙検知 - EfficientDet-D0、733 枚の注釈付き煙画像、Roboflow ブログで言及
- 火災検知用の航空画像データセット: 無人航空機 (UAV) を使用した分類とセグメンテーション - バイナリ分類器、テスト セットで 76% の精度
- アンサンブル学習に基づく森林火災検知システム -> まず、2 つの個別学習器 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 個の火災画像。リポジトリには、imageai を使用してトレーニングされた、未知のパフォーマンスの Yolo3 モデルが含まれています。ただし、画像は平均 275x183 ピクセルと小さいため、ネットワークが学習するテクスチャの特徴が少なくなります。
- Kaggle の CCTV からの火災検知 - 画像とビデオ。画像はビデオから抽出され、すべての画像が 3 ~ 4 つのビデオからのみ取得された比較的小さなデータセットです。テスト用のビデオがあるため、現在のタスクに非常に関連しています。通常/煙/火災の分類タスク用に編成されたデータセット、境界ボックス注釈なし
- cair/Fire-Detection-Image-Dataset - このデータセットには、多くの通常の画像と 111 個の火災のある画像が含まれています。データセットは、現実世界の状況を再現するには非常に不均衡です。画像は適切なサイズですが、注釈は付いていません。
- mivia 火災検知データセット - 約30本のビデオ
- USTC 煙検出 - 煙のビデオを提供するさまざまなソースへのリンク
- pyimagesearch の記事にある fire/not-fire データセットをダウンロードできます。実際の火事は含まれていないが、焼け落ちた家などの火災現場の画像が多数あることに注意してください。
- Kaggle の FIRE データセット - 755 枚の屋外火災画像と 244 枚の非火災画像。画像は適切なサイズですが、注釈は付いていません
- ダニングス 2018 調査用火災画像データ セット - PNG 静止画像セット
- サマルス 2019 調査用の火災スーパーピクセル画像データ セット - PNG 静止画像セット
- 山火事の煙データセット - 737 個の注釈付き (境界ボックス化された) 画像
- jackfrost1411 によるデータセット -> 分類タスクのために火災/中立に分類された数百の画像。境界ボックスの注釈なし
- Kaggle の fire-and-smoke-dataset -> 691 個の炎のみの画像、3721 個の煙のみの画像、4207 個の火災 {炎と煙} 画像で構成される 7000 以上の画像
- 国内の火災と煙のデータセット -> 約5000 個の固有の画像、2 クラス (火と煙)、境界ボックスの注釈、COCO、PASCAL VOC、YOLO 形式
- kaggle 射撃と銃のデータセット
- Wildfire-Detection -> 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) への展開という最終目標は、アーキテクチャやその他のトレードオフに関する決定に影響を与えます。
- YOLOv5 を 30FPS で Jetson Xavier NX にデプロイ - 30 FPS で推論
- カスタム データセットで YOLOv5 をトレーニングする方法
- カスタム データで YOLOv4-tiny をトレーニングする - 超高速のオブジェクト検出
- カスタム TensorFlow Lite オブジェクト検出モデルをトレーニングする方法 - colab ノートブック、MobileNetSSDv2、RPi へのデプロイ
- YOLOv4 Tiny と TensorFlow Lite を使用してカスタム モバイル オブジェクト検出モデルをトレーニングする方法 - YOLOv4 tiny Darknet をトレーニングして tflite に変換し、Android でデモします。tflite 用に直接トレーニングするよりも多くの手順を実行します
- AI for AG: 農業向けの生産機械学習 - トレーニングから展開までの完全なワークフロー
- Pytorch は RPi を正式にサポートするようになりましたhttps://pytorch.org/blog/prototype-features-now-available-apis-for-hardware-accelerated-mobile-and-arm64-builds/
- Hermes は、コンピューター ビジョンを利用し、NVIDIA Deepstream を使用して高速化される Wildfire 検出システムです。
クラウド展開
エッジ展開と比較して最小限の変更でクラウドにも展開できるソリューションが必要です。いくつかのオプションがあります:
- ラムダ関数としてデプロイ - 私の経験では、応答時間は長く、最大 45 秒です
- リクエストのキューイングを処理するカスタム コードを使用して VM にデプロイする
- sagemaker で torchserve を使用し、EC2 インスタンスで実行します。十分に文書化されていますが、AWS 固有のものです。
- いずれかのクラウドプロバイダーを使用します。たとえば、AWS Rekognition が火災を識別します。
画像の前処理と拡張
Roboflow では、基本的なトリミングに加えて、データセットごとに最大 3 種類の拡張が可能です。さらに拡張を試したい場合は、https://imgaug.readthedocs.io/en/latest/ をチェックアウトしてください。
- 画像の前処理と拡張が重要な理由
- 画像拡張技術としてのぼかしの重要性
- 前処理ステップとしてコントラストを使用する場合
- YOLOv4 でのデータ拡張
- 機械学習のために画像にノイズを加える理由
- ランダム作物データ拡張を実装する理由と方法
- 前処理ステップとしてグレースケールを使用する場合
ML メトリクス
Precision
予測の精度であり、 precision = TP/(TP+FP)
または「予測の何パーセントが正しいか?」として計算されます。-
Recall
は真陽性率(TPR) であり、 recall = TP/(TP+FN)
または「モデルが真陽性の何パーセントを捕捉するか?」として計算されます。 -
F1 score
(F スコアまたは F メジャーとも呼ばれます) は、適合率と再現率の調和平均で、 F1 = 2*(precision * recall)/(precision + recall)
として計算されます。精度と再現率のバランスを伝えます。参照 FPR = FP/(FP+TN)
として計算される偽陽性率(FPR) は、多くの場合、TPR/FPR のトレードオフが分類しきい値によってどのように変化するかを示す ROC 曲線で再現率/TPR に対してプロットされます。分類しきい値を下げると、より多くの真陽性が返されますが、より多くの偽陽性も返されます。- mAP、IoU、精度、リコールはすべてこことここで詳しく説明されています
- IceVision は COCOMetric、具体的には
AP at IoU=.50:.05:.95 (primary challenge metric)
返します。ここから、通常は「平均平均精度」(mAP) と呼ばれます。 -
[email protected]
: すべてのラベルを考慮した各ラベルの平均精度または正確さ。 @0.5
予測された境界ボックスが元の注釈とどの程度重なるかのしきい値、つまり「50% の重なり」を設定します。
コメント
- Firenet はモデルの非常に一般的な名前です。使用しないでください。
議論
デモ
Gradio で作成したデモ アプリを実行することで、最高のパフォーマンスのモデルを使用できます。 demo
ディレクトリを参照してください