Skip to content

v0.2.4

Latest

Choose a tag to compare

@huluoboge huluoboge released this 18 May 22:28
· 11 commits to main since this release

InsightAT v0.2.4 Release Notes

Overview

v0.2.4 brings major performance improvements for large-scale SfM (3000+ images), a new seed-evaluation framework for robust initial-pair selection, and a critical retriangulation bug fix.

18 files changed, 1957 insertions(+), 74 deletions(-)

Performance

BA Outlier Rejection — up to 8× faster

The angle-based outlier rejection stage (reject_outliers_angle_multiview) has been heavily optimized (previously 4141ms on large scenes):

  • Eliminated std::acos: Compare dot products against precomputed cos thresholds — angle ∈ [θ_min, θ_max] ⇔ dot ∈ [cos(θ_max), cos(θ_min)]
  • Early termination: Break inner loop as soon as a valid pair is found
  • Split j-loop into [0,i) ∪ (i,k) to remove the j==i branch from the hot path
  • SoA zero-copy views (obs_image_id_view, track_xyz_data) bypass function-call + assert overhead for ~2M hot-path calls
  • Removed image_flat CSR array: Image index fetched on the fly — saves 8B×total_obs memory + one full fill pass
  • OMP chunk 64→256 for reduced scheduling overhead

Full-Scan Retriangulation — up to 6× faster

The full-scan retriangulation pass has been parallelized (previously 811ms):

  • OMP parallel Phase 1 (schedule(dynamic, 4096)): 3.4M tracks filtered in parallel with per-thread diagnostic counters (no atomics)
  • Quick pre-check: Count valid+restorable registered views with early termination at nv=2 — avoids expensive rebuild+undistort for tracks with insufficient views
  • Serial Phase 2: Only the few tracks that pass all gates (safe shared-state operations)

New Feature: Seed Evaluation Framework

  • isat_seed_eval — New CLI tool for evaluating and comparing initial-pair (seed) strategies
  • seed_eval_common — Shared strategy/scoring infrastructure with unit tests
  • Pipeline integration: Seed evaluation is now a first-class step in isat_sfm, with configurable strategy selection
  • Stable resection: Improvements to the resection module for more robust initial-pair selection
  • Init gate controls: Seed-evaluated init gates are propagated into the final isat_incremental_sfm run
  • Scripts: Batch evaluation (run_seed_eval_batch.py) and visualization (visualize_seed_eval.py) helpers
  • Design doc: doc/dev-notes/2026-05-17-seed-eval-cli-design.md

Bug Fix

Retriangulation Epoch Gate for Non-Triangulated Tracks

mark_track_tri_attempted() + the epoch gate prevented retrying failed triangulations within the same global pose epoch, even when new image registrations added observations between full-scans. Non-triangulated tracks must be retried every full-scan to catch newly-triangulable tracks.

  • Removed epoch gate for non-tri tracks
  • Removed mark_track_tri_attempted() calls in both quick pre-check and triangulation-failure paths
  • Epoch gate retained for already-triangulated tracks (correct behavior)

Tools Affected

Tool Impact
isat_incremental_sfm Perf ↑, bug fix
isat_sfm Perf ↑, new seed-eval integration
isat_seed_eval New

InsightAT v0.2.4 发布说明

概述

v0.2.4 带来了大规模 SfM(3000+ 图像)场景下的重大性能提升、全新的初始像对评估(Seed Evaluation)框架,以及一个关键的 retriangulation 错误修复。

18 个文件变更,+1957 / −74

性能优化

BA 角度外点剔除 — 最高 8 倍 加速

角度外点剔除阶段 reject_outliers_angle_multiview 经过大幅优化(此前在大场景中耗时 4141ms):

  • 消除 std::acos:使用预计算的 cos 阈值直接比较点积 — 角度 ∈ [θ_min, θ_max] ⇔ 点积 ∈ [cos(θ_max), cos(θ_min)]
  • 提前终止:找到有效配对后立即退出内层循环
  • 拆分 j 循环[0,i) ∪ (i,k),消除热路径中的 j==i 分支
  • SoA 零拷贝视图obs_image_id_viewtrack_xyz_data)绕过函数调用 + assert 开销(约 200 万次热路径调用)
  • 移除 image_flat CSR 数组:图像索引实时获取 — 节省 8B×总观测数 内存 + 一次完整填充
  • OMP chunk 64→256 减少调度开销

Full-Scan Retriangulation — 最高 6 倍 加速

full-scan retriangulation 阶段已并行化(此前耗时 811ms):

  • OMP 并行 Phase 1schedule(dynamic, 4096)):340 万条 track 并行过滤,使用每线程诊断计数器(无原子操作)
  • 快速预检查:统计有效+可恢复的已注册视图,在 nv=2 时提前终止 — 避免对视图不足的 track 执行昂贵的重建+畸变校正
  • 串行 Phase 2:只有通过所有关卡的小部分 track 进入此阶段(安全的共享状态操作)

新功能:Seed Evaluation 框架

  • isat_seed_eval — 新的 CLI 工具,用于评估和比较初始像对(seed)策略
  • seed_eval_common — 共享的策略/评分基础设施,附带单元测试
  • 管线集成:Seed Evaluation 现在作为 isat_sfm 的一级步骤,支持可配置的策略选择
  • 稳定化 Resection:改进 resection 模块,使初始像对选择更鲁棒
  • Init Gate 控制:seed evaluation 选出的最优 init gate 会传递到最终的 isat_incremental_sfm 运行
  • 辅助脚本:批量评估(run_seed_eval_batch.py)和可视化(visualize_seed_eval.py
  • 设计文档doc/dev-notes/2026-05-17-seed-eval-cli-design.md

Bug 修复

Non-Triangulated Track 的 Epoch Gate

mark_track_tri_attempted() + epoch gate 阻止了在同一全局 pose epoch 内重试失败的三角化,即使两次 full-scan 之间新增了图像注册(带来了新的观测)。未三角化的 track 必须在每次 full-scan 中重试,才能捕获到新增的可三角化机会。

  • 移除了 non-tri track 的 epoch gate
  • 移除了快速预检查和三角化失败路径中的 mark_track_tri_attempted() 调用
  • 已三角化的 track 保留 epoch gate(正确行为)

受影响的工具

工具 影响
isat_incremental_sfm 性能提升 ↑,bug 修复
isat_sfm 性能提升 ↑,新增 seed-eval 集成
isat_seed_eval 新增