DF-VO配置文件全解:dataset、depth、deep_flow、tracking六大模块一次看懂
【免费下载链接】DF-VODepth and Flow for Visual Odometry项目地址: https://gitcode.com/gh_mirrors/df/DF-VO
DF-VO(Depth and Flow for Visual Odometry)是一个基于单目深度估计与光流网络的视觉里程计开源项目。它的全部运行行为——用哪个数据集、加载什么深度模型、选哪种跟踪器——都由 YAML 配置文件驱动。本文带你快速看懂 DF-VO 配置文件中的 dataset、depth、deep_flow、tracking 等六大核心模块,只需几分钟就能自由切换数据集与网络结构。
🧩 DF-VO配置文件加载机制:默认 + 自定义合并
DF-VO 采用"默认配置 + 自定义配置"的双文件机制(实现见 libs/general/configuration.py 中的ConfigLoader):
- 默认配置:
options/examples/default_configuration.yml,包含全部参数,相当于"参考模板" - 自定义配置:只需写你想改动的参数,未写的部分自动继承默认值
运行入口为 apis/run.py:
# 仅用默认配置运行 python apis/run.py -d options/examples/default_configuration.yml # 默认 + 自定义配置合并运行(-s 可临时指定序列号) python apis/run.py -d options/examples/default_configuration.yml -c options/examples/kitti_tracking.yml -s 10⚠️新手常见坑:文档中若某个选项取值为
None,请留空该字段,不要真的写上字符串'None',否则 YAML 会把它当成普通字符串。
1️⃣ dataset 基础设置:数据集、图像与目录
这是配置的"总开关",决定了 DF-VO 处理什么数据:
| 参数 | 含义 | 可选值/示例 |
|---|---|---|
dataset | 数据集类型 | kitti_odom、kitti_raw、tum-1/2/3、adelaide1/2、robotcar |
image.height/width | 输入图像分辨率 | KITTI 默认 192×640 |
image.ext | 图像扩展名 | jpg/png(TUM 用 png) |
seq | 运行的序列号 | "10"、"rgbd_dataset_freiburg3_..." |
frame_step | 采帧步长 | 1(逐帧);TUM 示例中用5加速 |
cam_mode | 相机模式 | mono/stereo |
directory子节则负责四个路径:
directory: result_dir: result/tmp/0/ # 结果保存目录 img_seq_dir: dataset/kitti_odom/odom_data_jpg/ # 图像序列目录 gt_pose_dir: dataset/kitti_odom/gt_poses/ # 真值位姿(可选,仓库内自带00-10共11条) depth_dir: # 外部真值深度(可选)项目已内置 KITTI 真值位姿,如 dataset/kitti_odom/gt_poses/00.txt,用于轨迹评估与可视化。
2️⃣ depth 深度模块:单目深度估计配置
DF-VO 的深度来源由depth_src控制(留空 = 用网络预测,gt= 用真值深度):
depth: depth_src: # 留空:使用单目深度网络预测 deep_depth: network: monodepth2 # 深度网络,当前为 monodepth2 pretrained_model: model_zoo/depth/kitti_odom/stereo/ # depth.pth 与 encoder.pth 所在目录 max_depth: 50 # 深度截断上限(米) min_depth: 0 # 深度截断下限换数据集时的典型改法(见 options/examples/tum_rgbd_slam.yml):
- 网络仍为
monodepth2,但pretrained_model换成对应域的训练权重(如model_zoo/depth/nyuv2/self_supervised/) - KITTI 单目场景见 options/examples/kitti_mono_sc_train_icra.yml
3️⃣ deep_flow 光流模块:LiteFlowNet 配置
光流网络决定了"像素怎么动",当前版本使用 LiteFlowNet:
deep_flow: network: liteflow # 光流网络,可选 [liteflow] flow_net_weight: model_zoo/optical_flow/LiteFlowNet/network-default.pytorch forward_backward: True # 同时预测前/后向光流并计算前后向一致性forward_backward: True非常重要——它产生的前后向一致性误差(forward-backward consistency)是后续特征点筛选的核心依据。网络源码位于 libs/deep_models/flow/lite_flow_net/。
4️⃣ kp_selection 对应点选择:质量的隐形开关
kp_selection决定从光流中挑哪些像素作为跟踪对应点。默认启用local_bestN(分块局部最优):
| 参数 | 作用 | 默认值 |
|---|---|---|
num_bestN | 选取特征点总数 | 2000 |
num_row / num_col | 图像分块行列数 | 10×10 |
score_method | 打分方式:flow(前后向L2差)/flow_ratio | flow |
thre | 光流一致性掩膜阈值 | 0.1 |
其他可选策略包括bestN(全局最优)、sampled_kp(均匀采样,消融实验用)、rigid_flow_kp(尺度恢复用)。消融对比配置可参考 options/examples/ablation_correspondences_best_n.yml。
5️⃣ tracking 跟踪模块:hybrid、尺度恢复与 PnP
tracking_method是跟踪策略的总开关:hybrid(E-tracker + PnP 混合,默认)或PnP。
tracking_method: hybrid e_tracker: # 基于本质矩阵的相对位姿估计 ransac: reproj_thre: 0.2 # 内点重投影阈值 repeat: 5 # 重复RANSAC次数 validity: method: GRIC # E-tracker有效性判据 [flow, GRIC] kp_src: kp_best # 使用best-N选出的对应点 scale_recovery: # 单目尺度恢复(核心!) method: simple # [simple, iterative] ransac: method: depth_ratio # 拟合目标:使三角化深度/网络深度≈1 thre: 0.1 pnp_tracker: # PnP绝对位姿跟踪 ransac: iter: 100 reproj_thre: 1三者分工:E-tracker估计相对位姿 →scale_recovery用深度图恢复真实尺度 →PnP-tracker提供绝对位姿兜底。相关实现分别在 libs/tracker/E_tracker.py、libs/tracker/pnp_tracker.py 与 libs/tracker/gric.py。
6️⃣ visualization 可视化与其他实验模块
visualization控制运行时的"仪表盘":光流向量图、特征点连线、预测/真值轨迹对比、深度图显示等,全部可用enable类开关精细控制。单目结果无真实尺度时,可用mono_scale(如 TUM 示例设为100)对齐真值轨迹再作可视化。
此外还有三个"进阶区"(默认均关闭):
deep_pose:位姿回归网络(仅实验版使用)stereo:HD3 立体匹配网络online_finetune:在线微调光流/深度网络,含学习率、损失权重等
🚀 快速上手:换数据集只需三步
- 改
dataset与seq:如dataset: tum-1+seq: "rgbd_dataset_freiburg3_long_office_household" - 改
directory:指向你的图像与真值位姿目录(img_seq_dir、gt_pose_dir) - 换
pretrained_model:选择与数据集域匹配的 model_zoo 深度权重
仓库已提供多份现成范例:options/examples/tum_rgbd_slam.yml、options/examples/adelaide_driving.yml、options/examples/oxford_robotcar.yml、options/examples/kitti_tracking.yml,复制一份按需修改即可。
📝 总结
| 模块 | 管什么 | 新手最常改的参数 |
|---|---|---|
| dataset/directory | 数据从哪来 | dataset、seq、img_seq_dir |
| depth | 深度从哪来 | pretrained_model、max_depth |
| deep_flow | 光流从哪来 | flow_net_weight、forward_backward |
| kp_selection | 选哪些点跟踪 | num_bestN、thre |
| tracking | 位姿怎么算 | tracking_method、scale_recovery |
| visualization | 结果怎么看 | enable、vis_gt_traj |
掌握以上六大模块,你就能完全驾驭 DF-VO 的配置体系,从 KITTI 无缝切换到 TUM、Adelaide 或任意自定义数据集。
【免费下载链接】DF-VODepth and Flow for Visual Odometry项目地址: https://gitcode.com/gh_mirrors/df/DF-VO
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考