发布时间:2026/9/2 12:25:00
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/9/2 12:20:00

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

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

2026/9/2 12:35:03

WSL 时间与 Windows 不一致?3 步同步时区和时钟

WSL 时间与 Windows 不一致?3 步同步时区和时钟 【免费下载链接】WSL Windows Subsystem for Linux 项目地址: https://gitcode.com/GitHub_Trending/ws/WSL WSL(Windows Subsystem for Linux)默认会自动同步 Windows 主机的时区与系统…

2026/9/2 12:35:03

[AutoSar]基础部分 RTE 06 对runnable的触发和SWC的影响

目录关键词平台说明一、runnable二、RTE的event2.1Mode类型event2.2周期触发类型2.3 数据交互触发三、internal runnable value四、专属运行区指定五、per_instance memory关键词 嵌入式、C语言、autosar、Rte 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编…

2026/9/2 12:35:03

[AutoSar]基础部分 RTE 07 VFB虚拟功能总线

目录关键词平台说明一、VFB1.1VFB是什么1.1VFB的好处1.2VFB的坏处二、VFB在ECU内部的描述2.1Components2.2 Port-Interfaces2.3 Port2.4 Compositions关键词 嵌入式、C语言、autosar、VFB 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C,C…

2026/9/2 12:30:02

4GB显卡如何跑通70B大模型:AirLLM低显存大模型推理完整指南

4GB显卡如何跑通70B大模型:AirLLM低显存大模型推理完整指南 【免费下载链接】airllm AirLLM 70B inference with single 4GB GPU 项目地址: https://gitcode.com/GitHub_Trending/ai/airllm AirLLM 是一个面向低显存环境的大模型推理框架,它不改动…

2026/9/1 16:02:17

vSound小提琴数字处理器实操指南:从接线到演出的完整配置

电小提琴或者原声小提琴插电演出,第一个绕不开的坎就是声音难听。原声琴的共鸣和空气感一旦进了拾音器,出来的往往是一坨干瘪、发尖、带着奇怪塑料味的信号。我当初第一次把琴接上乐队调音台,直接被主唱吐槽"你这声音像在锯钢丝"。…

2026/9/2 9:00:32

传感器接口IC如何攻克生物化学传感的微弱信号难题?

1. 从电极到比特流:为什么生物化学传感必须依赖专用接口IC 做生物化学传感的人都有过类似的经历:明明传感器本身性能很好,信号输出却一塌糊涂——噪声大、漂移明显、重复性差,怎么调都达不到预期。很多时候问题并不在传感器&#…

2026/9/2 8:41:06

STM32F411CEU6多通道ADC采集:扫描模式+DMA实现详解

1. 多通道 ADC 的用武之地把“Multichannel ADC”和“STM32F411CEU6”这两个关键字放在一起,其实就是嵌入式开发里最常遇到的一类需求:用一块不算贵的 MCU,同时采集多路模拟信号。STM32F411CEU6 是 48 引脚的 Cortex-M4F 主控,主频…

2026/9/2 0:03:41

单片机毕业设计-基于单片机与蓝牙通讯的输液状态监测终端设计与开发 基于 STM32 或 51 单片机的液位‑滴速‑温度多参数输液监护装置设计(024005)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于嵌入式单片机,Java、小程序技术领域和毕业项目实战 ✌️…

2026/9/2 0:03:41

DeepSeek字幕翻译实战:从API调用到批量SRT转中文的完整方案

这次我们来看一个很实用的 DeepSeek 落地场景:用 DeepSeek 把英文视频字幕自动翻译成中文。具体案例是《恶魔君》1989 年第 28 集的英转中字幕任务,标题写得很直白,但背后其实是一整套可以复用的技术流程:字幕解析、模型调用、批量…

2026/9/2 0:03:41

用Python搭建搞笑语音助手:从语音识别到语音合成全教程

当你家里摆着一台天猫精灵,却总希望语音助手偶尔“不正经”一点,不用官方腔回答问题,而是张口就接几句搞笑段子,会是什么体验?我最近动手验证了一下这个想法——没有去改装任何市面上现有的智能音箱,而是直…

2026/9/2 1:15:22

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/2 1:15:22

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/2 1:15:20

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…