Simple Science

最先端の科学をわかりやすく解説

# コンピューターサイエンス # コンピュータビジョンとパターン認識 # 機械学習

ビデオ監視における異常検知の革新的アプローチ

動画データの異常活動を検出するために、いろんなモデルをテストしてる。

Fabien Poirier

― 1 分で読む


動画異常検知技術 動画異常検知技術 をテスト中だよ。 異常な活動をリアルタイムで検出するモデル
目次

勉強中に本物の監視カメラにアクセスできなかったから、使った動画は全部ダウンロードしたやつだった。動画データは処理するのにかなりのコンピュータパワーが必要なんだけど、会社や研究所には高級なGPUサーバーがなかったから、32GBのRAMが載った普通のコンピュータとIntel Core i9のプロセッサーでなんとかやった。Nvidia GeForce RTX2080のグラフィックカードもあったから、ちょっとだけ性能が上がった。

この部分では、2つのモデルを組み合わせて異常な活動をどれだけ検出できるかのテストについて話すよ。並行で走らせたか、一つずつ走らせたかで結果がどう変わったかを説明するね。それから、物体と異常を検出する実験についても共有するつもり。どのモデルがどんな状況に一番合ってるかを知るのに役立ったから。最後に、全体のまとめで締めくくるよ。

データ前処理

ここでは、テスト用にデータを準備する方法を説明するね。

さっきも言ったように、動画は普通の動作が異常な動作で妨げられることが多い。だから、異常な活動に焦点を当てて分析しやすくするために、動画を切り刻む必要があった。このやり方でも、動画データの量が多すぎて本当に頭が痛かった。

一度に全動画を読み込むのは無理だったから、メモリが耐えられなかった。そこで、ジェネレーターっていう特別なツールを使うことにした。料理を一皿ずつ出してくれるウェイターみたいに考えて。

最初のテストでは、異なるジェネレーターがどのように機能するかを見てみた。4種類試してみたよ:

  1. 動画に沿ってウィンドウを動かして動画シーケンスを作るジェネレーター。
  2. スライディングウィンドウを使ってシーケンスを重ねるジェネレーター。
  3. 動画から画像を集めるためにダイナミックステップを使うジェネレーター。
  4. スライディングウィンドウとダイナミックステップを組み合わせたジェネレーター。

3つ目のジェネレーターが一番良い選択になった。なぜなら、他のものが抱えている大きな問題を解決してくれるから。最初の2つのジェネレーターだと、モデルが学習するのにかかる時間は動画の長さによって変わるんだよ—長い動画だと学習時間も長くなる。スライディングウィンドウのサイズを決めるのも難しいし、全体の動作をキャッチする必要があるから、モデルが正しく学べない可能性がある。

もちろん、3つ目のジェネレーターも完璧じゃない。異なる長さの動画を扱うときに自分自身の問題があったりする。例えば、短い動作だと画像間の時間が短いんだけど、長い動画だと画像の間に長い待ち時間があることがある。だから、短い動画は詳細な画像が得られるけど、長い動画はあんまりクリアに見えないかも。

この3つ目のジェネレーターを使えば、画像が重なり合う必要がないシーケンスを作れるからいい感じ。ステップサイズを変更することで、シーケンスごとや動画ごとにどれくらい早く物を検出したいかを決められる。この柔軟性が、有限の動画と進行中の動画の両方に対応するのを助けてくれる。

ジェネレーターを選んだら、画像のサイズを決める必要があった。サイズを調整して、一番良いサイズを見つけたんだけど…まあ、完璧に機能したよ。

シーケンスのサイズでは、15から30画像のいろんな長さをテストした。動画の速度は一定(1秒30フレーム)だから、20画像を使うのが最適だってわかった。

各実験の実行状況をチェックするために、画像を選ぶときのステップを定義する独自の方法を作った。こうすれば、全体の動画をチェックするか、シーケンスで作業するかにかかわらず、トレーニング中と同じ条件でモデルをテストできる。主な目標は、みんなが連続したストリームを監視できるように助けることで、そのためにシーケンス検出に関連するパフォーマンスにフォーカスするつもり。

シーケンスを設定した後、ミラー効果やズーム、明るさの変化などの強化技術を使ってデータをちょっと活気づけた。これで現実からあまり離れずにデータを増やすことができた。

次に、データの前処理方法をいろいろと見てみた。基本的には、画像をきれいにして準備する方法だね。コンピュータビジョンの世界からの標準的なトリックを使い始めた:画像間の動きを計算したり、画像を比較して違いを見つけたり、マスクを適用したり。

私の見解は?光学フローメソッドは全然印象的じゃなかった。トレーニング中ずっと精度が50%だった。画像間の差分法は少し良い結果を出したけど、マスクを使うとまた悪化した。驚いたことに、データ拡張を使ったときの結果が一番良かった。前処理なしでは、精度が低かったけど、リコールは高かった。データ拡張を使っただけで、まずまずの精度としっかりしたリコールが得られた。

それから、異常検出のために専門のモデルを使ったもう少し進んだ前処理法を試してみた。DINOって呼ばれるものを使うことを考えた。それを試してみたら、処理時間がかなりかかることに気づいて、リアルタイムのニーズには実用的じゃなかった。しかし、追加のトレーニングなしで銃声検出にはうまくいった。

戦闘検出に関しては、思ったようにいかず、Vision Transformersをプランから除外して、自分のニーズに合ったモデルに集中することにした。

さて、次はYOLOについて。これが動画の中で物体を見つけて、人々が何をしているのかを判断するための頼りにしているもの。うまく機能したから、セットアップに追加したよ。

シリーズモードでの実験

さて、次はモデルを一つずつ繋げて実行したときのパフォーマンスをチェックするよ。まず、動画を分解して各フレームを取り出し、それをYOLOに通して画像の中のさまざまな物体を見つけた。その後、動画を再構築して、異常を確認するために別のモデルであるCGRUに通した。

この方法をCGRU単体で使ったのと比較して、結果はかなり明らかだった。YOLOを追加してもモデルのパフォーマンスにはあんまり変わらなかった。それは、モデルがトレーニング中にバウンディングボックスにあまり注意を払っていなかったことを示してる。前処理も改善して、バウンディングボックスを使って物体がある部分にフォーカスしたマスクを作り、背景はできるだけ排除した。

物体検出がない画像については、元の画像をそのまま使うか、黒い画像に置き換えるかの2つの選択肢があった。両方とも似たようなパフォーマンスだったけど、わずかな違いがあった。黒い背景を使うことで普通の動作の検出が改善されたけど、戦闘や火事の精度が悪くなった。この現象は、重要な詳細が検出中に見逃されることで、モデルが重要な情報を無視する原因になったのかも。

物体検出パラメータの設定、信頼度やオーバーラップのしきい値が重要だったということに気づいた。テスト中は信頼度を55%に設定してた。

人々が行うアクションの検出に関しては、YOLOバージョン7が彼らの「スケルトン」をアウトラインすることで良い結果を出してきた。だから、行動検出にどう影響するかを見たくて、動画にポーズ推定を行った。シンプルに保つために、FightとGunshotのクラスだけに焦点を当てた。なぜなら、すべての異常に人間が必要というわけじゃないから。

それから、ポーズ推定がうまくいくかテストしてみた。最初は、画像から背景を取り除いて検出を鋭くしようとしたけど、すぐに他の異常の検出に悪影響を及ぼす可能性があることに気づいた。だから、背景を戻して、モデルを再トレーニングし、火事のようなものを見つけられるか確認した。

全体的なパフォーマンスでは、火事のクラスを追加してもあんまり変わらなかったけど、結果的には銃声の検出が落ちて、いくつかが火事としてタグ付けされてしまった。このことから、多クラスモデルを通常/異常のセットアップに切り替えて、YOLOの影響を見ようと思った。背景なしのモデルと背景ありのモデルの2つを新しくトレーニングした。

前処理に関係なく、異なる種類の異常を組み合わせることでモデルのパフォーマンスが一貫して向上した。ただし、火事のような無関係な異常を追加すると結果が悪化する傾向があった。YOLOを使ってデータを準備することで精度が上がったことも気づいた。

並行モードでの処理

次は、モデルを並行で実行することにした。ここでのアイデアは、時間を分析しながら物体を検出し、結果を組み合わせて精度を向上させることだった。最初の実験では、「銃声」カテゴリーで訓練したCGRUとYOLOを組み合わせて、シンプルなルールを使った。「正常」と予測したけど銃を発見したら、出力を「銃声」に切り替えるというやり方。

火事検出でも同じことをした。各動画シーケンスでこの組み合わせがどれほどうまく機能するか評価して、信頼度のしきい値を55%に設定した。

火事検出の結果は良好だった。CGRUとYOLOの組み合わせで火事の検出が改善され、銃声の検出では変化が見られなかった。一見したところ、両方のモデルが銃声検出のための同じ特徴を拾っていたから、YOLOの精度が全体のパフォーマンスにとってどれほど重要かを示していた。

銃声検出のルールを少しだけ調整することにした。YOLOは物体が検出されたかを計算で判断するから、「銃声は人の近くにあるときだけカウントすればいいんじゃない?」って考えた。だから、銃と他の画像を入れた新しいモデルをトレーニングして、どれほど機能するか見てみた。

新しい人間検出モデルは前よりも良い結果を出したけど、銃器検出にはまだ波があった。結果を比較してみると、新しいモデルの銃声検出パフォーマンスは良くなった。

それから、偽陽性を減らすことに注目した。すべてを管理しながら再評価を行ったところ、偽アラームが減ったことが分かった。しかし、その分、真陽性もわずかに減少してしまい、YOLOにおける精度が必要であることが示された。

検出しようとしている異常の重大性を考えると、低い偽陰性率のモデルを維持したいと思った。たとえそれが偽アラームを許容することになっても、すべての異常をカバーする単一の物体検出モデルをトレーニングすることで、生活が簡単になるはず。

各モデルのパフォーマンス比較

さあ、全モデルが全体としてどのように機能したかを共有するよ!戦闘、銃声、火事を検出するための3つの異なるモデルがある。動画の分類(1動画につき1検出)と、連続ストリームで異常を見つけるスピード(1シーケンスにつき1検出)について評価するよ。

戦闘モデルは、全動画をチェックすると85.6%の精度を達成して好調だったけど、連続ストリームでは63.1%に落ちた。銃声検出は全動画で86.5%の精度を達成したけど、シーケンスでは91.8%にわずかに落ちて、静的なシナリオで最も良い結果を出すことが分かった。一方、火事検出は安定していて、動画で83.8%、シーケンスで86.0%をスコアして、信頼できるパフォーマンスだって分かった!

データセットを統合した多クラスモデルでは、興味深い傾向が見られた。データが増えたにもかかわらず、連続ストリームでは火事クラスと銃声クラスの検出性能が落ちたけど、全体として多クラスモデルはそこそこ良いパフォーマンスを示した。

実際の事件の動画を見てみると、多クラスモデルのパフォーマンスはまずまずだった。データを処理するスピードも悪くなく、検出時間は104ミリ秒から744ミリ秒の間だった。

結論

これらのテストや調整を通じて、何を学んだか?ただ単にどんな事件でも検出したいなら、バイナリモデル(正常/異常)がベストだ。何が間違ったのか正確に特定することはできないかもしれないけど、全体をカバーしてくれる。

一方、戦闘や火事のような特定の種類の異常を見つけたいなら、専門のモデルを使うとより良い結果が得られるだろう。いろんな異常を混ぜて、人間が後で詳細を把握する場合は、正常/異常モデルが完璧に合う。

要するに、これらのモデルを試すのは楽しい冒険だった。リアルタイム検出が常に完璧ってわけじゃないけど、適切な調整やアプローチを使うことで、安全を見守るための貴重な洞察が得られるところまで近づけることができる!

オリジナルソース

タイトル: Real-Time Anomaly Detection in Video Streams

概要: This thesis is part of a CIFRE agreement between the company Othello and the LIASD laboratory. The objective is to develop an artificial intelligence system that can detect real-time dangers in a video stream. To achieve this, a novel approach combining temporal and spatial analysis has been proposed. Several avenues have been explored to improve anomaly detection by integrating object detection, human pose detection, and motion analysis. For result interpretability, techniques commonly used for image analysis, such as activation and saliency maps, have been extended to videos, and an original method has been proposed. The proposed architecture performs binary or multiclass classification depending on whether an alert or the cause needs to be identified. Numerous neural networkmodels have been tested, and three of them have been selected. You Only Looks Once (YOLO) has been used for spatial analysis, a Convolutional Recurrent Neuronal Network (CRNN) composed of VGG19 and a Gated Recurrent Unit (GRU) for temporal analysis, and a multi-layer perceptron for classification. These models handle different types of data and can be combined in parallel or in series. Although the parallel mode is faster, the serial mode is generally more reliable. For training these models, supervised learning was chosen, and two proprietary datasets were created. The first dataset focuses on objects that may play a potential role in anomalies, while the second consists of videos containing anomalies or non-anomalies. This approach allows for the processing of both continuous video streams and finite videos, providing greater flexibility in detection.

著者: Fabien Poirier

最終更新: 2024-11-29 00:00:00

言語: English

ソースURL: https://arxiv.org/abs/2411.19731

ソースPDF: https://arxiv.org/pdf/2411.19731

ライセンス: https://creativecommons.org/licenses/by-nc-sa/4.0/

変更点: この要約はAIの助けを借りて作成されており、不正確な場合があります。正確な情報については、ここにリンクされている元のソース文書を参照してください。

オープンアクセスの相互運用性を利用させていただいた arxiv に感謝します。

類似の記事