メインコンテンツまでスキップ

メディアとオブジェクトのログ化

画像、ビデオ、オーディオなど、さまざまなメディアに対応しています。豊富なメディアをログ化して、結果を探索し、run、モデル、データセットを視覚的に比較してみてください。以下に例とハウツーガイドをご紹介します。

備考

各種メディアタイプのリファレンスドキュメントをお探しですか?このページをご覧ください。

備考

これらのメディアオブジェクトをすべてログ化するための動作コードは、このColabノートブックでご覧いただけます。wandb.aiでの結果の見た目はこちらで確認できます。ビデオチュートリアルも上記リンクからご覧いただけます。

画像

入力、出力、フィルターの重み、活性化関数などをトラッキングするために画像をログ化しましょう!

インペインティングを実行するオートエンコーダーネットワークの入力と出力。

画像は、NumPy配列から直接、PIL画像として、またはファイルシステムからログ化できます。

備考

トレーニング中のログ化がボトルネックにならないように、1ステップあたり50枚以下の画像をログ化することをお勧めします。また、結果を表示する際に画像の読み込みがボトルネックにならないようにするためにもこの枚数にしてください。

手動で画像を作成する際に、例えば torchvision からの make_gridを使用して、配列を直接提供します。

配列は、Pillowを使用してpngに変換されます。

images = wandb.Image(
image_array,
caption="Top: Output, Bottom: Input"
)

wandb.log({"examples": images}

最後の次元が1の場合、画像をグレースケールと仮定し、3の場合は RGB とし、4の場合は RGBA とします。配列に float が含まれている場合、0 から 255 までの整数に変換します。画像を異なる方法で正規化したい場合は、mode を手動で指定するか、このパネルの "PIL画像をログに記録" タブで説明されているように、PIL.Image を提供してください。

画像オーバーレイ

W&B UI を介してセマンティックセグメンテーションマスクをログし、それらと対話します(不透明度の変更、時間の経過に伴う変化の表示など)。

W&B UI でのインタラクティブなマスク表示。 オーバーレイをログに記録するには、wandb.Imagemasks キーワード引数に、次のキーと値を持つ辞書を提供する必要があります。

  • 画像マスクを表す2つのキーのうちの1つ:
    • "mask_data":各ピクセルに対して整数のクラスラベルを持つ2D NumPy配列
    • "path":(文字列)保存された画像マスクファイルへのパス
  • "class_labels":(オプション)画像マスク内の整数クラスラベルを読みやすいクラス名にマッピングする辞書

複数のマスクをログに記録するには、以下のコードスニペットのように、複数のキーを持つマスク辞書をログに記録します。

ライブ例を見る →

サンプルコード →

mask_data = np.array([[1, 2, 2, ... , 2, 2, 1], ...])

class_labels = {
1: "tree",
2: "car",
3: "road"
}

mask_img = wandb.Image(image, masks={
"predictions": {
"mask_data": mask_data,
"class_labels": class_labels
},
"ground_truth": {
...
},
...
})

テーブル内の画像オーバーレイ

テーブル内のインタラクティブなセグメンテーションマスク

テーブル内にセグメンテーションマスクをログするには、各行に対してwandb.Imageオブジェクトを提供する必要があります。

以下のコードスニペットで例を示しています。

table = wandb.Table(columns=['ID', 'Image'])

for id, img, label in zip(ids, images, labels):
mask_img = wandb.Image(img, masks = {
"prediction" : {
"mask_data" : label,
"class_labels" : class_labels
},
...
})
table.add_data(id, img)

wandb.log({"Table" : table})
## ヒストグラム

数値のシーケンス(例: リスト、配列、テンソル)が最初の引数として提供される場合、np.histogramを呼び出すことで自動的にヒストグラムが作成されます。注意していただきたいのは、すべての配列/テンソルが平坦化されることです。デフォルトの64ビンを上書きするために、オプションのnum_binsキーワード引数を使用することができます。サポートされているビンの最大数は512です。

UIでは、ヒストグラムはトレーニングステップをx軸に、メトリック値をy軸に、カウントを色で表現し、トレーニング全体でログ記録されたヒストグラムの比較が容易になるようにプロットされます。一度だけのヒストグラムをログに記録する詳細については、このパネルの"Histograms in Summary"タブを参照してください。

wandb.log({"gradients": wandb.Histogram(grads)})

GANのディスクリミネータの勾配

ヒストグラムがサマリーに含まれている場合、Runページ の概要タブに表示されます。ヒストリに含まれている場合は、チャートタブに時間をかけたビンのヒートマップが表示されます。

3D可視化

ログファイルは、'obj', 'gltf', 'glb', 'babylon', 'stl', 'pts.json'の形式で、ランが終了したときにUIでレンダリングされます。

wandb.log({"generated_samples":
[wandb.Object3D(open("sample.obj")),
wandb.Object3D(open("sample.gltf")),
wandb.Object3D(open("sample.glb"))]})

ヘッドフォンのポイントクラウドの正解と予測 ライブ例を見る →

その他のメディア

Weights & Biasesは、さまざまなメディアタイプのログもサポートしています。

wandb.log({
"クジラの歌": wandb.Audio(
np_array,
caption="OooOoo",
sample_rate=32)})

ステップごとにログできるオーディオクリップの最大数は100です。

よくある質問

エポックやステップをまたいで画像やメディアを比較する方法は?

ステップから画像をログするたびに、それらをUIで表示するために保存します。画像パネルを展開し、ステップスライダーを使用して、異なるステップの画像を表示します。これにより、トレーニング中にモデルの出力がどのように変化するかを簡単に比較することができます。

プロジェクトにW&Bを統合したいが、画像やメディアをアップロードしたくない場合は?

W&Bは、スカラーのみをログするプロジェクトでも使用できます。明示的にアップロードするファイルやデータを指定します。画像をログしないPyTorchの簡単な例がこちらになります。

PNGを記録する方法は?

wandb.Imageは、デフォルトでnumpy配列やPILImageのインスタンスをPNGに変換します。

wandb.log({"example": wandb.Image(...)})
# 複数の画像を表示

wandb.log({"example": [wandb.Image(...) for img in images]})

動画をログにする方法は?

動画は、wandb.Videoデータ型を使ってログに記録されます:

wandb.log({"example": wandb.Video("myvideo.mp4")})

これでメディアブラウザで動画を表示できます。プロジェクトのワークスペース、runのワークスペース、またはレポートに移動し、「可視化を追加」をクリックしてリッチメディアパネルを追加してください。

点群をナビゲートしてズームする方法は?

コントロールキーを押しながらマウスを使って空間内を移動できます。

分子の2Dビューをログにする方法は?

wandb.Imageデータ型とrdkitを使用して、分子の2Dビューをログに記録できます:

molecule = rdkit.Chem.MolFromSmiles("CC(=O)O")
rdkit.Chem.AllChem.Compute2DCoords(molecule)
rdkit.Chem.AllChem.GenerateDepictionMatching2DStructure(molecule, molecule)
pil_image = rdkit.Chem.Draw.MolToImage(molecule, size=(300, 300))

wandb.log({"acetic_acid": wandb.Image(pil_image)})
Was this page helpful?👍👎