Edge Impulseによるハードハット検出
はじめに
工業現場や建設現場などの作業環境では、落下物、他の物体との衝突、破片、雨、電気ショックから頭部を保護するためにハードハットが必要不可欠です。安全性を向上させますが、時として人々は個人的にも産業的にもその重要性を過小評価することがあります。そのため、ハードハットを検出するビデオベースの監視システムは、この安全問題に対する最適化されたソリューションとなり得ます。
そこで、Louis MoreauとMihajlo Raljicのおかげで、ハードハットを検出する組み込み機械学習モデルを訓練し、Jetson Nanoにデプロイするこの基本的なプロジェクトを提供します。Jetson NXとJetson AGXの両方もサポートされています。

始める
Edge Impulseは、開発者が組み込み機械学習を使用して次世代のインテリジェントデバイスソリューションを作成することを可能にします。エッジでの機械学習により、コスト、帯域幅、または電力制約のために現在破棄されているセンサーデータの99%を有効活用できるようになります。ここでは、Edge Impulseを適用して組み込み機械学習モデルを訓練します。
ハードウェア
必要なハードウェア
このプロジェクトで必要なデバイスは以下の通りです:
- NVIDIA Jetson NanoまたはNVIDIA Xavier NXまたはNVIDIA Xavier AGX
- PC
- USBケーブルカメラ
- HDMIディスプレイ画面
ハードウェアセットアップ
PCとNVIDIA Jetson Nanoの両方を電源に接続し、インターネットに接続する必要があります。NVIDIA Jetson NanoはPCとしてセットアップすることを推奨します。

ソフトウェア
- Edge Impusle
- NVIDIA Jetson Nano用Ubuntu System
ここでは、ハードハットを検出する組み込み機械学習モデルを訓練します。これを実現するためのいくつかの方法があります。
準備
プロジェクトを開始する前に、まず行う必要がある準備作業があります。
- ステップ 1. Edge Impulse websiteを開き、アカウントを登録します。

- ステップ 2. "Create new project"をクリックし、プロジェクトの名前を入力します。

ここでは"Hard hat detection"と入力します。

- ステップ 3. ハードハットを検出する組み込みMLモデルを訓練するため、ここでは"image"オプションを選択する必要があります。

- ステップ 4. 設定を"Classify multiple objects (object detection)"に設定します。

これでプロジェクトを開始できます。

ハードハット検出MLモデルトレーニング
入力パブリックデータセットに基づくMLモデルトレーニング
Edge Impulseはデータ収集のためのいくつかの方法を提供しています。まず、パブリックデータをウェブサイトにアップロードし、組み込み機械学習の開発を試みます。
- ステップ1. 左側の列の「Data acauistion」ページを選択し、データを収集します。

- ステップ2. Flickr-Faces-HQ Dataset Githubからデータセットを選択してダウンロードします。

「Data acquisition」ページの「upload data」ボタンをクリックし、ダウンロードしたデータセットをアップロードします。

Data Acquisition Format(CBOR、JSON、CSV)、WAV、JPG、またはPNGファイルとして既存のデータをプロジェクトにアップロードすることは任意です。

- ステップ3. アップロードが完了すると、収集されたデータはラベル付きの画像で満たされます。ページの左側の「Impulse desigh」をクリックして続行します。

- ステップ4. 適切な処理画像ブロックと画像学習ブロックを選択し、インパルスを保存します。

- ステップ5. ページの左側の「image」をクリックします。

「GRB」として設定し、「Save Parameters」をクリックすると、ページは自動的に「Generate features」サイトに移動します。

その後、特徴量を生成することができます。

- ステップ6. 「Job completed」が表示されたら、ページの左側の「Object detection」をクリックします。

「start training」をクリックし、Edge Impulseに生成された特徴量に基づいてモデルをトレーニングさせます。

- ステップ7. 「job done」が表示されたら、「Model testing」をクリックしてモデルの動作を確認します。

カスタマイズされたPCカメラデータセットに基づくMLモデルトレーニング
Edge Impulseはデータ収集のためのいくつかの方法を提供しています。ここでは、独自の画像をカスタマイズし、PCカメラで写真を撮影してウェブサイトにアップロードします。
- ステップ1. 「Dashboard」ページに留まり、「LET'S COLLECT SOME DATA」をクリックします。

データ収集のために選択できる複数のオプションがあります。ここではコンピューターを使用して進めます。

- ステップ2. しばらくすると、ページにコンピューターに接続されたことが表示されます。「Collecting images?」をクリックし、次に「Give access to the camera」をクリックします。

- ステップ3. 「Capture」をクリックして自分や他の人の写真を撮影します。画像データはセクションで「Hard Hat」と「Head」としてラベル付けする必要があります。写真を素早くラベル付けするために、次のカテゴリに移る前に1つのカテゴリのデータ取得を完了することを強く推奨します。つまり、「Hard Hat」の写真の撮影を完了してから「Head」の写真の撮影に移ることを推奨します。

撮影された写真は自動的に「Data acquistion」に保存されます。トレーニングモデルのより良いパフォーマンスのために、できるだけ多くの写真を収集し、異なるカテゴリで同じ量のデータを収集することを強く推奨します。

- ステップ4. 「Labeling queue」をクリックして、写真上で頭部を四角で囲むことでデータにラベルを付けます。

マウスを使用してオブジェクトの周りにボックスをドラッグしてラベルを追加します。次に、Save labelsをクリックして次のアイテムに進みます。

ラベルを「Head」と「Hard Hat」として設定し、ダイアログを入力します。四角が人の頭部の領域を囲んでいることを確認してください。

- ステップ5. データにラベルが付けられたら、「Save labels」をクリックして「Impulse design」に移動します。

- ステップ6. 適切な処理画像ブロックと画像学習ブロックを選択し、インパルスを保存します。

- ステップ7. ページの左側の「image」をクリックします。

"GRB"として設定し、"Save Parameters"をクリックすると、ページは自動的に"Generate features"サイトに移動します。

その後、特徴量を生成することができます。

- ステップ 8. "Job completed"が表示されたら、ページの左側にある"Object detection"をクリックします。

"start training"をクリックし、Edge Impulseに生成された特徴量に基づいてモデルを訓練させます。

- ステップ 9. "job done"が表示されたら、"Model testing"をクリックしてモデルの動作を確認します。

カスタマイズされたNVIDIA Jetsonカメラデータセットに基づくMLモデル訓練
Edge Impulseはデータ収集のためのいくつかの方法を提供しています。ここでは、Nvidia Jetson Nanoに接続されたカメラを通じて写真を撮影することで、独自の画像をカスタマイズし、ウェブサイトにアップロードします。
- ステップ 1. ハードウェアに応じて、外部モニターとキーボードの接続のためにNVIDIA Jetson Nano Developer KitまたはNVIDIA Jetson Nano 2GB Developer Kitをセットアップします。Jetson Nanoにスクリーンディスプレイを接続します。

- ステップ 2. Jetson Nanoがインターネットに接続されていることを確認し、Edge Impulseでデバイスをセットアップします。
以下のコマンドでネットワークを確認できます:
ping -c 3 www.google.com
ネットワークが正常に動作している場合、結果は次のようになります:
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
以下のコマンドでセットアップが実行開始されます:
edge-impulse-linux
その後、ウェブサイトはEdge Impulseアカウントを要求します。

以下のように表示される内容は、接続が完了したことを意味します。Edge Impulseに保存したすべてのプロジェクトが選択可能です。

写真を撮影するため、ここではウェブサイトで使用するUSB-Cameraを選択する必要があります。

ウェブサイトに接続したいデバイスに名前を付けます。

Device Jetson Nanoがプロジェクトに接続されたことが明確に確認できます。

- ステップ 3. Edge Impulseページに戻り、「Devices」列を選択します。接続されたJetson Nanoは以下のように表示されます:

- ステップ 4. Edge Impulseに接続したデバイスを選択し、「Data acquisition」ページに移動します。「Capture」をクリックして、自分自身や他の人の写真を撮影します。画像データは、このセクションで「Hard Hat」と「Head」としてラベル付けする必要があります。写真を素早くラベル付けするために、次のカテゴリに移る前に1つのカテゴリのデータ収集を完了することを強く推奨します。つまり、「Hard Hat」の写真の撮影を完了してから「Head」の写真の撮影に移ることを推奨します。

撮影された写真は「Data acquisition」に自動的に保存されます。トレーニングモデルのより良いパフォーマンスのために、可能な限り多くの写真を収集し、異なるカテゴリで同じ量のデータを収集することを強く推奨します。
-
ステップ 5. データの収集が完了したら、「Impulse design」に移動します。
-
ステップ 6. 適切な処理画像ブロックと画像学習ブロックを選択し、インパルスを保存します。

- ステップ 7. ページの左側にある「image」をクリックします。

「GRB」として設定し、「Save Parameters」をクリックすると、ページは自動的に「Generate features」サイトに移動します。

その後、特徴量を生成することができます。

- ステップ 8. 「Job completed」が表示されたら、ページの左側にある「Object detection」をクリックします。

「start training」をクリックし、Edge Impulseに生成された特徴量に基づいてモデルをトレーニングさせます。

- ステップ 9. 「job done」が表示されたら、「Model testing」をクリックしてモデルの動作を確認します。

上記で提供した方法を組み合わせて使用し、各モデルのパフォーマンスを確認してどちらが優れているかを確認することを推奨します。
Jetson NanoにMLモデルをデプロイする
次に、訓練されたMLモデルをJetson Nanoにデプロイし、コードを適用して()を実現します。
Edge Impulse Linux CLIを通じてMLモデルをデプロイする
- ステップ1. ハードウェアに応じて、外部モニターとキーボードの接続のためにNVIDIA Jetson Nano Developer KitまたはNVIDIA Jetson Nano 2GB Developer Kitをセットアップします。Jetson Nanoにスクリーンディスプレイを接続します。

- ステップ2. Jetson Nanoがインターネットに接続されていることを確認し、Edge Impulseでデバイスをセットアップします。
!!!Note 「カスタマイズされたNVIDIA Jetsonカメラデータセットに基づくMLモデル訓練」のセクションで既にJetson NanoをEdge Impulseに接続している場合、このステップはスキップできます。
以下のコマンドでネットワークを確認できます:
ping -c 3 www.google.com
ネットワークが正常に動作している場合、結果は次のようになります:
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
以下のコマンドでセットアップが実行開始されます:
edge-impulse-linux
ウェブサイトはEdge Impulseアカウントを要求します。

以下のように表示される内容は、接続が完了したことを意味します。Edge Impulseに保存したすべてのプロジェクトが選択可能です。

写真を撮影するため、ここではウェブサイトで使用するUSB-Cameraを選択する必要があります。

ウェブサイトに接続したいデバイスに名前を付けます

Device Jetson Nanoがプロジェクトに接続されたことが明確に確認できます。

- Step 3. 以下のコードに従って、MLモデルをJetson Nanoにダウンロードします。
edge-impulse-linux-runner

接続が成功すると以下のように表示され、モデルが自動的にアクティベートされます。

- ステップ 4. 表示されたアドレスをコピーし、ブラウザで開きます。

検出結果がブラウザに表示されます。

データの出力結果は以下のように表示されます:

Linux Python SDK を使用したMLモデルのデプロイ
このプロジェクトでは、「立入禁止」と「ようこそ」を表示することで、ヘルメット検出をスクリーンに表示するモデルを適用します。Edge Impulse は、Python を使用して Linux マシン上でMLモデルの実行とセンサーデータの収集を可能にするライブラリを提供しています。この SDK はオープンソースで、GitHub でホストされています。すでに設定済みのミラーイメージも試すことができます。
-
ステップ 1. Linux 用の最新バージョンの Python 3(>=3.7)をインストールします。
-
ステップ 2. 以下のコマンドで Linux Python SDK をインストールします:
sudo apt-get install libatlas-base-dev libportaudio2 libportaudiocpp0 portaudio19-dev

pip3 install edge_impulse_linux

- ステップ 3. 以下のコマンドで Edge Impulse for Linux CLI をインストールします:
sudo apt install python3.7-dev

wget -q -0 - https://cdn.edgeimpulse.com/firmware/linux/jetson.sh | bash

- ステップ 4. 以下のコマンドでMLモデルをJetson Nanoにダウンロードします:
edge-impulse-linux-runner --download modelfile.eim

Jetson NanoとEdge Impulseの間で初回接続の場合、ウェブサイトはログインのためにEdge Impulseアカウント情報を要求します。

!!!Note これによりファイルがmodelfile.eimにダウンロードされます。プロジェクトを切り替えたい場合は、'--clean'を追加することで実行できます。
- Step 5. 以下のコマンドでMLモデルを適用するためにhardhat_detectation.pyを実行します。コードには外部ファイルが必要な場合があります。
python3 hardhat_detectation.py /home/jetson-nano/modelfile.eim

- ステップ 6. 結果は以下のようになるはずです:


または画像でも可能です。PPE検出パイプライン用のMLアプリケーションを5分でデプロイしませんか?ご期待ください!
技術サポート & 製品ディスカッション
弊社製品をお選びいただき、ありがとうございます!弊社製品での体験が可能な限りスムーズになるよう、さまざまなサポートを提供いたします。異なる好みやニーズに対応するため、複数のコミュニケーションチャンネルを用意しています。