PVN3D 模型训练 Bug 调试指南

零样本开放词汇3D定位:用CLIP实现自然语言驱动的三维空间理解 开放词汇3D目标定位是让机器理解人类自然语言指令并精准映射到三维空间的关键技术,其核心在于弥合2D视觉语义与3D几何结构之间的鸿沟。基于CLIP等视觉语言模型(VLM)的跨模态对齐能力,该方法无需预定义类别、不依赖大量标注,通过可微分几何感知采样将文本查询与RGB-D数据动态关联,显著提升零样本泛化性与部署灵活性。技术价值体现在降低工业质检、AR交互、具身智能等场景的标注成本与响应延迟,支持实时新增物体描述与多尺度鲁棒定位。本文聚焦SeeGround这一典型实现,解析其Observe-Locate双模块设计 阅读详情

1. 适用场景

本文针对当前仓库中 PVN3D 的 LINEMOD 训练流程,重点覆盖以下问题:

  • 在 pvn3d-dev 容器内训练时出现 CUDA out of memory
  • 调小 n_sample_points 后出现张量形状不匹配
  • 训练脚本出现 lr_scheduler.step() 调用顺序警告
  • 如何快速判断是显存问题、数据问题还是代码问题
  • 如何在当前仓库内做最小代价的修复和重试

本文默认你的环境是:

  • 容器:pvn3d-dev
  • 训练环境:conda activate pvn3d
  • 工作目录:/workspace/workflow/self/PVN3D/pvn3d

典型训练命令:

python -m train.train_linemod_pvn3d --cls ape

2. 本次问题现象

在执行:

python -m train.train_linemod_pvn3d --cls ape

后,训练开始初始化数据集和模型,但在首轮训练前向过程中报错:

RuntimeError: CUDA out of memory. Tried to allocate 114.00 MiB

调用栈显示报错位置出现在:

  • pvn3d/lib/pvn3d.py
  • pvn3d/lib/pspnet.py
  • pvn3d/lib/extractors.py

更具体地说,是在 RGB 主干网络的卷积阶段触发的显存不足。

日志中同时还出现了两类警告:

  1. lr_scheduler.step() 在 optimizer.step() 之前调用
  2. scheduler.step(epoch) 这种带 epoch 参数的调用方式已被 PyTorch 标记为过时

需要区分:

  • OOM 是导致训练中断的主问题
  • lr_scheduler 警告不会直接导致训练崩溃,但说明训练脚本需要修正

在为了解决 OOM 而降低采样点数后,还可能继续遇到第二类问题:

RuntimeError: Sizes of tensors must match except in dimension 1.
Expected size 1 but got size 3 for tensor number 2 in the list.

这类报错出现在:

对应位置是 DenseFusion 中对 feat_1、feat_2 和 ap_x 的拼接。


3. 根因分析

3.1 主因:默认配置对 7.62 GiB 显存过大

当前仓库默认配置位于:

其中关键参数是:

  • mini_batch_size = 24
  • val_mini_batch_size = 24
  • n_sample_points = 8192 + 4096 = 12288

这组配置对 PVN3D 来说开销很大,因为模型同时处理:

  • RGB 分支特征提取
  • 点云分支特征提取
  • RGBD 融合
  • 关键点偏移与中心偏移预测

而你的 GPU 信息显示:

  • 总显存:7.62 GiB
  • 已分配:5.40 GiB
  • 预留:5.56 GiB
  • 可用:70.44 MiB

这意味着即使只再申请 114 MiB 也会失败。

所以根因不是:

  • 数据缺失
  • checkpoint 损坏
  • 某个 tensor 维度错乱

而是:

  • 默认 batch size 和采样点数对当前显存配置过大

3.2 次因:学习率调度器调用顺序不符合当前 PyTorch 约定

训练脚本位置:

原始逻辑是在每轮训练里先调用:

self.lr_scheduler.step(it)

再调用:

self.optimizer.step()

这会触发当前 PyTorch 的警告,因为推荐顺序是:

  1. optimizer.step()
  2. lr_scheduler.step()

这个问题本身不会造成 OOM,但会影响学习率调度的正确性,并污染训练日志。

3.3 第二类问题:DenseFusion 对采样点数写死,导致形状不匹配

报错位置在:

旧实现中,DenseFusion 使用了固定池化:

self.ap1 = torch.nn.AvgPool1d(num_points)

然后在前向里执行:

ap_x = self.ap1(rgbd)
ap_x = ap_x.view(-1, 1024, 1).repeat(1, 1, n_pts)
return torch.cat([feat_1, feat_2, ap_x], 1)

这里隐含了一个前提:

  • 模型初始化时传入的 num_points
  • 数据集实际输出的点数 n_pts

必须完全一致。

一旦你为了省显存而通过命令行调低 --n_sample_points,但模型和数据集没有同步使用同一份配置,就会出现:

  • feat_1 和 feat_2 的 batch / 点数维度来自真实输入
  • ap_x 的形状来自写死的池化窗口
  • 最终 torch.cat 时报尺寸不一致

这次报错的根因不是:

  • 显存不够
  • 数据缺失
  • 标签错乱

而是:

  • DenseFusion 对输入点数的假设过强
  • LM_Dataset 没有共享训练脚本里覆盖后的 config

4. 如何快速判断是不是显存问题

如果你看到以下特征,基本可以直接判断是显存不足:

  • 错误信息中明确出现 CUDA out of memory
  • 调用栈落在 conv2d、forward、layer3 等特征提取层
  • 错误里给出了 Tried to allocate xxx MiB
  • GPU 总显存本来就不大,例如 8 GiB 左右
  • 训练一开始就崩,而不是跑若干 epoch 后崩

相反,如果是数据问题,通常会看到:

  • 文件不存在
  • shape mismatch
  • KeyError
  • 数据路径报错
  • invalid device function

这次你的日志完全符合“典型首轮前向 OOM”。


5. 当前仓库已做的修复

本次已修改训练脚本:

5.1 新增可覆盖的训练参数

新增了以下命令行参数:

  • --mini_batch_size
  • --val_mini_batch_size
  • --num_workers
  • --n_sample_points

这样不必每次去改 common.py,可以直接在命令行临时压缩配置。

5.2 修复学习率调度器调用顺序

将训练循环调整为:

  1. loss.backward()
  2. optimizer.step()
  3. lr_scheduler.step()

这样可以消除 PyTorch 关于顺序的警告,并避免跳过初始学习率值。

5.3 保持改动范围最小

没有改:

  • 数据集逻辑
  • loss 定义
  • checkpoint 格式

所以这是一组低风险修复,主要用于让小显存卡也能跑起来,并避免降低点数后再触发形状错误。

5.4 修复 DenseFusion 的固定池化问题

位置:

修复前依赖:

  • AvgPool1d(num_points)

修复后改为:

  • adaptive_avg_pool1d(rgbd, 1)

这意味着全局特征池化不再依赖写死的采样点数,只要输入是 B x C x N,就会稳定输出 B x C x 1。

5.5 让 LM_Dataset 复用训练脚本中的配置

位置:

修复前的问题是:

  • 训练脚本通过命令行修改了 config.n_sample_points
  • 但 LM_Dataset 内部又自己创建了一份新的 Config

结果就是:

  • 模型拿到的是一套点数配置
  • 数据集输出的是另一套点数配置

修复后:

  • LM_Dataset 支持接收外部 config
  • 训练脚本会把同一份 config 传给训练集、验证集和测试集

这样 --n_sample_points 才会真正一致地作用到模型和数据上。


6. 推荐的重试方式

进入容器并激活环境:

conda activate pvn3d
cd /workspace/workflow/self/PVN3D/pvn3d

6.1 第一组推荐参数

先用这组:

PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:64 python -m train.train_linemod_pvn3d \
  --cls ape \
  --mini_batch_size 2 \
  --val_mini_batch_size 2 \
  --n_sample_points 8192 \
  --num_workers 4

这组配置的思路是:

  • 批大小从 24 降到 2
  • 采样点数从 12288 降到 8192
  • 降低数据加载并发,减少宿主机/容器压力
  • 用 max_split_size_mb:64 缓解显存碎片

6.2 如果仍然 OOM

继续降到:

PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:64 python -m train.train_linemod_pvn3d \
  --cls ape \
  --mini_batch_size 1 \
  --val_mini_batch_size 1 \
  --n_sample_points 4096 \
  --num_workers 2

这组基本是“小显存保守起步配置”。


7. 各参数对训练的影响

7.1 mini_batch_size

作用:

  • 直接决定单次前向/反向传播占用的显存

规律:

  • 越大越容易 OOM
  • 是最有效的降显存手段

代价:

  • 训练吞吐下降
  • 梯度估计更噪声

7.2 n_sample_points

作用:

  • 决定每个样本保留多少点云点参与后续网络计算

规律:

  • 越大显存越高
  • 对点云分支和融合模块压力明显

代价:

  • 降得太低可能影响姿态估计精度

实践建议:

  • 先从 8192 试
  • 不行再降到 4096

7.3 num_workers

作用:

  • 控制 DataLoader 的并发加载进程数

规律:

  • 不直接决定 GPU OOM
  • 但过大时会增加 CPU 内存和容器负载

建议:

  • 容器里优先设为 2 或 4

7.4 PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:64

作用:

  • 缓解显存碎片问题

规律:

  • 有时能减少“明明还有一点显存却申请失败”的情况
  • 不能代替降低 batch size

结论:

  • 它是辅助措施,不是主修复手段

8. 建议的排障顺序

训练报错后,不要盲目改很多地方。推荐按下面顺序排查。

第一步:先看错误类型

如果是:

  • CUDA out of memory

那就优先怀疑:

  • mini_batch_size
  • n_sample_points

不要先去改数据集代码。

第二步:先用命令行覆盖参数

优先尝试:

  • --mini_batch_size 2
  • --n_sample_points 8192

如果还是 OOM,再继续降。

第二步半:如果降点数后出现 Sizes of tensors must match

优先检查两件事:

  1. DenseFusion 是否仍在使用固定 AvgPool1d(num_points)
  2. LM_Dataset 是否共享了训练脚本里覆盖后的 config

如果这两点没修,就很容易在降点数后出现新的形状错误。

第三步:确认是不是碎片问题

如果日志里提示:

If reserved memory is >> allocated memory try setting max_split_size_mb

那就加:

PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:64

第四步:再看是否有其他代码警告

例如:

  • lr_scheduler.step() 调用顺序问题
  • 过时 API 警告

这些不一定致命,但应该尽量修掉,避免训练行为偏离预期。


9. 常见误区

9.1 误区一:OOM 一定是模型有 bug

不一定。

很多时候只是默认配置是为更大显存卡准备的。当前仓库默认的:

  • batch_size=24
  • n_sample_points=12288

对 8 GiB 左右显卡很容易超。

9.2 误区二:只调 num_workers 就能解决 OOM

通常不能。

num_workers 主要影响:

  • CPU 负载
  • 数据预取速度
  • 系统内存占用

而 GPU OOM 的核心仍然是:

  • batch 大小
  • 点数
  • 模型规模

9.3 误区三:只靠 max_split_size_mb 就够了

也不够。

显存碎片最多是次要因素。根本问题还是:

  • 当前每步训练需求超过了显卡容量

9.4 误区四:警告可以完全忽略

不能一概忽略。

比如 lr_scheduler.step() 顺序不对,虽然不一定导致训练崩溃,但会导致学习率计划与预期不一致。

9.5 误区五:把 --n_sample_points 传给训练脚本就一定生效

不一定。

如果数据集内部重新创建了自己的 Config,那么你虽然在训练脚本里改了点数,数据集实际仍可能按旧点数输出。

这会造成:

  • OOM 问题表面上在降点数
  • 实际输入和模型期望点数不一致
  • 最终转成 DenseFusion 拼接时报错

10. 推荐的最小稳定训练方案

如果你的 GPU 只有大约 8 GiB 显存,建议从下面这组配置开始:

conda activate pvn3d
cd /workspace/workflow/self/PVN3D/pvn3d
PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:64 python -m train.train_linemod_pvn3d \
  --cls ape \
  --mini_batch_size 1 \
  --val_mini_batch_size 1 \
  --n_sample_points 4096 \
  --num_workers 2

如果这组能稳定跑起来,再逐步尝试往上加:

  1. 先把 n_sample_points 提到 8192
  2. 再把 mini_batch_size 提到 2

不要一次同时把多个参数抬高,否则很难判断到底是谁导致再次 OOM。

如果你已经应用了本仓库里的修复,那么这组命令也同时规避了:

  • 小显存 OOM
  • DenseFusion 固定池化引起的形状不匹配
  • LM_Dataset 与训练脚本配置不一致

11. 训练前自检清单

开始训练前,建议确认以下几点:

  • 已进入 pvn3d-dev 容器
  • 已执行 conda activate pvn3d
  • 当前路径是 /workspace/workflow/self/PVN3D/pvn3d
  • 数据集路径和 train.txt、test.txt 正常
  • GPU 显存容量已确认
  • 已根据显存设置合适的 mini_batch_size
  • 已根据显存设置合适的 n_sample_points
  • 如果之前报过碎片相关 OOM,已加 PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:64

12. 总结

这次训练失败的主因是:

  • 当前 GPU 显存太小,无法承受 PVN3D 默认训练配置

直接触发 OOM 的关键默认参数是:

  • mini_batch_size = 24
  • n_sample_points = 12288

正确的处理方式不是盲目改模型,而是先做以下动作:

  1. 降低 mini_batch_size
  2. 降低 n_sample_points
  3. 必要时加入 PYTORCH_CUDA_ALLOC_CONF=max_split_size_mb:64
  4. 顺手修正 lr_scheduler.step() 的调用顺序
  5. 确认模型和数据集使用的是同一份点数配置
  6. 将 DenseFusion 的全局池化改为自适应池化

如果后续仍然报错,再根据新的日志区分是:

  • 继续 OOM
  • 降点数后出现形状不匹配
  • 数据问题
  • checkpoint 问题
  • 其他代码逻辑问题

按这个顺序排查,效率会明显高于一开始就大面积改代码。

自主四足操作机器人:系统架构、感知规划与工程实践全解析 机器人技术正从单一的运动控制向复合的感知与操作能力演进,其核心在于实现从环境感知到精准执行的自主闭环。这一过程涉及多传感器融合、实时运动规划以及软硬件协同等关键技术。通过RGB-D相机等视觉传感器进行场景理解与物体识别,结合运动规划算法(如基于采样或优化的方法)生成无碰撞轨迹,是实现自主操作的基础。这些技术的工程价值在于,能够使机器人在非结构化环境中稳定执行如抓取放置等复杂任务,极大地拓展了其在工业巡检、仓储物流及应急响应等场景的应用潜力。本文聚焦于四足移动平台与机械臂集成的复合机器人系统,深入探讨了其机械 阅读详情

相关推荐

MATLAB项目,模拟曲柄滑块机构的运动学和动力学.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

Jenkins + Python 全自动跑通「禅道任务/BUG 导出 → 月度开发考核表」

Jenkins结合Python实现禅道任务与BUG全自动导出及月度开发考核统计。通过复现浏览器三步导出流程(重置筛选、初始化、提交表单),精准获取全量数据;基于代码剔除父任务重复工时,修正“指派给”与“解决者”归属偏差,避免0工时导致的BUG率失真。最终生成含开发人天、有效负责BUG数、加权BUG率等字段的考核表,口径固化为可复用规则,彻底杜绝手工统计误差,实现零干预、高可信的自动化考核闭环。

一个人的博客 345

基于MATLAB的Abel反演和Fowler–Milne诊断研究对HyperFill TWGMAW-P进行了电波形分析。.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

“完成”是什么意思——Plan 步骤状态机的七个 Bug

本文剖析了Agent系统中“Plan步骤从pending到done”状态迁移的七个真实Bug,揭示其背后深层设计问题:状态机语义复杂、终态不闭合、状态与事件脱节、生命周期未递归终结等。教训聚焦于:终态应使用枚举而非布尔组合,同状态迁移需幂等,状态变更与事件发射必须原子化,父生命周期结束时须收口子状态,错误提示应引导模型行为。这些原则适用于任何多参与者、异步执行的智能工作流系统。

qinglongcn的博客 269

aerosonde-fc-hybrid-uav-sim-main.zip

1.版本:matlab2014a/2019b/2024b 2.附赠案例数据可直接运行。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

增强型PID-自适应-前馈-神经网络控制研究(Matlab代码实现)

内容概要:本文系统研究了“增强型PID-自适应-前馈-神经网络控制”复合控制策略,结合Matlab代码与Simulink仿真模型,深入探讨了传统PID控制与智能控制算法的深度融合方法。该策略通过引入自适应机制和前馈补偿,结合BP神经网络进行非线性系统建模与参数优化,并融合扩展卡尔曼滤波(EKF)等状态估计技术,提升控制系统在复杂动态环境下的响应速度、鲁棒性和控制精度。研究涵盖双闭环控制架构设计、神经网络训练流程、EKF状态融合等关键技术环节,适用于电机控制、电力电子变换器、无人机、微电网等高阶非线性系统的建模与仿真。配套资源丰富,包含多个可复现的Simulink模型、Matlab代码及参考文献,尤其支持高水平EI期刊成果的复现与验证。; 适合人群:具备自动控制理论基础和Matlab/Simulink仿真能力,从事控制工程、电气自动化、电力电子或智能系统研发的研究生、科研人员及工作1-3年以上的工程技术人员; 使用场景及目标:①深入研究先进PID控制策略在非线性系统中的优化应用;②实现神经网络与经典控制算法的协同设计与联合仿真;③开展状态估计、参数辨识与智能控制策略的实验验证;④复现并拓展高水平学术论文中的控制方法,支撑科研创新与项目开发; 阅读建议:建议结合提供的Matlab代码与Simulink仿真模型进行实践操作,重点剖析控制结构设计逻辑、神经网络训练过程及EKF状态估计的实现细节,按照文档说明逐步调试与优化,以全面掌握复合控制系统的建模、仿真与性能评估方法。

unity 照片墙插件(Pop-up Photo Wall)在触摸屏和红外框设备上的触发Bug

这不是一个好的办法,因为没有找到问题根源,只能先临时这样处理了,在电容屏上实测有效。在触摸屏和红外框设备上使用模板时,点击一张照片时会一次性触发展开多张照片。测试分析后发现以下方式可以避免这个bug。

梦想是世界和平 223

【带状电容器计算用于电容式触摸传感器应用】半数值模型的电容式触摸传感器集成于金属基材涂层中研究(Matlab代码实现)

内容概要:本文针对集成于金属基材涂层中的电容式触摸传感器,提出了一种用于带状电容器电容计算的半数值模型,并基于Matlab平台实现了仿真分析。该模型结合解析方法与数值计算,采用有限差分法求解二维泊松方程,精确模拟传感器在金属背景下的电场分布,有效克服了金属基底对电容信号的屏蔽与干扰问题,显著提升了触摸检测的灵敏度与稳定性。研究系统探讨了传感器的几何结构、介电层材料特性、电极尺寸及间距等关键参数对电容响应的影响机制,建立了完整的建模流程与仿真框架,为高性能、高抗干扰能力的电容式触控器件在智能家居、工业控制面板及复杂电磁环境下的实际应用提供了理论支撑与技术路径。; 适合人群:具备电磁场与电磁波、数值计算方法基础,熟悉Matlab编程,从事传感器设计、人机交互技术开发、电子器件仿真及相关领域研究的科研人员、工程师及研究生。; 使用场景及目标:①面向金属表面集成的电容式触摸传感器进行高精度建模与性能优化;②为智能家电、工业设备等人机接口的触控模块提供抗干扰设计与仿真验证方案;③支撑相关科研课题的理论分析、算法开发与原型系统验证。; 阅读建议:学习者应结合提供的Matlab代码深入理解半数值建模的具体实现过程,重点掌握有限差分法在电场求解中的应用技巧,并可通过调整传感器结构参数与材料属性开展对比仿真,进而探究各因素对灵敏度的影响规律,全面提升对电容式传感机制的理解与工程化设计能力。

Autosar SecOC 需求场景BUG(需求不一致性)【草稿】

Autosar SecOC为实现安全报文在±2周期内的容错校验,引入格式15的规范表格。该表格设定ResetFlag=±2为关键条件,但另一图示中又出现丢弃-2的情况,导致逻辑矛盾,引发对机制一致性的质疑。

沿流不止 42

Python实现微信PC端聊天记录自动化监听与智能回复

本文详细介绍了如何使用Python实现微信PC端聊天记录的自动化监听与智能回复。通过win32api和uiautomation库,模拟人工操作,实时监控聊天窗口并抓取新消息。文章重点讲解了核心代码逻辑、环境搭建步骤,并提供了实现关键词触发自动回复的完整方案,旨在提高工作效率与信息管理自动化水平。

weixin_29092031的博客 345

腾讯会议+OBS虚拟摄像头:解决多人屏幕共享的终极指南(附常见问题排查)

本文详细介绍了如何利用OBS虚拟摄像头技术,解决腾讯会议中多人屏幕共享的痛点。通过将OBS作为视频混流中心,可以突破腾讯会议单屏共享的限制,实现多屏幕、多窗口内容的同步展示,并提升演示的专业度。文章涵盖了Windows与Linux双平台的配置步骤、高阶场景搭建以及常见问题(如黑屏、画中画)的排查方法,是团队协作与专业演示的实用指南。

i8j9k0l1的博客 930

不收 PR、让 Agent 自己修 Bug:3,900 Star 的 Rust UI 框架 Rune,为“AI 写界面“重新设计

Rune:GPU 渲染的 Rust 原生 UI 框架,headless 模式让 Agent 渲染 PNG、导出元素树、脚本驱动输入并自检——UI 框架第一次把可被 AI 观测作为架构需求。更激进的是:它不收 PR,贡献和维护两端都是 Agent。

话梅糖の优快云 Blog 473

YOLOv11多模态融合实战:基于YOLOFuse的RGB与红外线(IR)协同检测技术解析

本文深入解析了基于YOLOv11的YOLOFuse多模态融合技术,重点探讨了RGB与红外线(IR)协同检测的实现原理与实战应用。文章详细介绍了双流架构与数据级、特征级、决策级三种融合策略,并通过实战案例展示了其在低光照、复杂环境下显著提升检测精度与鲁棒性的优势,为全天候安防、自动驾驶等场景提供了有效的技术解决方案。

weixin_29041195的博客 649

React 前端工程化在秒杀活动中的性能优化与 Bug 修

措施名称 | 实施成本 | 预期收益 | 风险等级 | |----------|----------|-----------|------------| | 使用 Redux Toolkit 管理状态 | 中等 | 提高可维护性和性能 | 中等 | | 引入 Suspense / Lazy Loading | 高 | 显著提升用户体验 | 高 | | 使用 Error Boundaries 捕获异常 | 中等 | 提高系统健壮性 | 中等 |在大型互联网企业中,秒杀与抢购活动是高频的业务场景之一。

wuchangjian的专栏 153

TC275-AutoSAR实战:Davinci Cfg多核OS配置与调试技巧

本文详细介绍了在TC275芯片上使用Davinci Cfg工具进行AutoSAR多核操作系统配置的实战步骤与调试技巧。内容涵盖从导入arxml文件的常见“坑”开始,到配置Det、EcuC、创建多核OS实例、关联OS应用、创建任务与设置优先级调度,最后分享了利用Det日志、调试器多核视图及处理核间通信与缓存一致性等关键调试方法,旨在帮助开发者高效完成复杂车载ECU软件集成。

weixin_29219189的博客 488

51单片机定时器的原理、应用与编程实现

本文系统介绍了51单片机定时器的基本原理与应用。首先阐述了定时器的工作原理,包括定时模式和计数模式的区别。然后详细讲解了定时器的四种工作模式(方式0-方式3)及其适用场景,并分析了相关寄存器(TMOD、TCON、THx/TLx)的功能设置。文章还给出了定时器编程的具体步骤,包括初始化、计数初值计算和示例代码。最后通过LED闪烁、PWM波形产生、脉冲计数等实际应用案例,展示了定时器的多样化应用。掌握这些知识对嵌入式系统开发具有重要意义。

2501_91227323的博客 1521

【Unity Bug挑战】第7期 16KB页面对齐之谜

IL2CPP 后端,接了 Firebase Authentication、Adjust、广告 SDK,还有一个自研的音频原生插件 AudioPlugin.so。同一个工程、同一台机器、同一个 Gradle 参数,唯一变的只有 Target API。那就去量一量:先看 libil2cpp.so 的 LOAD 段对齐,再看设备的页面大小。栏目:Unity Bug挑战 | 期号:NO.007 | 日期:2026-10-27 | 3星 · 中级 | Bug挑战 | Unity 2021+标签:IL2CPP、内存。

crystal_WJT的博客 318

想在瑞芯微RK3588上跑视频分类模型?避开3D卷积这个坑,试试这几种NPU友好的方案

本文探讨了在瑞芯微RK3588上部署视频分类模型时如何避开3D卷积的性能陷阱,提供了三种NPU友好的替代方案:MobileNetV2+GRU组合、Temporal Shift Module(TSM)和帧级池化。这些方案在保持较高准确率的同时,充分利用RKNPU的硬件加速能力,显著提升推理效率。文章还分享了从模型转换到部署优化的完整流程和实战经验。

weixin_28724319的博客 417

【Unity Bug挑战】第10期 SerializeReference 内存泄漏之谜

你翻了一下代码,项目里大量使用了 [SerializeReference] 特性来做技能系统的多态序列化——大概有 200 多个不同的技能效果类,都挂在 SkillData 这个 ScriptableObject 上,通过 Addressables 动态加载和释放。Unity 的 Native 对象是引用计数管理的,而 C# 托管对象是 GC 管理的。SerializeReference 的多态对象,它们的 Native 侧表示是什么样的?托管堆内存 | 加载后释放,回到初始水平 | 正常,符合预期。

crystal_WJT的博客 618

基于Simulink使用激光雷达数据跟踪车辆仿真(附源码)

这些模型将长方体的尺寸定义为状态转换期间的常量,并且它们的估计值在滤波器的校正阶段随时间演变。下面的动画显示了在滤波器的预测阶段将具有不同概率的恒定速度和恒定转弯率模型混合在一起的效果。此示例显示了如何使用带有 IMM 过滤器的 JPDA 跟踪器来跟踪使用激光雷达传感器的对象。图像和激光雷达数据读取器从 MAT 文件中读取记录的数据,并分别输出参考图像和点云中点的位置。跟踪器块选中“启用所有轨道输出”和“启用可检测的跟踪 ID 输入”复选框,以从跟踪器输出所有轨道,并将其检测概率作为其状态的函数进行计算。

珞瑜的博客 2565

Backtrader Web:开源量化交易全栈平台

Backtrader Web是一个基于Backtrader框架的现代化量化交易全栈平台,将专业回测引擎与Web技术结合,提供从策略开发到实盘交易的完整解决方案。平台采用FastAPI+Vue3技术栈,具有118个内置策略模板、专业可视化分析工具和完整的策略生命周期管理功能。支持策略版本控制、参数优化、模拟/实盘交易及监控告警,通过RESTful API和WebSocket实现前后端交互。系统采用模块化设计,包含策略服务、回测服务等核心模块,支持SQLite/PostgreSQL等多种数据库。安装简单,5分钟

云金杞 641

如何降低 Claude Code 使用费用:同一个 Java 修 bug 任务实测 6 种设置,花费从 0.69 到 0.02 美元

Claude Code 费用怎么降?用同一个 Java 订单金额修 bug 任务实测 Opus、Sonnet、Haiku、effort、safe-mode 和缓存 TTL 共 6 种设置,花费从 0.69 到 0.02 美元,并按官方价格表拆出钱花在哪:多数花在写缓存,不在输出。

u011831527的博客 151

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

一个BUG导致的Oracle数据库实例重启:ORA-00600 [kjmchkiseq:!seq]

一个BUG导致的Oracle数据库实例重启:ORA-00600 [kjmchkiseq:!seq]

听雪楼主 246

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

AI答错一个数,先分清是bug还是语义问题

驻场做 AI 调优,听得最多的一句话是:这个数不对。新手的第一反应是马上改,改完交差。老手会先按住不动,因为答错的原因分两种,走的是完全不同的处理线,改错了地方就是白改。向量空间JBoltAI项目驻场几个月,我们把这条分流线磨成了固定动作,讲出来给做企业 AI 落地的同行参考。

xiancai_xianyu的博客 217

Java Arrays.asList 常见坑详解|UnsupportedOperationException、数组联动、基本类型 bug

解析 Arrays.asList 常见开发陷阱,演示 UnsupportedOperationException、底层数组引用共享、基本类型数组问题,区分 Arrays 内部 ArrayList 与 java.util.ArrayList,给出数组转 List 的各种场景正确代码。

weixin_42617033的博客 409

用 AI 开发小程序第二天:修了一堆 BUG,顺手做了三套主题 UI

原因是写入本地缓存是异步的,页面跳转太快,读的时候数据还没落盘。AI 给的方案是把写入和跳转串起来,在写入成功的回调里再跳转,同时列表页加一个 `onShow` 重新读取的逻辑兜底。从截图能看到,我加上了**数据隐私说明**的醒目提示——因为我的坚持是**数据完全本地化存储**,不依赖云端,让用户知道他们的物品清单绝对安全。极简不等于简陋,用户对视觉是有偏好的,所以做了三套可切换的主题,在“我的”页面一键切换,选择结果存入本地缓存。绿色系主题,嫩绿搭配治愈的图标,有一种生机勃勃的感觉,看着很护眼。

sinat_26761191的博客 198
上一篇: PLY 文件格式与 PVN3D 中的使用说明
下一篇: LINEMOD 训练流程与实施细节
Yao.Li
博客等级 码龄10年 405粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Yao.Li

爱的魔力,一被卡布奇诺~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值