見出し画像

Unity Perception 入門(1) - チュートリアル

Unityの「Perception」の使い方をまとめました。

・Unity 2019.4.5f1

1. Perception

Perception」は、機械学習の学習に利用する大規模データセットを生成するためのパッケージです。現在は、「カメラベース」の限られたユースケースに焦点を当てていますが、将来的には他の形式のセンサーや、機械学習タスクに拡張される予定です。

「Perception」で生成したデータセットの解析には「Dataset Insights」、スケールには「Unity Simulation」を利用することができます。

Unity Perception : データセットの生成
Dataset Insights : 生成したデータセットの解析
Unity Simulation : データセットの生成のスケール

2. Perceptionのサンプル

SynthDet
2D物体検出モデルのデータセットを生成するサンプルです。

画像10

Unity Simulation Smart Camera Example
「Perception」が自動運転のシミュレーションでどのように活用するかを示すサンプルです。データセットは「ローカル」、または「Unity Simulation」で大規模に生成できます。

画像11

3. Perceptionのインストール

Perception」を利用するには、「Unity 2019.3以降」が必要です。

(1) 「URP」または「HDRP」でUnityプロジェクトを作成。
(2) メニュー「Window → Package Manager」で「Package Manager」を開く。
(3) 「+ → Add package from git URL...」を選択し、「com.unity.perception」を入力し、「Add」をクリック。
特定のバージョンが必要な場合は、末尾にバージョンを追加してください。

【例】 com.unity.perception@0.1.0-preview.4

4. チュートリアル

今回は、教師あり学習で利用する「セマンティックセグメンテーション」のデータセットを生成します。

【1】 GroundTruthRendererFeatureの追加

【注意】「URP」の場合に必要な設定です。「HDRP」の場合はスキップできます。

(1) Projectウィンドウの「ScriptableRenderer」を選択。
Assets/Settings/ForwardRenderer.asset」にあります。
(2) 「Add Renderer Feature」をクリックし、「Ground Truth Renderer Feature」を選択。

画像1

【2】 新規シーンの作成
(1) メニュー「File → New Scene」でシーンを作成。
(2) 「Main」と名前を指定して保存。

【3】 カメラの設定
(1) 「Main Camera」を選択し、TransformのPositionに(0, 0, 0)を指定。
(2) 「Main Camera」を選択し、「Add Component」をクリックし、「Perception Cameraコンポーネント」を追加。

画像2

「Perception Cameraコンポーネント」の設定項目は、次のとおりです。

・Description : JSONデータセットに登録されるカメラの説明。
・Period : カメラのフレーム間のシミュレーション時間(秒)。
・Start Time : 最初のフレームを実行するシミュレーション時間(秒)。
・Show Visualizations : 有効時に、ラベラーの結果をシーンにリアルタイム表示。
・Capture Rgb Images
: 有効時に、RGB画像がデータセットに保存。
・Camera Labelers : データセットを生成するラベラーのリスト。

【4】 ラベル付きオブジェクトの作成
(1) Hierarchyウィンドウで、「+ → 3D Object → Cube」で「Cube」を作成。
(2) さらに2つの「Cube」を作成。
(3) 「Cube」のオブジェクト名を「Cube」「Box」「Crate」に変更。
(4) 「Main Camera」の前に3つの「Cube」を配置。

画像3

(5) 各「Cube」を選択し、「Add Component」をクリックし、「Labelingコンポーネント」を追加。
(6)「+」をクリックし、テキストフィールドにオブジェクト名と同じ名前「Cube」「Box」「Crate」を指定。

画像4

(7) Projectウィンドウで、「+ → Perception → Semantic Segmentation Label Configuration」で「Semantic Segmentation Label Configuration」を作成し、「SemanticSegmentationLabelConfig」と名前を指定。
(8) 「SemanticSegmentationLabelConfig」を選択し、「+」をクリックし、テキストフィールドにオブジェクト名「Cube」「Box」「Crate」を指定。

画像6

(9) Hierarchyウィンドウで、「Main Camera」を選択し、「Perception Camera」で「+」をクリックし、「SemanticSegmentationLabeler」を追加し、「Label Config」に「SemanticSegmentationLabelConfig」をドラッグ&ドロップ。

画像6

【5】 シミュレーションを実行してデータセットを生成
(1) Unity EditorでPlayボタンを押す。

画像8

(2) シーンを数秒間実行してから、プレイモードを終了。
(3) コンソールログに、生成されたデータセットのパスが示される。

Dataset written to /Users/furukawahidekazu/Library/Application Support/DefaultCompany/HelloPerception/2add5c2c-91cc-48ee-ad9c-5de88983d681

データセットフォルダには、次のデータが出力されています。

・RGB画像
・セマンティックセグメンテーション画像
・JSONデータセット
・ログ

画像9

画像9

5. Labeler

Labeler」は、カメラ映像からどのようなデータセットを生成するかを指定する情報セットで、「Perception Camera」に追加します。

画像6

現在は以下の「Labeler」が提供されています。

・Semantic Segmentation Labeler : SemanticSegmentationLabelConfig
・Bounding Box 2D Labeler : IdLabelConfig
・Object Count Labeler : IdLabelConfig
・Rendered Object Info Labeler : IdLabelConfig

◎ Semantic Segmentation Labeler

画像12

カメラ映像から「セマンティックセグメンテーション画像」を生成します。「SemanticSegmentationLabelConfig」でラベル毎のオブジェクト色を指定します。未指定の場合、黒で描画されます。

◎ Bounding Box 2D Labeler

画像13

カメラ映像から「2Dバウンディングボックス」の情報を生成します。「IdLabelConfig」で情報を生成するラベルを指定します。オブジェクトの隠れた部分やフレーム外は含まれません。

◎ Object Count Labeler

{
    "label_id": 25,
    "label_name": "drink_whippingcream_lucerne",
    "count": 1
}

カメラ映像から「ラベル毎のオブジェクト数」の情報を生成します。「IdLabelConfig」で情報を生成するラベルを指定します。カメラ映像に1ピクセルでも含まれていたらカウントされます。

◎ Rendered Object Info Labeler

{
    "label_id": 24,
    "instance_id": 320,
    "visible_pixels": 28957
}

カメラ映像から「インスタンスID、ラベルID、表示ピクセル数」の情報を生成します。「IdLabelConfig」で情報を生成するラベルを指定します。


この記事が気に入ったらサポートをしてみませんか?