データローダ
EIPLでは、Pytorchが標準で提供するDataset
クラスを継承した、ロボット動作学習のためのMultimodalDataset
クラスを提供している。
本クラスは毎エポック、モデルへの入力データ x_data
と真値 y_data
のペアを返す。
入力データx_data
は画像と関節角度のペアになっており、毎エポックデータ拡張を行う。
入力画像には、照明変化に対するロバスト性を向上させるために輝度やコントラストなどをランダムに付与し、入力関節角度には、手先位置誤差に対するロバスト性を向上させるためにガウシアンノイズを付与している。
一方で出力データには一切ノイズを加えていない。
モデルはノイズが混じった入力データから、ノイズを無視した状況(内部表現)を学習することで、推論時は実世界のノイズに対しロバストな動作生成が可能になる。
以下は、AIRECを用いて収集した物体把持タスクを例に、MultimodalDataset
クラスの利用方法を示している。
MultimodalDataset
クラスに5次元の画像時系列データ(データ数、時系列長、チャネル、縦、横)と3次元の関節角度時系列データ(データ数、時系列長、関節数)を渡すことで自動的にデータ拡張などが行われる。
なお、SampleDownloader
はEIPLのサンプルデータのダウンロードを行うクラスであり、必ずしも必要ではない。
numpy.load
関数などを用いて、自作データセットを直接読み込んでも良い。
下図はMultimodalDataset
クラスが返したロボットのカメラ画像を示しており、
左から順に右はノイズの無い画像、ノイズが付与された画像、そしてロボット関節角度である。
毎エポックランダムなノイズが画像に付与されるため、モデルは多様な視覚状況を学習する。
またロボット関節角度の黒色点線は、ノイズがないオリジナル関節角度、色付き線はガウシアンノイズが付与された関節角度である。
Note
Proxyなどが原因でデータセットが取得できない場合は、
ここからデータセットを手動でダウンロードし、
~/.eipl/
フォルダ内に保存してください。
dataloader.MultimodalDataset
Bases: Dataset
このクラスは、CNNRNN/SARNNのようなマルチモーダルデータ(画像、関節など)を扱うモデルの学習に使用される。
Source code in ja/docs/model/src/dataloader.py
__getitem__(idx)
指定されたインデックスの画像と関節角度にノイズを付与し、モデル学習のための入出力データのペアを返す。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
idx |
int
|
インデックス |
required |
Returns:
Name | Type | Description |
---|---|---|
input_output_data |
list
|
ノイズが付加された画像と関節角度(x_img, x_joint)と、元の画像と関節角度(y_img, y_joint)のペア |
Source code in ja/docs/model/src/dataloader.py
__init__(images, joints, stdev=0.02)
画像、関節角度、データ拡張を設定する。
Parameters:
Name | Type | Description | Default |
---|---|---|---|
images |
numpy array
|
画像時系列データ [データ数、時系列長、チャネル、縦、横] |
required |
joints |
numpy array
|
関節角度時系列データ [データ数、時系列長、関節角度] |
required |
stdev |
float
|
ガウシアンノイズの分散値、なお平均は0である。 |
0.02
|