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物体検出モデルのデータセットを生成するサンプルです。
◎ Unity Simulation Smart Camera Example
「Perception」が自動運転のシミュレーションでどのように活用するかを示すサンプルです。データセットは「ローカル」、または「Unity Simulation」で大規模に生成できます。
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」を選択。
【2】 新規シーンの作成
(1) メニュー「File → New Scene」でシーンを作成。
(2) 「Main」と名前を指定して保存。
【3】 カメラの設定
(1) 「Main Camera」を選択し、TransformのPositionに(0, 0, 0)を指定。
(2) 「Main Camera」を選択し、「Add Component」をクリックし、「Perception Cameraコンポーネント」を追加。
「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」を配置。
(5) 各「Cube」を選択し、「Add Component」をクリックし、「Labelingコンポーネント」を追加。
(6)「+」をクリックし、テキストフィールドにオブジェクト名と同じ名前「Cube」「Box」「Crate」を指定。
(7) Projectウィンドウで、「+ → Perception → Semantic Segmentation Label Configuration」で「Semantic Segmentation Label Configuration」を作成し、「SemanticSegmentationLabelConfig」と名前を指定。
(8) 「SemanticSegmentationLabelConfig」を選択し、「+」をクリックし、テキストフィールドにオブジェクト名「Cube」「Box」「Crate」を指定。
(9) Hierarchyウィンドウで、「Main Camera」を選択し、「Perception Camera」で「+」をクリックし、「SemanticSegmentationLabeler」を追加し、「Label Config」に「SemanticSegmentationLabelConfig」をドラッグ&ドロップ。
【5】 シミュレーションを実行してデータセットを生成
(1) Unity EditorでPlayボタンを押す。
(2) シーンを数秒間実行してから、プレイモードを終了。
(3) コンソールログに、生成されたデータセットのパスが示される。
Dataset written to /Users/furukawahidekazu/Library/Application Support/DefaultCompany/HelloPerception/2add5c2c-91cc-48ee-ad9c-5de88983d681
データセットフォルダには、次のデータが出力されています。
・RGB画像
・セマンティックセグメンテーション画像
・JSONデータセット
・ログ
5. Labeler
「Labeler」は、カメラ映像からどのようなデータセットを生成するかを指定する情報セットで、「Perception Camera」に追加します。
現在は以下の「Labeler」が提供されています。
・Semantic Segmentation Labeler : SemanticSegmentationLabelConfig
・Bounding Box 2D Labeler : IdLabelConfig
・Object Count Labeler : IdLabelConfig
・Rendered Object Info Labeler : IdLabelConfig
◎ Semantic Segmentation Labeler
カメラ映像から「セマンティックセグメンテーション画像」を生成します。「SemanticSegmentationLabelConfig」でラベル毎のオブジェクト色を指定します。未指定の場合、黒で描画されます。
◎ Bounding Box 2D Labeler
カメラ映像から「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」で情報を生成するラベルを指定します。
この記事が気に入ったらサポートをしてみませんか?