DFNet复现记录以及思考(DFNet: Enhance Absolute Pose Regression with Direct Feature Matching)
复现的是恢复位姿的DFNet工作勿与同名工作弄混。项目主页ActiveVisionLab/DFNet: DFNet: Enhance Absolute Pose Regression with Direct Feature Matching (ECCV 2022)DFNet框架框架图描述了整个项目的工作流程输入Image I到DFNet网络包含两个模块G-Feature ExtractorF-Pose Estimator。G模块用来从输入图像中提取特征图即Feature Map MF模块用来进行直接位姿回归类似与PoseNet得到估计位姿P^。基于位姿P^输入训练好的NerFh模型h代表加入直方图辅助重复类似步骤1的操作输出Feature Map M^。将真实图像的特征图M与合成图像的特征图M^进行比较通过某种度量作者构造了三元组损失让网络在特征空间中将对应的图像对拉近并与不匹配的图像保持距离。这部分损失常记为 LdmDirect Matching Loss训练时会将其与位姿回归损失一起进行反向传播更新 DFNet 的参数包括 F 和 G。深入理解NeRFH 的引入通过直方图编码解决了真实图像与渲染图像间的曝光差异减少域间差距domain gap。DFNetGF同时学习通过Pose Estimator F回归位姿最小化位姿回归误差通过Feature Extractor G使真实/渲染图在特征空间对齐最小化特征匹配损失 Ldm。作者引入了随机视图合成RVS训练策略对真值位姿进行随机扰动后生成新的合成视角并计算相应的扰动位姿损失。端到端优化最终通过同时最小化这三个目标位姿特征匹配扰动让 DFNet 既能准确回归相机位姿又能在特征空间中保持一致性还使得模型在训练过程中能看到更多样化的视角变化并学习在不同细微扰动下保持一致的位姿预测从而显著提升定位精度和对光照/外观变化的鲁棒性。这里展示作者设计的损失函数方便理解。Ltriplet三元组损失用于直接特征匹配Direct Feature Matching。通过将“真实图像特征”与“对应渲染图像特征”的距离变小、与“非对应图像特征”的距离变大迫使网络在特征空间对齐真实图像与渲染图像从而缩小域间差距domain gap。LRVS随机视图合成损失RVSRandom View Synthesis在训练中对真实位姿 P 进行小幅随机扰动利用 NeRF 渲染出新的虚拟视角图像再让网络对该图像进行位姿预测。该损失项衡量网络在“扰动视角”下的位姿预测误差让模型在面对视角变化时也能保持准确。可以理解为对“真实位姿 扰动”的额外监督信号帮助网络在更多视角下学习到一致的位姿回归能力。位姿回归损失P^real 是网络对真实图像的预测位姿P^syn 是网络对渲染图像的预测位姿P 则是对应的真值位姿或经过扰动后的真值。使用 L2 范数计算误差并取平均前面有 1/2 系数让网络在真实图像和渲染图像两种输入下都能准确预测位姿。训练过程1. 训练 Nerfh目标利用多视角图像及其真值相机位姿训练一个带直方图编码的 NeRF 模型NeRFH。直方图编码通过将目标图像的亮度直方图作为条件输入使渲染出的图像在曝光、色调等外观上更接近真实图像。作用生成一个可以根据给定相机姿态渲染新视角图像的模型这些合成图像将用于后续 DFNet 的训练。输出训练好的 NeRFH 模型权重例如存储为000600.tar这是后续阶段的基础。2. 训练 DFNet 主干目标在有标签数据真实图像及其真值相机位姿的基础上同时利用 NeRFH 渲染出的新视角图像训练 DFNet 的两个主要部分位姿回归器 F直接从输入图像回归出相机的 6-DoF 位姿。特征提取器 G提取图像的中间特征并通过直接特征匹配例如 triplet loss来对齐真实图像与渲染图像的特征。机制直接特征匹配利用真实图像和合成图像在特征空间的对齐缩小域间差距使得网络学到的特征更具有几何一致性和鲁棒性。随机视图合成RVS在训练过程中对真值位姿加上随机扰动生成更多虚拟视角扩充数据量并增强模型的泛化能力。输出训练好的 DFNet 模型它不仅能预测相机位姿还能提取域不变的特征用于后续任务或进一步微调。3. 微调DFNet_dm目标在已经训练好的 DFNet 模型基础上利用额外的无标签数据或半监督策略通过直接特征匹配损失进一步优化位姿预测。通常在这一步中会主要微调位姿回归器 F有时对特征提取器 G 调整较小的学习率以进一步降低定位误差。作用通过在更多数据上优化网络对不同视角下的位姿预测提升最终模型的精度和稳定性使得最终位姿误差更低。输出微调后的 DFNet 模型其定位精度理论上会比主干训练阶段的模型更高。总结训练 NeRFH为 DFNet 提供了渲染新视角的能力解决了真实图像与合成图像外观不匹配的问题。训练 DFNet 主干利用真实图像和 NeRF 渲染图像的结合通过直接特征匹配和随机视图合成训练出既能回归位姿又能提取一致性特征的模型。微调阶段则进一步优化模型尤其是在无标签数据上通过额外的直接特征匹配损失降低定位误差。这三个步骤相互衔接共同构成了 DFNet 的整体训练流程每一步都有明确的目的和输出从而最终得到一个在绝对位姿回归任务上表现优异的模型。复现过程博主用wsl2环境以7-Scenes数据集中的Heads为参考数据以作者在项目github主页提供的代码复现。RGB-D Dataset 7-Scenes - Microsoft Researchhttps://www.microsoft.com/en-us/research/project/rgb-d-dataset-7-scenes/GitHub - ActiveVisionLab/DFNet: DFNet: Enhance Absolute Pose Regression with Direct Feature Matching (ECCV 2022)DFNet: Enhance Absolute Pose Regression with Direct Feature Matching (ECCV 2022) - ActiveVisionLab/DFNethttps://github.com/ActiveVisionLab/DFNet.git训练Nerfhconfig参数############################################### NeRF-Hist training example 7-Scenes ############################################### expnamenerfh basedir../logs/heads datadir../data/7Scenes/heads dataset_type7Scenes lrate_decay0.754 trainskip5 testskip50 df4 load_pose_avg_statsTrue NeRFHTrue encode_histTrue #testskip1 # add this for eval #render_testTrue # add this for eval在../DFNet/logs/heads/nerfh路径下输出testset, trainset数据文件夹GT Rendered训练DFNet,config参数############################################### NeRF-Hist training example 7-Scenes ############################################### model_namedfnet basedir../logs/heads expnamenerfh datadir../data/7Scenes/heads dataset_type7Scenes trainskip5 # train testskip1 #train df2 # train load_pose_avg_statsTrue NeRFHTrue epochs2000 encode_histTrue batch_size1 # NeRF loader batch size tinyimgTrue DFNetTrue tripletlossTrue featurenet_batch_size4 val_batch_size8 # new random_view_synthesisTrue rvs_refresh_rate20 rvs_trans0.2 rvs_rotation10 d_max0.2 #render_feature_onlyTrue #提取并保存特征图 #pretrain_model_path ../logs/heads/dfnet/checkpoint-0282-0.0043.pt # add your trained model for eval #evalTrue # add this for eval注意其中博主加入了参数render_feature_only为提取特征图指令设置为True可以获取特征图。可能是只训练了Heads数据集提前达到了精度提前终止训练。新建tmp文件夹启用render_feature_only在该目录../DFNet/script/tmp/shop_gap下自动保存特征图。Target Rgb评估指标博主这里根据项目作者提供的预训练的模型也进行了评估指标比博主训练的结果好很多可能是由于数据集少导致。如有理解错误的地方欢迎指正后续可能会更新关于更多复现以及参数调整的思考。2025/3/12