PackNet-Sfmを使ってみる

8月 20, 2021

単眼画像からの深度測定のために提案されたPackNet-Sfmをインストールするときは,dockerが推奨されている.公式のリポジトリでは,親切にmakeコマンドでdockerコンテナを構築するまでを1つのパイプラインで行うことができるが,私の環境ではエラーが頻発した.

そこで本記事では,docker runコマンドで自分でコンテナを作成する方法を紹介する.

まずは以下のコマンドでPackNet-Sfmのイメージからコンテナを作成

docker run -it \
 --gpus all\
 --user root\
 -e NB_UID=$UID\
 --shm-size=100g\
 -p xxxx:8888\
 -v /home/xxxx/:/home/xxxx/\
 -v /mnt/hdd/share:/mnt/hdd/share\
 -w /home/xxxx/\
 --name yyyy packnet-sfm:latest bash

無事にコンテナができたら,コンテナの中で以下を打ち込む.

curl -s https://tri-ml-public.s3.amazonaws.com/github/packnet-sfm/datasets/KITTI_tiny.tar | tar xv -C /data/datasets/

新しいコンテナの中ではcurlが無い場合があるので,apt install curlでインストール.

packnetのソースコードをダウンロード

git clone https://github.com/TRI-ML/packnet-sfm.git

ここまでできたら,以下のコマンドで学習を実行.

python scripts/train.py configs/overfit_kitti.yaml

上のコマンドを動かしてみて,open not enough values to unpackのエラーが出る場合は,下記issueを参考にし,コードを修正.

It seems that the functions compute_depth_metrics( ) and post_process_inv_depth( ), which are both called in evaluate_depth( ) (line 291 within the model_wrapper.py) expect their inputs to be of shape [B, C, H, W], but only the first batch is passed. In this example B=1, but that’s not what the function expects.

So I did replace inv_depths[0] and inv_depths_flipped[0] with inv_depths and inv_depths_flipped at lines 295 and 301 within evaluate_depth( ). Now it seems to be working, and I got the following results from overfitting KITTI

https://github.com/TRI-ML/packnet-sfm/issues/157