PoseNet复现记录以及思考(PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization)

发布时间:2026/10/22 3:18:08

PoseNet复现记录以及思考(PoseNet: A Convolutional Network for Real-Time 6-DOF Camera Relocalization) 此工作为基于深度学习的端到端位姿回归勿与同名工作弄混。PoseNet作为早期经典的端到端位姿回归工作有很大的研究意义但是作者提供的代码时间久远迁移困难且博主发现基于pytorch框架实现的记录较少于是记录一下博主用自己的数据集在ResNet预训练模型下微调参考younggunchoInha University的代码复现的过程。注博主没有考虑sfm自动生成标签数据部分而是用自己的已知数据集。参考内容alexgkendall/caffe-posenet: Implementation of PoseNethttps://github.com/alexgkendall/caffe-posenetPoseNet深度网络进行6D位姿估计的训练python3实现-CSDN博客https://blog.csdn.net/weixin_53610475/article/details/131068797?ops_request_misc%257B%2522request%255Fid%2522%253A%2522538207586a01fc04577510571fbf0ff2%2522%252C%2522scm%2522%253A%252220140713.130102334..%2522%257Drequest_id538207586a01fc04577510571fbf0ff2biz_id0utm_mediumdistribute.pc_search_result.none-task-blog-2~all~top_positive~default-1-131068797-null-null.142^v102^pc_search_result_base5utm_termposenetspm1018.2226.3001.4187youngguncho/PoseNet-Pytorch: Implementation of PoseNet using pytorchhttps://github.com/youngguncho/PoseNet-PytorchPoseNet: 实时6-DOF相机重定位-CSDN博客https://blog.csdn.net/weixin_44682965/article/details/108065132数据处理与加载数据来源图像存放在指定目录例如 ..\images对应的位姿标注存放在文本文件例如train.txt中每行记录图片文件名及其对应的位姿3 个位置和 4 个旋转数值。自定义数据集实现了一个CustomDataset类用于读取标注文件、拼接图像路径并通过数据增强如 resize、crop、ColorJitter、归一化等预处理图像。数据加载器通过get_loader函数根据模型类型和运行模式训练、验证或测试构造 PyTorch DataLoader实现批量数据读取和多线程加载。模型结构网络选择模型支持三种架构ResNet基于预训练的 ResNet-34通过去除原有全连接层并添加自定义全连接层实现位置和旋转预测。ResNetSimple基于 ResNet-34 的简化版本仅包含基本的预测层GoogleNet基于预训练的 Inception V3 模型构建适用于不同输入尺寸要求的场景。输出所有模型最终输出 7 维向量其中前 3 个数表示位置后 4 个数表示旋转四元数形式。损失函数设计PoseLoss自定义的损失函数采用 L1 损失计算位置和旋转误差。动态权重引入了两个可选的可学习参数sx 和 sq利用公式as below实现了对位置与旋转误差的动态平衡同时引入正则项帮助模型在训练过程中自动调整两部分损失的权重。训练流程训练脚本在main.py中通过 argparse 获取各项超参数和数据路径设置调用get_loader加载数据后实例化Solver类封装模型、损失函数和优化器。GPU 加速代码自动检测 GPU 可用性并将模型和数据移动到 GPU 上进行加速。训练细节训练过程中会输出每个 batch 的总 loss、位置 loss 和旋转 loss并使用 TensorBoard 记录训练动态。同时模型会按照设定的步长定期保存权重。模型推理模型加载训练完成后通过加载保存的模型权重进行推理。数据预处理一致性推理阶段使用与训练时相同的图像预处理流程。输出处理模型输出的旋转部分经过归一化后可以通过自定义函数例如quat_to_euler转换为欧拉角方便理解旋转角度。博主用1672张带位姿标签的图片作为数据集进行训练到104轮时结果如图实际上100轮之前已经能达到约为20的loss实际效果待训练结束进行推理验证。在model.py中存在参数learn_beta当learn_beta设置为False时代码中会以requires_gradFalse的方式创建 sx 和 sq这意味着这两个参数在反向传播时不会被更新而是保持固定分别为 0 和 -6.25。当learn_beta设置为True时sx 和 sq 被定义为可学习参数requires_gradTrue因此在训练过程中会通过反向传播进行更新。这里补充一些关于CNN的知识以提取特征图为背景关于微调时是否更新了预训练部分的参数冻结预训练层fixed_weightTrue如果你在微调时冻结了 ResNet34 的特征提取部分那么它的权重不会更新。因此无论是在预训练模型还是微调后的模型中提取的特征图基本上都会保持一致。更新预训练层fixed_weightFalse如果允许预训练层也参与训练那么模型会根据你自己数据集的分布进行调整。这可能会导致提取的特征图与原始预训练模型有所不同因为网络在细节上会调整以适应新的任务。总结来说如果冻结了特征提取部分提取的特征图会跟预训练模型提取的几乎一样如果解冻并进行全网络微调提取到的特征图就可能反映出针对新任务做出的优化和变化。同样在model.py中code as below 决定是否冻结预训练层。if fixed_weight: for param in self.base_model.parameters(): param.requires_grad False经过全网络微调后模型会在保留预训练时学到的通用视觉特征如边缘、纹理、基本形状等的基础上逐渐学习到对具体任务更有用的特征。以我的任务为例基于 PoseLoss 的位姿回归模型会更倾向于提取以下几类特征空间几何结构关注物体或场景中的几何形状和布局这有助于判断位置和方向。局部细节与边缘信息微调过程中模型会强化那些能够帮助区分不同位姿的细微纹理或边缘特征。全局上下文信息在回归位置信息时全局特征如整个场景的分布和结构也变得更加重要。经过微调后的网络其特征图会更偏向于那些能直接提升位姿估计性能的特征而不仅仅是 ImageNet 分类任务中的通用特征。这里博主利用通用视觉特征图可视化生成特征图如下之后博主将会验证用自己的数据集微调后的模型提取的特征图与通用特征图的差异是否效果会更鲁棒。还会对比从卷积层也开始从头以自己的数据集训练相较于以上的微调方法。2025/3/21
延伸阅读

更多相关文章

2026/10/20 22:14:52

一文搞懂 WSL 安全机制:从端口跟踪到命名空间隔离

一文搞懂 WSL 安全机制:从端口跟踪到命名空间隔离 【免费下载链接】WSL Windows Subsystem for Linux 项目地址: https://gitcode.com/GitHub_Trending/ws/WSL 你在 Windows 上开着 Ubuntu,容器里跑着服务,还顺手挂了个对外端口。它到…

2026/10/22 3:17:31

先进PID控制算法实战:ADRC、TD、ESO的MATLAB实现与参数整定

简介:这份资料包聚焦先进PID控制算法的工程实现,面向自动化、机器人学与过程控制领域的工程师及研究者,帮助解决传统PID在复杂、不确定系统中鲁棒性不足的问题。内容围绕自抗扰控制(ADRC)、跟踪微分器(TD&a…

2026/10/22 3:17:31

深入理解switch-case:多路分支的底层原理与最佳实践

前阵子帮朋友review一段支付渠道分发的代码,函数不长,满打满算一百来行,但中间是一段接近二十层的if-else,从渠道编号一路比对下去,最后还有一层嵌套着另一个switch。我看完最大的感受不是"写错了"&#xff…

2026/10/22 3:17:31

用图神经网络建模订单簿:从盘口地形到微观结构预测

1. 从逐笔委托到“微观地形图”:订单簿为什么天生是一张图接触量化交易有些年头的人大概都有这种感觉:盯盘盯久了,盘口不是一条条冷冰冰的委托记录,而是有自己的“呼吸”的。买一卖一的价格上下跳动,挂单量像人的肺活量…

2026/10/22 3:17:31

以太网园区网络改造:IP地址规划与VIP虚拟IP高可用实践

做网络工程这些年,我经手过不少Ethernet以太网项目,但真正让我觉得“值回票价”的,往往是那些把IP规划和VIP高可用想明白了的工程。今天要聊的这个项目,是某园区网络的升级改造,核心就三件事:理清以太网基础…

2026/10/22 3:17:31

Python实战:百度指数数据抓取、清洗与趋势分析全流程

简介:这份Python完整示例代码面向具备基础语法、希望入门数据分析的开发者,围绕百度指数这一关键词热度工具,演示从数据获取到可视化呈现的完整流程。包内共6个文件,以2个py脚本为核心,配合1个csv数据文件、1个txt城市…

2026/10/22 3:12:31

5G NOMA功率分配仿真:SIC解码顺序与MATLAB实现

简介:面向5G通信与NOMA技术研究者,这份资源围绕非正交多址接入中的功率分配问题,提供从理论模型到仿真实现的完整参考,内容涵盖NOMA基本原理、基于用户SINR差异的功率约束策略、恒定与动态功率分配方法对比,并涉及干扰…

2026/10/21 4:53:08

金融AI落地指南:从调研报告到技术选型与工程实践

简介:这份PDF报告聚焦2025年金融服务业中国AI现状与趋势,面向金融科技从业者、AI战略规划人员及关注行业数字化转型的研究者,帮助读者把握生成式AI在银行、支付、交易等场景中的落地路径与投资方向。资源包内含1个PDF文件,大小约1…

2026/10/22 0:01:49

电商智能运营体系从0到1:架构设计、落地步骤与避坑指南

前两年我们团队接了一个电商平台的运营中台项目,目标很直白:把过去靠运营拍脑袋做的选品、定价、发券、推活动这些事,逐步用数据算法和自动化流程代替。项目名字内部就叫“电商智能运营体系”。最近有不少朋友问我当时是怎么设计的、踩过哪些…

2026/10/22 0:01:49

若依框架AI代码生成不稳定?用Agent Skill三层结构+五步法搞定

最近一段时间,我一直想把后台管理系统里那些机械重复的增删改查代码交给AI去写。框架用的是若依,按理说这类业务代码模式非常固定,应该是AI最擅长的事情。可真试下来却不是那么回事——你让AI生成一个用户管理模块,它给出的Contro…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑