GoogleCoralで選別ロボットをリサイクルする
コミュニティや企業の平均汚染率は最大25%であることをご存知ですか?つまり、捨てたリサイクルの4分の1はリサイクルされません。これは、リサイクルセンターでの人為的ミスが原因です。伝統的に、労働者はゴミを材料に応じて異なるビンに分類します。人間は間違いを犯し、ゴミを適切に分別できず、汚染につながることになります。今日の社会で汚染と気候変動がさらに重要になるにつれて、リサイクルは私たちの地球を保護する上で大きな役割を果たしています。ロボットを使ってゴミを分別することで、汚染率は大幅に低下します。もちろん、はるかに安価で持続可能です。これを解決するために、機械学習を使用してさまざまなリサイクル材料を選別するリサイクル選別ロボットを作成しました。
デモ:
コード:
このチュートリアルに従うには、GitHubリポジトリのクローンを作成してください。
ステップ1、データの取得:
さまざまなリサイクル材料を検出して認識できるオブジェクト検出モデルをトレーニングするために、2527枚の画像を含むゴミ箱データセットを使用しました。
- 501ガラス
- 594紙
- 403段ボール
- 482プラスチック
- 410メタル
- 137個のゴミ箱
画像の例を次に示します。
このデータセットは、オブジェクト検出モデルをトレーニングするために非常に小さいです。正確なモデルをトレーニングするには少なすぎるゴミの画像が約100枚しかないため、除外することにしました。
このGoogleドライブフォルダを使用して、データセットをダウンロードできます。必ずdataset-resized.zipファイルをダウンロードしてください。これには、トレーニングを高速化するために、すでに小さいサイズにサイズ変更された画像のセットが含まれています。生の画像のサイズを自分の好みに合わせたい場合は、dataset-original.zipファイルをダウンロードしてください。
ステップ2、画像のラベル付け:
次に、オブジェクト検出モデルをトレーニングできるように、さまざまなリサイクル材料のいくつかの画像にラベルを付ける必要があります。これを行うために、画像内のオブジェクトの境界ボックスにラベルを付けることができる無料のソフトウェアであるlabelImgを使用しました。
各画像に適切なラベルを付けます。このチュートリアルでは、その方法を説明します。検出モデルが可能な限り正確になるように、各境界ボックスを各オブジェクトの境界にできるだけ近づけてください。すべての.xmlファイルをフォルダーに保存します。
画像にラベルを付ける方法は次のとおりです。
これは非常に退屈で気が遠くなるような経験です。ありがたいことに、私はすでにすべての画像にラベルを付けています!ここで見つけることができます。
ステップ3、トレーニング:
トレーニングに関しては、Tensorflowを使用した転移学習を使用することにしました。これにより、大量のデータがなくても、まともな精度のモデルをトレーニングできます。
これを行うにはいくつかの方法があります。クラウド上のローカルデスクトップマシンでそれを行うことができます。お使いのコンピューターがどれほど強力であるか、および強力なGPUを使用しているかどうかによっては、ローカルマシンでのトレーニングに非常に長い時間がかかります。これはおそらく私の意見では最も簡単な方法ですが、やはり速度の欠点があります。
転移学習について注意すべき重要なことがいくつかあります。トレーニングに使用する事前トレーニング済みモデルがCoralEdgeTPUと互換性があることを確認する必要があります。互換性のあるモデルはここにあります。 MobileNet SSD v2(COCO)モデルを使用しました。他の人も自由に試してみてください。
ローカルマシンでトレーニングするには、Windows 10で実行している場合は、GoogleのチュートリアルまたはEdjeElectronicsチュートリアルに従うことをお勧めします。個人的には、EdjeElectroncsチュートリアルをテストし、デスクトップで成功しました。 Googleのチュートリアルが機能するかどうかは確認できませんが、機能しない場合は驚きます。
クラウドでトレーニングするには、AWSまたはGCPを使用できます。試してみることができるこのチュートリアルを見つけました。 GoogleのクラウドTPUを使用して、オブジェクト検出モデルを超高速でトレーニングできます。 AWSもお気軽にご利用ください。
ローカルマシンでトレーニングする場合でもクラウドでトレーニングする場合でも、最終的にはトレーニング済みのテンソルフローモデルを作成する必要があります。
ステップ4、トレーニング済みモデルのコンパイル:
トレーニング済みのモデルをCoralEdge TPUで動作させるには、モデルをコンパイルする必要があります。
ワークフローの図は次のとおりです。
トレーニング後、フリーズしたグラフ(.pbファイル)として保存する必要があります。次に、それをTensorflowLiteモデルに変換する必要があります。 「トレーニング後の量子化」と書かれていることに注意してください。転移学習を使用するときに互換性のある事前トレーニング済みモデルを使用した場合は、これを行う必要はありません。互換性に関する完全なドキュメントはこちらでご覧ください。
Tensorflow Liteモデルでは、EdgeTPUモデルにコンパイルする必要があります。これを行う方法の詳細については、こちらをご覧ください。
リサイクル検出モデル:
オブジェクト検出モデルのトレーニング、変換、コンパイルの煩わしさを乗り越えたくない場合は、ここで私のリサイクル検出モデルを確認してください。
ステップ5、モデルのデプロイ:
次のステップは、Raspberry Pi(RPI)とEdge TPUをセットアップして、トレーニングされたオブジェクト検出モデルを実行することです。
まず、このチュートリアルを使用してRPIを設定します。
次に、このチュートリアルに従ってEdgeTPUを設定します。
最後に、RPIカメラモジュールをラズベリーパイに接続します。
これで、オブジェクト検出モデルをテストする準備が整いました!
リポジトリのクローンを作成済みの場合は、RPIディレクトリに移動して、test_detection.pyファイルを実行することをお勧めします。
python test_detection.py --model recycle_ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03 / detect_edgetpu.tflite --labels recycle_ssd_mobilenet_v2_quantized_300x300_coco_2019_01_03 / labels.txt
小さな窓がポップアップし、プラスチック製の水筒やその他のリサイクル材を入れると、次のように検出されます。
キーボードの文字「q」を押してプログラムを終了します。
ステップ6、ロボットアームを構築する:
ロボットアームは、ここで見つけた3Dプリントのアームです。設定に関するチュートリアルに従ってください。
これが私の腕の結果です:
私のコードのArduinoI / Oピンに従ってサーボピンを接続していることを確認してください。サーボをアームの下から上に3、11、10、9、6、5の順序で接続します。この順序で接続しないと、アームが間違ったサーボを動かす原因になります!
Arduinoディレクトリに移動し、basicMovement.inoファイルを実行して、動作することを確認します。これにより、腕の前に置いたオブジェクトをつかんで後ろに落とすだけです。
ステップ7、RPIとロボットアームの接続:
まず、カメラモジュールを爪の底に取り付ける必要があります:
認識されたリサイクル材料をつかむ際のエラーを最小限に抑えるために、カメラをできるだけまっすぐに揃えるようにしてください。材料リストに示されているように、長いカメラモジュールのリボンケーブルを使用する必要があります。
次に、roboticArm.inoファイルをArduinoボードにアップロードする必要があります。
最後に、RPIのUSBポートとArduinoのUSBポートの間にUSBケーブルを接続するだけです。これにより、シリアルを介して通信できるようになります。これを設定する方法については、このチュートリアルに従ってください。
ステップ8、最後の仕上げ:
この手順は完全にオプションですが、すべてのコンポーネントを小さなプロジェクトボックスに入れるのが好きです。
外観は次のとおりです。
出典:GoogleCoralを使用したリサイクルソーティングロボット
製造プロセス