つい先日、WayveからWayveScenes101データセットというものが出た。
都市、郊外、高速道路など様々な条件での101シーンが含まれており、各シーンでは
- 5台のカメラ画像がカメラの内部パラメータ・Poseつきである
- 1シーン20秒
- 各カメラ画像は10Hz(つまり200枚)
となっている。
Integration with the NerfStudio framework
とある通り、colmapの形式で準備されているので、NerfStudioベースのstreet-gaussiang-nsでは動かしやすい。
最初は難易度低めで、移動物体が少ないシーンを試してみるということで、scene_004を選んだ。
0. binからtxtへの変換
street-gaussiang-nsでいきなりbinを読み込むこともできるので本質的には変換は必要ないが、手元の環境だとtxtに変換した方が都合良いところがあったのでこのステップを入れた。変換にはcolmapで用意されているPythonスクリプトを使うと便利。
1. セマセグの追加
street-gaussians-ns/scripts/shells/segs_generate.sh
を使って画像に対してsemantic_segmentationの結果を作る。これは20分ちょいかかる。
2. transform.jsonの追加
適当にフォーマットを見て作った変換スクリプトを使う。
python3 scripts/pythons/make_transform_json_from_colmap_txt.py ~/data/wayve/scene_004/
3. 学習
注意するオプションは
filter_camera_id: Optional[List[int]] = None frame_select=None
あたりだと思われる。他はほぼデフォルトで上手く動く。
4. 結果
front-forwardカメラの結果が以下の通り。
若干ぼやけているところはあるが、かなり上手く再レンダリングできていることがわかる。
違うカメラ、right-backwardの結果が以下の通り。
至近距離の停車している車などは明確にぼやけている。ここで見ていて気づいたが、GTは歪み補正していないような画像になっているのに対して学習結果では補正されている。オプションの与え方が間違っているかもしれない。これはundistort False
で学習した。
一方、オプションの undistort True
にすると、GT画像は正常に歪み補正された状態になるが、今度は学習の方が変な崩れ方をしてしまった。画像自体の歪み補正と、学習するときで二重に歪み補正があるような挙動に見える。コードを追って調べてみたい。