ARKitScenes深度データセット#
ARKitScenesは、LiDARスキャナーを搭載したiPad Proデバイス上のAppleのARKitを使用して撮影された、大規模な実世界の屋内RGB-Dデータセットです。この種の実世界の屋内RGB-Dデータセットとしては最大規模であり、多様な自然な屋内シーンと、単眼深度推定用の正確な深度正解データを提供します。
主な機能#
- iPad Pro上のApple ARKitのLiDARスキャナーとRGBカメラで撮影されており、実際の(合成ではない)センサーデータを生成します。
- 3D屋内シーンの理解を目的として、多様な屋内シーンを網羅しています。
- ハンドヘルドでの屋内撮影に典型的な、約0.5~6 mの短い深度範囲(最大深度の中央値は約2.4 m)です。
- RGBフレームに位置合わせされた、LiDAR由来の高密度な深度グラウンドトゥルースです。
- Ultralyticsの深度事前学習データミックスにおける、実世界データとして最大の単一ソースです。
データセットの構成#
ARKitScenes深度データセットは、次の2つのサブセットに分かれています。
- Train: トレーニング用の、深度マップとペアになった画像が676,080枚あります。
- Val: モデルのトレーニング中の検証用に、深度マップとペアになった画像が21,559枚あります。
各サンプルは、RGB画像1枚と、ミリメートル単位のuint16深度PNG(depth_scale: 1000)1枚のペアで構成されており、Ultralytics深度データセット形式に準拠しています。これらの数はリリース済みモデルで使用されたサブセットのもので、Training動画4,520本のうち4,347本、Validation動画551本のうち102本から作成されています。完全な分割データを変換すると、ペア数はさらに増えます。
データの取得#
ARKitScenesには自動ダウンロード機能がありません。データはAppleから配布されており、ダウンロードするにはARKitScenesリポジトリでライセンス条項に同意する必要があります。リポジトリをクローンし、rawサブセットのlowres_wide(RGB)およびlowres_depthアセットをダウンロードしてください。このサブセットには、Trainingの全4,520本とValidationの全551本の動画が含まれています。動画リストは必須です。分割CSVを--splitなしで渡すと、1回の呼び出しで両方の分割を取得できます。
git clone https://github.com/apple/ARKitScenes && cd ARKitScenes
python3 download_data.py raw --video_id_csv raw/raw_train_val_splits.csv \
--raw_dataset_assets lowres_wide lowres_depth --download_dir ./dataフレームはdata/raw/{Training,Validation}/<video_id>/{lowres_wide,lowres_depth}/に保存されます。ディスク容量は約2.5 TBを見込んでください。元のストリームは約60 FPSで、以下の変換では30フレームごと(約2 Hz)に1フレームを保持します。
深度フレームはミリメートル単位(0 = 無効)のuint16 PNGで、RGBと深度のファイル名は撮影時刻ですが、正確には一致しません。各RGBフレームをタイムスタンプが最も近い深度フレームとペアにしてください。Ultralytics深度データセット形式への変換例:
import shutil
from bisect import bisect_left
from pathlib import Path
src, dst = Path("data/raw"), Path("datasets/depth-arkitscenes")
for split, out in (("Training", "train"), ("Validation", "val")):
(dst / f"images/{out}").mkdir(parents=True, exist_ok=True)
(dst / f"depth/{out}").mkdir(parents=True, exist_ok=True)
for video in sorted((src / split).iterdir()):
depths = sorted((video / "lowres_depth").glob("*.png"), key=lambda p: float(p.stem.split("_")[-1]))
if not depths:
continue
times = [float(p.stem.split("_")[-1]) for p in depths]
rgbs = sorted((video / "lowres_wide").glob("*.png"), key=lambda p: float(p.stem.split("_")[-1]))
for rgb in rgbs[30::30]: # every 30th frame of the ~60 FPS capture (~2 Hz)
t = float(rgb.stem.split("_")[-1])
i = min(bisect_left(times, t), len(times) - 1)
if i and t - times[i - 1] < times[i] - t:
i -= 1 # nearest-timestamp depth frame
name = f"{out}_{video.name}_{depths[i].stem}"
shutil.copy2(rgb, dst / f"images/{out}/{name}.png")
shutil.copy2(depths[i], dst / f"depth/{out}/{name}.png")YOLO26-Depthにおける役割#
ARKitScenesは、約219万組の画像・深度ペアからなるUltralytics YOLO26-Depthの複数データセット事前学習ミックスにおけるトレーニングソースです。このミックスで最大の実データソースとして、実世界の屋内LiDAR深度データを豊富に提供し、モデルの短距離屋内精度を支えます。作成されたモデルは、標準的なNYU、KITTI、Make3D、ETH3D、iBims-1ベンチマークで評価されます。
データセットYAML#
データセット設定の定義にはYAMLファイルを使用します。このファイルには、データセットのパス、クラス、その他の関連情報が含まれます。
# Ultralytics 🚀 AGPL-3.0 License - https://ultralytics.com/license
# ARKitScenes dataset for monocular depth estimation — real indoor RGB-D from Apple ARKit (iPad Pro LiDAR), depth ~0.5-6 m
# Documentation: https://docs.ultralytics.com/datasets/depth/arkitscenes
# Example usage: yolo depth train data=depth-arkitscenes.yaml model=yolo26n-depth.pt
# No autodownload — obtain the source data (see docs) and arrange it as below.
# parent
# ├── ultralytics
# └── datasets
# └── depth-arkitscenes
# ├── images/{train,val} # RGB images
# └── depth/{train,val} # paired 16-bit *.png depth maps (images/ -> depth/)
path: depth-arkitscenes # dataset root dir (relative to Ultralytics settings 'datasets_dir')
train: images/train # train images (relative to 'path') 676080 images
val: images/val # val images (relative to 'path') 21559 images
nc: 1
names:
0: depth
channels: 3使用方法#
画像サイズ640でARKitScenesデータセット上のYOLO26n-depthモデルをトレーニングするには、以下のコードスニペットを使用できます。使用可能な引数の一覧については、モデルのトレーニングページを参照してください。
from ultralytics import YOLO
# モデルを読み込む
model = YOLO("yolo26n-depth.pt") # 事前学習済みの深度モデルを読み込む(トレーニングに推奨)
# モデルをトレーニングする
results = model.train(data="depth-arkitscenes.yaml", epochs=100, imgsz=640)事前学習済みモデル#
YOLO26深度モデルファミリーは、ARKitScenesを含む幅広い複数データセット深度事前学習ミックスでトレーニングされています。これらのモデルは、初回使用時にUltralyticsのv8.4.0アセットリリースから自動ダウンロードされます。たとえば、YOLO26x-depthなどがあり、精度やリソース要件に応じてさまざまなサイズが用意されています。
引用と謝辞#
研究または開発でARKitScenesデータセットを使用する場合は、以下の論文を引用してください。
@inproceedings{baruch2021arkitscenes,
title={ARKitScenes: A Diverse Real-World Dataset for 3D Indoor Scene Understanding Using Mobile RGB-D Data},
author={Baruch, Gilad and Chen, Zhuoyuan and Dehghan, Afshin and Dimry, Tal and Feigin, Yuri and Fu, Peter and Gebauer, Thomas and Joffe, Brandon and Kurz, Daniel and Schwartz, Arik and Shulman, Elad},
booktitle={Thirty-fifth Conference on Neural Information Processing Systems Datasets and Benchmarks Track},
year={2021}
}コンピュータビジョンコミュニティにとって価値あるこのリソースを作成し、維持している著者の皆様に感謝いたします。
よくある質問#
ARKitScenesは、約219万枚の画像からなるYOLO26-Depth事前学習ミックスで最大の実世界データソースです。Apple iPad ProデバイスのLiDARスキャナーで撮影された、トレーニング画像676,080枚と検証画像21,559枚を提供します。高密度な屋内深度データが、リリース済みモデルの短距離精度を支えます。モデルはその後、NYU Depth V2、KITTI、ETH3D、Make3D、iBims-1で評価されます。
ARKitScenesには自動ダウンロード機能がありません。ARKitScenesリポジトリでライセンス条項に同意し、公式の
download_data.pyスクリプトを使ってrawサブセットのlowres_wideおよびlowres_depthアセットをダウンロードしてください。その後、RGBフレームを30フレームごとに1フレーム保持し、データの取得にある変換スクリプトを使って、タイムスタンプが最も近い深度フレームとペアにします。生成データは、uint16ミリメートルPNGを使用する標準のUltralytics深度データセット構成に準拠します。