フォトグラメトリー編-03・3D Gaussian Splattingをちゃんと作る

3D Gaussian SplattingをJetson AGX Orin上で動作させることができました。
次はいよいよちゃんとしたものを作っていこうと思います。
前回は画像数枚からデータを取り出して作ったため、ちょっと動かすだけでガビガビになってしまいました。なので今度は画像の枚数を増やしていきます。でも一枚ずつの撮影はだいぶしんどいので、動画を撮影し、画像に切り出していきたいと思います。
目次

①今日のコンセプト

家の中にあるものでやろうと思ったのですが、3Dにすると見せたくないものまで見えてしまうのでお外にでかけて撮影してきました。
自転車が公園内で走って侵入しないようにする柵?を動画でぐるりと何周か撮影してきたので、それを切り出し、トレーニングを行っていきます。

・動画から画像の切り出し
・トレーニングの実行
・生成物の確認

②動画の切り出し

まずは動画の切り出しです。
ffmpegを使います。使い方はこちらのサイトを参考にさせて頂きました。
動画を切り出して静止画にしたり、動画のフォーマットの変換・FPSの変更などかなりいろいろな変換ができるソフトです。
sudo apt install ffmpeg
インストールしたら実際の動画ファイルを切り出していきます。
ffmpeg -i IMG_1977.MOV -f image2 -r 4 bike_guard/bikeguard_%0d.png
指定した内容は
・-i:IMG_1977.MOVという元ファイル
・-f:画像の形式で
・-r:4fpsで
・bike_guard/:bike_guardというフォルダに
・bikeguard_%0d.png:bikeguard_01.png、bikeguard_02.png、、、と連番のファイル名で保存
という形式になっています。
実行すると、1分も立たないうちに作業は完了。今回は256枚の大作です。
続いてのトレーニングに行きます。

③トレーニングの実行

③-01. convert.pyの実行

画像ファイルは実行フォルダである
~/3d/target/inputフォルダ内に移動させました。
続いては3d gaussian splattingの実行フォルダに移動し、convert.pyを実行します。
cd 3d/gaussian-splatting/
python3 convert.py -s /home/hosol-jetson/3d/target/
この作業も15分程度で完了します。

③-02. train.pyの実行(失敗編)

次はいよいよ大仕事。トレーニングの実行です。前回実行したときもかなり時間がかかってしまっていたので長時間放置できるタイミングで実行しました。
予想時間から見て少し余裕を持って5時間程度立ってから確認してみました。すると、、、
調べてみるとどうもVRAMの容量不足でタスクが終了してしまったようです。。30GBあっても画像の枚数や容量によってVRAMの使用量が上がってしまい、生成が終わらないで終了してしまうようです。。。
どの程度までは行けるのかなどはもう突き詰めないとです。。

③-03. swap領域の増量

本当は実行する画像の軽量化や解像度の調整などを試したいところですが、まずは力技で完成させてみたいと思います。Jetson AGX orinにはM.2 SSDを増設したためストレージにはかなり余裕があります。なのでswap領域をかなり広めに取ることでメモリの不足を補いたいと思います。
swap領域の拡張方法はこちらのサイトを参考にさせて頂きました。

スワップファイルの作成

sudo fallocate -l 70G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
とりあえず、元々の32GBのVRAM(共用)と合わせて100GBにしたらぁ!という適当な考えで70GBのswap領域を作ることにします。

マウント設定ファイルの編集

sudo nano /etc/fstab
/swapfile none swap defaults 0 0 ※末尾に追記
/etc/fstabに追記し、終わったらCtrl + Oで上書き(ファイル名を確認したらEnterで保存)し、Ctrl + Xでnanoエディターを閉じます。
そうしたら本体を再起動。起動が終わったらswap領域を確認します。
free -f
なんか想定よりかなり大きくなっていますがまあそこまでカツカツではないので良しとして進めたいと思います。

③-04. train.pyの実行(本番)

では改めてtrain.pyを実行していきます。
実行後の時間を見ると17:53もかかっています。swap領域を使ったことや画像の容量が大きいままであったことなどが悪影響を与えていそうです。。それでもエラーが出ることなく最後まで実行できたのでとりあえずは目的は果たせました。

④Viewerで生成物の確認

わりと引くほど時間がかかってしまいましたが、どの様になっているか確かめていきます。
ViewerはWindows PCに入れているためファイルを移して実行します。そのまま見せることが難しいため、今回は動画でお見せしたいと思います。
動画内でも操作していますが、操作モードはTrackballモードがおすすめです。
右クリックしながらドラッグするとカメラの移動、
左クリックをしながらドラッグするとカメラの回転、
画面の外側を左クリックしながら動かすとカメラの軸回転
というように操作できます。キーボードを使うのが面倒なのでこれが一番楽だと感じました。
回転させてもガビガビになりにくいです!
カメラを引くと撮影できていない部分が出てきてしまいますが、同じような視点で回していく分にはほとんど破綻なく出ていると思います。
でも流石に撮影も何もない地面の中はどうしようもないですね。ゲームのバグが発生して床を抜けてしまったような状態になってしまいます。地面の設定ができると良いんですが、、、

⑤まとめ

チューニングはマジで大事と実感します。
3D gaussian splattingは実行時間が割と短めなところが利点として挙げられているのですが、画像の容量などをちゃんと考えないでやるとかなり時間がかかってしまいます。メリットを潰してしまうことになるのでしっかりとチューニングしていきます。

また、撮影時は気持ち引いて取ったほうが良さそうです。フルHDの解像度で撮影していましたが、アップにしてもそこまで違和感はなく、動かすことから被写体にそこまで寄ることもないので引きの画面で破綻を減らしたほうが良さそうです。
今回は力技でやってしまいましたが、見た目を変えずに画像を軽量化したり、画像の抜き出しの際にfpsを下げて比較してみたりとやれそうなことはあるので次回以降の実行時にはそういった部分もしっかりしていきたいと思います。
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

AIにボクの分も働いてもらいたい

コメント

コメントする

目次