この記事では、道路上の潜在的な危険を検出して衝突を防ぐ高度なコンピューター ビジョン アルゴリズムを備えたサイクリスト向けのスマート カメラを開発した私自身の経験を共有したいと思います。以下に、プロトタイピングとビデオ データのゼロからの収集のプロセス全体を簡単に説明します。組み込みエンジニアと機械学習エンジニアの両方にとって興味深いものになるかもしれません。始める前のちょっとしたネタバレ: 収集されたデータセットは後でオープンソース化されました。
私は 30 年の経験を持つ熱心なサイクリストで、そのうち 20 年は公道を走っています。道路で交通事故に遭ったことがあります。自転車が横から車に轢かれてしまいました。幸い軽い打撲と捻挫で済んだ。ですから、公道でのサイクリストの安全上の問題を特に理解しています。
この問題の解決策の 1 つは、自転車のカメラを使用してインシデントをキャプチャすることです。あなたの視点をキャプチャするカメラを装備すると、路上でのサイクリングがより安全になります。ドライバーとの口論では、映像が追加の保護層として機能します。証拠がなければ、非倫理的なドライバーは責任を否定するかもしれませんが、サイクリスト用のカメラを持っていると、そのような状況で命を救うことができます。英国には、アクション カメラの映像を警察に提出するのを容易にする Nextbase という Web サイトさえあり、プロセスが合理化され、複雑さが軽減されます。
言い換えれば、カメラで事故を捉えることはできますが、危険な状況を回避する方が常に良いことを認めなければなりません.私がプロジェクトを開始したとき、道路上の危険な状況を防ぐための積極的な解決策はありませんでした。そこで、カメラ付きのスマートな自転車用バックライトを作成することにしました。このプロジェクトの使命は、サイクリストの死亡と負傷を減らすことでした。
当初、このデバイスには高度なコンピューター ビジョン アルゴリズムが搭載される予定でした。このアルゴリズムは、メディアで「人工知能」と呼ばれることが多く、サイクリストの道路上の潜在的な危険を検出できます。コンセプトを簡単に説明すると、ソフトウェアが危険を検出すると、デバイスが点滅してドライバーの注意を引きます。また、衝突前に後続車に大きな音を発し、衝突を未然に防ぐセーフティシステム。
オブジェクト検出ニューラル ネットワーク (認識に使用されるコンピューター ビジョン アルゴリズムの一部) をトレーニングするために、リアビュー カメラでキャプチャされた公道からさまざまなシナリオの大規模なデータセットを見つける必要がありました。残念ながら、このようなオープンソースのデータセットは、私が始めたときは Web 上で利用できませんでした。
運転行動全体の研究は、交通工学において非常に有用であり、統計分析のためのデータ収集、運転モデルの識別、モデリング パラメーターの推定など、さまざまな目的に役立ちます。データとモデルは、交通安全分析、交通シミュレーション、予測、制御用の微視的モデル、高度な運転支援システム用の制御ロジックなど、いくつかの分野に適用できます。
先に言っておきますが、このプロジェクトに取り組んでいる間に、2021 年に最初の MVP ユーザーのリアビュー カメラによってキャプチャされたウクライナの公道からデータセットを作成しました。\
そのようなデータセットをパブリック ドメインに置くことの公共的および社会的重要性を完全に理解して、私は自分の仕事の結果をここにアップロードしました。
ニューラル ネットワークに事故の予測を教えるには、大量のデータを収集する必要がありました。この場合、最初のベータ テスターが乗車を記録できるように、カメラのプロトタイプを開発する必要がありました。幸いなことに、私のサイクリング コミュニティ ネットワークには、多くの安全道路活動家が含まれています。あとは、いくつかのデバイスを組み立てて、最初のユーザーに渡すだけでした。
開発プロセスを簡単に説明し、以下で特定の技術ソリューションを選択するロジックを説明しましょう。
ハードウェア構成: ケースは 3D プリントされました。 Raspberry Pi 3B+ コンピューター モジュールがプラットフォームとして選択され、ケースをコンパクトかつ軽量に保つためにカスタム PCB が作成されました。
カメラには標準の Raspberry Pi IMX219 センサーを使用しましたが、120 度のレンズを使用しました。道路での視認性を高めるために、高出力の LED ライトと赤色レンズ (これも 3D プリント) が追加されました。
デバイスでニューラル ネットワークを実行するために、低コストで強力な 4 TOPs ニューラル アクセラレータである Google Coral Edge TPU (写真を含む) を使用しました。 TPU は USB 経由で接続されました。 \
これらすべての電子機器は、最大負荷 (ビデオ録画、リアルタイム ニューラル ネットワーク操作、および LED 点滅) で 7 ~ 8W を消費しました。 8Ah のリチウムイオン電池 (ケース内部の写真を含む) を使用して、4 ~ 5 時間の動作を保証しました。
OS については、標準の Raspbian を使用しました。サポートが充実しており、必要なドライバーはすべて問題なく簡単にインストールできたからです。 OSの起動後に書くことにしたメインコードはC++でした。
これから始めることはお勧めしません - 実験目的のため、Python が初心者にとってより良い選択肢かもしれないと私は信じています。ただし、最大限のハードウェア機能を備えた Raspberry Pi の限られたすべてのリソースを効果的かつ正確に制御したい場合は、C/C++ で記述する価値があります。
このプロジェクトで作成した最も興味深いソリューションの 1 つは、OTA (無線更新) メカニズムと、デバイスからビデオ録画を収集するメカニズムです。
プロセスは次のようになりました。ユーザーが乗車を終えて帰宅すると、自宅の Wi-Fi に接続する USB WiFi アダプターを挿入すると、デバイスが同期を開始します。
すべての動画は Google ドライブ経由で同期されました。デバイスごとに個別の Google アカウントを作成しました。私の場合、Google ドライブには多くの利点があります。Google ドライブのウェブ インターフェースを介して動画をすぐに見ることができ、新しいファイルを手動で削除または追加するのは簡単です。アカウントごとに最大 20 GB)。 ( Google さん、悪く言わないでください。私の生まれたばかりのスタートアップには MVP が 4 人しかいなかったのです)。
H.264 ビデオ エンコーディングを使用すると、容量を使い果たすことなく、1 つの Google ドライブに何百ものビデオを保存できます。
OTA プロセスについて説明します。新しいファームウェアをコンパイルした後、それを Google ドライブにアップロードします。次回の Google ドライブとの同期中に、デバイスは新しいファームウェア バージョンをダウンロードし、古いバージョンを置き換えます。
これには単純な gdrive ユーティリティを使用しました。新しいファームウェア ファイルをアップロードするために使用するコードは次のとおりです。
gdrive upload -p “gdrive folder id” “file”
以下に、デバイスに新しいファームウェアをロードするためのコード行を示します。
gdrive update “id” “file”
ファームウェアのバージョンを確認した後、ビデオの同期が行われ、すべての新しい録画が Google ドライブにアップロードされます。
これは、ビデオがデバイスからディスクにダウンロードされる方法です。
gdrive sync upload “local folder” “gdrive folder id”
1 日に 1 回、サーバーでスクリプトを実行して、すべての Google ドライブをローカル フォルダーと同期し、すべての新しい動画をダウンロードしました。
gdrive sync download “gdrive folder id” “local folder”
したがって、数か月の作業の後、私のデバイスはラベル付けの準備ができている 200 以上のビデオを収集しました。
ビデオを収集した後、それを処理し、フィルター処理して、データセットを作成しました。次に、手動でラベル付けを行う小さなチームを編成しました。チームには、すべての写真にラベルを付ける 4 人が含まれていました。
最終的に、前述のように、データセットをオープン ソースに渡しました。次のリンクから見つけることができます: GitHub リンク。
オープンソースのデータセットは研究コミュニティにとって貴重なリソースであり、交通安全の分野における新しいアルゴリズムとモデルの開発に大きく貢献できると確信しています。