はじめに
前回はデモデータで物体の三次元姿勢推定を実行しました。
今回はカスタムデータを用いて物体の三次元姿勢推定をする方法について説明します。
前提条件
前提条件は以下の通りです。
- Windows11 or Windows10
- COLMAP がインストールされている
- CloudCompare がインストールされている
カスタムデータの準備
今回は以下のようなデータを用意しました。
実際は 30s かけて撮影しています。
平らな床か台に置いて、一周撮影すると点群がきれいに生成されます。
こちらの動画を train_raspi.mp4 として Gen6D の data/custom/video に配置します。
動画から画像の切り出し
下記コマンドで簡単に可能です。
python3 prepare.py --action video2image --input data/custom/video/train_raspi.mp4 --output data/custom/raspi_test/images --frame_inter 10 --image_size 960 --transpose
この辺は前回と前々回の記事で説明しています。
画像から pointclound の生成
python3 prepare.py --action sfm --database_name custom/raspi_test --colmap ../COLMAP-3.7-windows-no-cuda/COLMAP.bat
pointcloud.ply が作成されます。
pointcloud の切り出しと meta_info.txt の編集
こちらの記事で説明しております。
Gen6D の推論の実行
python3 predict.py --cfg configs/gen6d_pretrain.yaml --database custom/raspi_test --video data/custom/video/raspi_train.mp4 --resolution 960 --transpose --output data/custom/raspi_test/test --ffmpeg ../ffmpeg-master-latest-win64-gpl/bin/ffmpeg.exe
結果の確認
訓練データで実行
良好です。背景や傾きを変更してテストしていきます。
背景を変更して推論
ある程度の堅牢性も確認できました。
物体を並べて推論
並べるとどちらか一方のみを推論します。(設定によってはできる…?)
物体を重ねて推論
動画の最後の方になると、物体を重ねて検知してしまい、姿勢推定が失敗しています。
物体が重なると失敗する理由
Gen6D のバックエンドは VGG-16 を使用しています。
物体認識のバックエンドなのでバウンディングボックス単位の解析となり、物体のバウンディングボックス内に別の物体が映っていると selector もしくは refiner が誤作動してしまいます。
なので、detector を detectron2 や yolact 等のインスタンスセグメンテーションに変更すると、より精密に解析が可能になるはずです。
なんとか実装したいと思います。→ダメでした。
おわりに
今回は Gen6D をカスタムデータセットで学習させました。
様々な結果を見ていただいたと思いますが、まだまだ使いこなせてはいません。
Gen6D のプログラムを読んでより性能を引き出していきたいと思います。
コメント