トップ 問題解決の記録

model_aligner crash問題

目的

COLMAPのmodel_alignerを使用し、復元した3Dモデルを絶対座標に位置合わせ(ジオリファレンス)する。

背景: SfMで復元されたモデルは「相対座標」

COLMAPのSfM(Structure from Motion)は画像間の特徴点マッチングのみからカメラ位置と3D点群を復元する。この時点では:

DJIドローンは画像ごとにGPS情報を持つ

一方、パイプラインの入力動画から抽出した各フレームには、DJIドローンのSRT(Telemetry)ファイルから取得したGPS座標(緯度・経度・高度)が紐づいている。

このGPS情報を使えば:

  1. 絶対座標への変換(ジオリファレンス): 任意座標系のモデルを現実世界(緯度・経度・標高)にマッピング
  2. スケールの確定: カメラ間の距離がGPSから分かるため、モデルのスケールを実寸に修正
  3. 複数セグメントの統合: 各セグメントを共通のGPS座標系に合わせれば、別々に復元したモデルも正しく重なる
  4. 計測・分析への応用: 絶対座標を持つことで、モデル上で実際の距離・面積・体積を計測できる

model_alignerの役割

COLMAPの model_aligner は、各カメラ画像に紐づいたGPS座標(緯度・経度・高度)を入力として受け取り、SfMで復元された任意座標系のモデルをENU座標系(East-North-Up: 東・北・天頂)に変換する。

ENU座標とは地表の一点を原点とし、東方向をX、北方向をY、天頂方向をZとする直交座標系で、ドローンの測位データとの親和性が高い。

問題

model_alignerが一部のセグメントでアクセス違反によりクラッシュ。特にセグメント数が多いほど発生確率が高くなる傾向があった。

原因

GPS座標からENU座標への変換時に、座標スケールの不一致が発生。COLMAPのSfM座標系とGPS絶対座標系の間でスケールが大きく異なる場合に変換処理が破綻する。

対策

一次対策

model_alignerが失敗した場合は raw model(位置合わせなし) でフォールバック。GPS位置情報は失われるが、メッシュ自体は正常に出力される。

最大2回のリトライ

初回失敗時にパラメータを調整して最大2回再試行。それでも失敗した場合はraw modelを採用。

今後の調査

原因を特定するため、以下を調査予定:

ステータス

一部対策 — 根本原因(座標スケール不一致)の完全解決には至っていないが、実運用上はraw model fallbackで問題なし。絶対座標が必要な場合は別途CloudCompareなどで手動ジオリファレンス可能。