Qwen2.5-VL跨硬件微调:LoRA与OFT在昇腾910B与4090上的实战

这个项目的起因很现实:手上的多模态微调代码在单张4090上调得好好的,业务方突然要求国产算力平台也能跑,而基于Qwen2.5-VL的私域图像理解任务又必须保留原有效果。于是就有了标题里那条主线——从LoRA到OFT,从昇腾910B到4090,把参数高效微调在同一套模型、两类硬件上完整落地。过程比预想中曲折,但捱过来之后,很多判断和配置都可以直接复用,这篇就当是记录完整思路和踩坑明细,希望能帮到正在做类似事情的人。

先说结论:LoRA和OFT在Qwen2.5-VL上都是可行的参数高效微调方案,但两者适用的子模块和硬件环境差异不小;昇腾910B与4090在算子支持、显存策略、精度表现上各有特点,一套代码不加适配就直接跨平台跑,大概率会在中间某个节点挂掉。下面按方案评估、环境部署、训练过程、问题排查、效果验证这条线,把经验完整拆开讲。

1. 方案评估:模型与微调方式怎么选

1.1 为什么选定Qwen2.5-VL这套模型

多模态模型看起来很多,但要同时满足"中文能力好、图像理解细节丰富、支持文档类结构化输入、方便做参数高效微调"这几个条件,可选项其实不多。Qwen2.5-VL在设计上确实是为多模态场景做了针对性优化,它在视觉编码器部分引入了动态分辨率和M-RoPE机制,模型在读取图像时不是简单缩放到固定尺寸,而是会根据输入图像的宽高比动态切分成若干视觉tile,每块tile独立过视觉塔,再在空间维度上重组。这个特性非常关键:业务数据里大量存在长截图、票据、海报、多栏文档,如果像早期模型那样把所有图强行resize到统一正方形,很多细粒度信息直接丢失,下游任务效果无从谈起。

另一个原因是它原生支持交错的图像与文本输入,系统里既有单图问答,也有多图对比需求,模型选型从一开始就锁定了这个方向。从参数规模上看,拿7B档位做LoRA/OFT微调,单卡4090在量化配合梯度检查点的条件下可以跑,昇腾910B用混合精度也能吃得下,不需要走到分布式训练,工程复杂度可控。这一点对资源有限、又要跨硬件交付的团队来说,是决定性优势。

1.2 LoRA与OFT的核心差异和选型判断

LoRA的思路是在线性层权重更新时用低秩分解替代全量更新:W = W0 + BA,其中B和A分别是大矩阵和低秩矩阵的乘积,训练过程中原权重冻结,只优化两个低秩因子。直观类比就像给模型"加调味料"——原权重这锅汤不动,只是额外加一勺浓缩调料,让输出分布按任务需求偏移。OFT则是另一种路线,它不学习增量矩阵,而是学习一个正交变换矩阵作用在特征表示上,核心保持向量之间的夹角和内积关系,相当于"转动手腕调整出菜手法",锅和调料都不变,但旋转了特征空间的方向。

这两种方式在数学性质上差别很大。LoRA自由度更高,参数量由秩r直接控制,r取8、16、32都能跑,但低秩假设在某些任务上会限制表达能力;OFT的正交约束让参数空间更平缓,更新方向更稳定,但完整的正交矩阵维度是d×d,直接优化不现实,通常用块对角化拆分或谱参数化近似,参数总量反而更少。在Qwen2.5-VL里,我做了一组对比判断:语言解码器部分用LoRA,视觉塔的投影层用OFT。原因是视觉特征经过投影层后要进入语言空间,这里需要一个稳定的方向校准,正交更新不容易扰动预训练里已经对齐的语义结构,而语言的生成行为更适合用低秩增量去灵活适配业务语料。

选型时还有一个容易被忽略的视角:第三方生态的成熟度。LoRA在各类库里有非常成熟的支持,量化、多卡、断点续训都是现成的;OFT在主流库里的集成往往不全,很多时候要手动实现正交参数化。如果团队里没有人能看懂正交矩阵的参数化代码,强行上OFT大概率会在训练中后期被奇奇怪怪的数值稳定性问题折磨。我最后选OFT,是因为手头任务对视觉特征的方向敏感性确实高,LoRA在初测中表现一般,才决定把OFT模块自己写出来。

对比维度LoRAOFT
参数形式低秩增量矩阵正交变换矩阵
主要约束低秩假设正交约束
参数量由r和alpha决定,可灵活调整取决于块大小与分解策略
适用模块语言层、注意力QKV视觉投影层、特征对齐层
生态成熟度高,库内置支持全面低,需手动实现
显存占用通常更低与实现方式密切相关,可能更高

2. 双平台部署:昇腾910B与4090的环境搭建实战

2.1 两张卡的本质差异

很多人以为910B和4090都是"显卡",代码放上去就能跑,这是跨平台适配里最大的认知误区。4090是消费级GPU,显存24GB,生态基于CUDA,算子库由NVIDIA统一维护,绝大多数PyTorch算子开箱即用;昇腾910B是面向训练的AI处理器,用的是自家CANN计算架构和HCCL通信库,PyTorch代码必须通过专门的适配层才能映射到NPU设备上。两者在算力特性上也有区别,4090的FP16算力强,昇腾910B对混合精度的处理更依赖图模式优化,同一个算子在两边支持的dtype、维度约束可能都不同。

最直接的影响是代码里device的写法:GPU侧用cuda,昇腾侧用npu。同时DistributedDataParallel的通信后端也要切换,GPU默认用NCCL,昇腾一般用HCCL。线上代码如果写死了torch.cuda.amp.autocast()或者model.to("cuda"),上了昇腾几乎必挂。这类问题排查起来不复杂,但如果在部署早期没有做设备抽象层,每个训练脚本都改成两套分支,后期维护成本非常高。

除软件层差异外,显存策略也完全不同。4090上常用的FlashAttention在昇腾早期版本支持不完整,即使后面版本支持了,也需要在代码里显式指定相应的注意力实现,否则默认会尝试调FlashAttention内核,运行时报错可能藏在很深的算子层,不容易一眼定位。数据加载方面,昇腾的DataLoader对多进程Worker的偏好和GPU也有差异,线程开太多反而容易触发HCCL问题。

对比项NVIDIA 4090昇腾 910B
架构CUDA/GPUNPU/CANN
显存24GB GDDR6X统一HBM(按卡型号)
通信库NCCLHCCL
混合精度自动混合精度成熟依赖图模式和算支持
FlashAttention原生支持视CANN版本而定
生态PyTorch/深度学习框架原生适配需要通过torch_npu适配

2.2 昇腾侧环境搭建的具体步骤

昇腾侧搭建环境,第一件事不是装PyTorch,而是确认驱动固件和CANN工具包版本匹配。实践下来最稳妥的顺序是先安装NPU驱动和固件,再装CANN toolkit和对应的torch_npu插件,最后才是训练框架。版本对不齐时最经典的报错是设备不可用或者算子计算错误,但这种报错往往不是第一时间出现,而是训练几十步之后突然数值发散,排查起来极其痛苦。

安装CANN时需要注意设置环境变量,比如export ASCEND_TOOLKIT_HOME=/usr/local/Ascend/ascend-toolkit/latest,并把相关bin和lib路径加到PATH和LD_LIBRARY_PATH里。torch_npu的版本必须严格对应PyTorch的小版本,比如PyTorch 2.1版本下,要装对应2.1内核的torch_npu,错版本就算import能成功,运行到具体算子时也容易出莫名错误。装完之后可以用一行代码快速验证:创建一个随机Tensor,做几次matmul和softmax,再执行backward,看是否能正常跑通。

昇腾上跑Transformer类模型,建议在训练启动时打开图模式优化,不要用单纯的单算子模式。图模式能帮CANN做算子融合和内存复用,实测下来训练帧率能提高10%到20%。不过图模式也有代价:动态shape会触发大量编译,如果数据尺寸频繁变化,比如图像tile数量不定导致序列长度浮动,编译等待会拖慢整体节奏。Qwen2.5-VL恰好有动态分辨率特性,训练时不同图像的tile数量确实不一样,我的做法是在预处理阶段统一采样到一个固定tile数量,避免动态shape带来的编译抖动,保训练速度优先,微调到后期再放开收集更多数据分布。

2.3 4090侧的环境搭建与显存规划

4090作为消费级卡,最常见的问题不是算子缺失,而是显存不够。Qwen2.5-VL的视觉塔本身占空间很大,7B参数模型半精度权重大约14GB,加上激活值、优化器状态和LoRA/OFT参数,如果在24GB卡上不做任何优化直接跑,会在前向传播阶段就OOM。我的做法是多管齐下:模型权重加载时用4bit量化,训练过程中打开梯度检查点,batch_size压到单卡4到8,梯度累积走16步。

训练代码里梯度检查点设置很简单,调用模型方法时把use_gradient_checkpointing打开就行,但要注意它只对某些子模块生效,比如TransformerLayer这类结构。如果模型写了自定义视觉模块且没有实现forward的检查点逻辑,这部分激活值依然会占满显存。我在实验里专门对Qwen2.5-VL的视觉塔做过检查,发现默认设置下vision tower不一定被包进gradient checkpoint范围,后来是通过手动包装实现的。从显存占用曲线看,开启视觉塔梯度检查点之后,峰值显存直接降了5GB左右,角色非常关键。

另外4090跑OFT要重点监控矩阵运算的额外显存。OFT对块对角矩阵做正交变换时,如果用SVD参数化或Cayley变换,计算图里会多出不少临时矩阵,在24GB上非常容易被临时张量挤爆。这个问题我在后面踩坑章节会详细讲。

3. 微调全过程:数据、参数与训练实录

3.1 数据组织与预处理

数据格式按Qwen对话模板组织成jsonl,每行包含图像路径和对话列表。考虑到业务场景主要是针对私域图像的结构化理解,单样本的对话长度不长,但图像内容的复杂度很高。数据量控制在5万对左右,这个规模对参数高效微调来说比较合适,太少学不到业务特征,太多容易过拟合且训练周期拉长。

图像预处理阶段需要特别小心:Qwen2.5-VL对输入图像的动态分辨率机制意味着不需要人工统一resize到正方形,但需要确保min_pixels和max_pixels两个参数与业务图像的实际尺寸匹配。我在初版代码里没限制max_pixels,导致部分超高分辨率长截图被切成过多的视觉tile,单个样本的训练时间翻了几倍,而且占显存明显。后来把max_pixels限制在合理范围后,训练速度提升明显,验证集分数基本没掉。这一点在数据处理阶段就要考虑好,不要指望训练时再调。

另外建议在数据组织时做图像哈希去重。私域数据经常存在大量近似重复的图像,不去重的话模型容易对少数高频图像产生过拟合,验证集上的表现会被虚高,部署到真实场景立刻露馅。数据清洗阶段多做一步,后面能省很多事。

3.2 微调参数设置与计算过程

训练参数涉及两组逻辑:LoRA参数和OFT参数。LoRA部分我配置rank=16、alpha=32、dropout=0.05,目标模块覆盖注意力层的q_proj、k_proj、v_proj、o_proj,这是LoRA微调比较稳妥的默认范围。rank取值16的原因是通过显存估算和效果验证综合确定的:rank过大,LoRA参数增多,优化器状态占用的显存随之上涨,24GB卡上留给激活值的余量会不足;rank过小,低秩表达能力不够,训练loss下降变慢。

OFT部分采用块对角分解,块大小设为256,可视化塔投影层作为作用对象。正交参数化的实现我用了Householder反射的近似方式,比直接做SVD的参数化计算更稳定,前向速度也更快。需要注意OFT模块初始化时不能破坏预训练权重,正交变换矩阵的初值要接近单位阵,否则一上训练loss直接飞到天上,后面再怎么调学习率都很难收敛。学习率设为1e-4,warmup ratio设为0.03,总训练epoch设为3步,调度用cosine衰减。

显存估算就是个经验账:7B半精度权重约14GB,4bit量化后约4GB,LoRA/OFT新增参数可忽略不计,优化器状态按AdamW的8字节每参数估算,激活值在梯度检查点打开后控制在4-5GB,batch_size=4时总显存接近20GB。在910B上因为我额外开启了图模式,显存复用更好,可以把batch_size调到8到16,但第一轮先用小batch验证算子兼容性更安全。

3.3 训练过程中的观察与监控

训练时的关注点不只是loss下降,还要看梯度范数、学习率曲线和loss震荡幅度。LoRA微调的训练loss通常在几十步内就能掉到相对平稳,后续是缓慢下降的过程;OFT部分的表现则更平缓,因为正交约束本身就限制了参数突变。两组模块同时训练的时候,我观察到初期梯度范数偶尔会突然上蹿,后来定位到是某些图像稀疏样本的输入长度极长,梯度传播路径深导致局部梯度爆炸,处理方案是在数据端过滤掉过度超长的异常样本。

训练中我定期保存checkpoint,并保留最近两份防止中途崩掉。这种规模的任务单卡训练时长以十小时级别计,就算挂了也能快速恢复。910B和4090的训练速度差异客观存在,昇腾侧在纯训练吞吐上能靠图模式拉近差距,但如果代码没走图模式而跑动态shape,速度会明显吃亏。两边训练相同step数,910B达到同样loss值的用时比4090稍久,不过差距不明显,并没有到不可用的程度。

4. 踩坑记录:那些文档不会告诉你的问题

4.1 昇腾910B上最典型的算子兼容性故障

昇腾环境最让人头疼的不是整体不可用,而是大部分算子正常,个别算子隐身报错。实验中遇到最典型的一次:模型前向能跑通,但backward到某个层时报了一个比较隐晦的算子错误,堆栈指到一个自定义注意力模块。排查时先把代码切成纯PyTorch在CPU上跑,确认逻辑没问题,再用最小复现脚本逐层在昇腾上执行,最终定位是某个reshape组合在NPU上触发不了图融合,需要显式加上维度不变约束。

这类问题没有统一解法,只能靠经验和工具逐步缩小范围。我的建议是构建一个自动化冒烟脚本,把模型每个子模块都用随机输入跑一遍前向和反向,昇腾和GPU各跑一次,哪里报错一目了然。这个脚本的开发成本不高,但换硬件、升级框架之后都会用到,是保证项目可持续交付的基础设施。另外在昇腾上尽量使用官方适配的API,比如注意力实现尽量走支持范围更广的统一接口,不要写小众实现。

4.2 4090上OFT显存炸掉的教训

最让我意外的一次OOM不是发生在LoRA阶段,而是发生在只用OFT微调视觉投影层的时候。理论上来讲OFT参数量不大,占显存应该比LoRA更省,但实际训练到中期显存峰值突然拉高,训练直接中断。后来定位到问题是正交变换模块里的临时中间矩阵:小批量下的视觉特征矩阵乘上正交矩阵时,会生成一个形状较大的中间结果用于保留反向传播梯度,这个中间结果没被梯度检查点覆盖,于是显存峰值飙升。

解决办法有两个层面:一方面把OFT作用再细分到更小的特征块上,降低单个变换矩阵的维度;另一方面对OFT模块做了手动激活重计算,前向不保留中间结果,反向需要时重新计算。经过这两个优化,显存占用回到可控范围。这个问题的本质是参数高效微调只省了参数存储,并不代表激活值管理可以放松。任何手写模块都要警惕临时张量的生命周期。

4.3 双平台精度对齐困难

昇腾910B和4090同时对同一份数据训练,同样的超参数,最终验证指标大概率不完全一致,这是混合精度计算顺序导致的结果,不要慌。我实验里两边的差异大约在0.5到1个百分点内,属于可接受范围。真正需要注意的是FP16和BF16的选择。昇腾侧对FP32的算子支持范围广,但在BF16下某些算子计算精度损失方式与NVIDIA不同,导致loss曲线在训练后期出现毛刺。把关键层固定为FP32,或者统一改用BF16并在两边对比验证集指标,通常能缓解。

如果业务指标要求非常严格,建议以验证集为锚点而不是盯着loss。我在训练第30步和第300步分别做一次验证,观察两个平台上指标走向是否一致。不要试图在数值上完全对齐两个平台,那是投入产出比很低的事情,关键是保证交付模型的最终效果达标。

4.4 其他高频问题速查表

问题现象可能原因处理方案
昇腾训练几十步后loss发散混合精度下部分算子精度不足关键层固定FP32或切换BF16
4090训练OOM视觉塔激活值未受梯度检查点覆盖手动包装视觉模块的检查点逻辑
OFT训练梯度范数突增输入存在超长异常样本过滤极端长度样本并设置输入上限
昇腾DataLoader线程报错多进程Worker与HCCL冲突降低Worker数,或改用单进程预取
双平台验证集指标差异大随机种子和混合精度顺序不同固定种子并调整数据加载随机策略
LoRA与OFT效果均不如预期学习率不匹配或冻结区间错误先调学习率,再检查冻结层设置

5. 效果验证与调优复盘

5.1 两类微调方式的量化对比

训练结束后我在同样测试集上做了完整评估,用指标包括业务定义的图像理解准确率和生成内容的相关性分数。LoRA调整后的模型在语言表述的流畅度上有明显提升,对业务术语的把握很稳,但在需要精确对齐视觉细节的任务上偶尔出现偏差;OFT微调后的模型在视觉特征的方向性理解上更稳,对图像中相近物体的区分度更高,错误类型更多出现在语言表述不够自然。

把两种方式组合使用后,整体效果确实优于单独使用任一方案。这里有一个需要注意的细节:多模块同时微调时,如果数据量有限,LoRA和OFT对同一批样本的学习节奏不同,容易在前期互相干扰。我最后的方案是先单独训练OFT视觉投影层1个epoch,再联合LoRA共同训练,效果比一开始就混合训练更稳定。训练顺序上的这个取舍,是调优过程中比较关键的发现。

5.2 实操总结与个人体会

从LoRA到OFT,从910B到4090,这条技术路线走完一遍之后,最深的体会是参数高效微调的核心不是"省参数",而是"用最小的变化让模型适配业务分布"。LoRA在生成行为上更灵活,OFT在特征对齐上更稳定,两者组合恰恰覆盖了业务场景的两端需求。跨平台适配更像是带着限制做题,环境差异永远存在,但提前做好设备抽象、算子冒烟脚本和显存规划,能少熬很多夜。

最后再分享一个小技巧:双平台训练任务不要一开始就追求最大batch和最高吞吐。先在每张卡上用小batch把完整前向反向跑通,记录显存峰值和loss下降趋势,再逐步放大batch和训练长度。这样既不浪费资源,也能在每个环境上留下基线数据,后续任何改动都能快速判断是好是坏。方法本身不复杂,但要形成习惯,调试效率会明显不一样。

相关新闻

深入Linux内存管理:伙伴系统与slab分配器核心原理

深入Linux内存管理:伙伴系统与slab分配器核心原理

前段时间在压测一个存储服务时,我发现一个奇怪的现象:明明内存总量还很充足,但每次接口申请一个8KB的连续块时,耗时总会偶发冲到几百微秒甚至毫秒级。查到最后,问题不在业务代码,而在内存管理这一层——更具…

2026/10/21 3:54:34 阅读更多 →
FFmpeg输入源处理:本地文件与网络流读取的底层逻辑与实战

FFmpeg输入源处理:本地文件与网络流读取的底层逻辑与实战

FFmpeg 这个工具,刚接触音视频开发的人往往会被它庞大的参数体系劝退,但真正用起来之后又会发现,很多看似复杂的需求,其实一条命令就能搞定。这次要聊的是 FFmpeg 读取本地文件和网络流这两种输入源的处理方式,属于系列…

2026/10/21 3:53:34 阅读更多 →
用CC-Switch统一管理Claude Code与Codex的API配置

用CC-Switch统一管理Claude Code与Codex的API配置

每天在终端里同时用几个 AI 编程工具的人,大多经历过这种状态:Claude Code 要一套 API 配置,Codex 又是另一套,换一下模型提供商或者接入渠道就得重新改环境变量。最难受的不是改本身,而是改完经常不生效,最…

2026/10/21 3:53:34 阅读更多 →

最新新闻

Spark Streaming vs Flink:流处理选型核心差异与实战决策指南

Spark Streaming vs Flink:流处理选型核心差异与实战决策指南

1. 流处理选型这件事,为什么值得花时间掰扯清楚做实时数据处理的人,迟早会撞上同一个岔路口:Spark Streaming 和 Flink 到底选哪个。这个问题在技术社区里被反复讨论,但大多数对比文章停留在"Flink 是纯流、Spark 是微批&quo…

2026/10/21 4:35:50 阅读更多 →
OpenClaw 2026.3.28 Windows 原生部署:角色初始化与排错全流程

OpenClaw 2026.3.28 Windows 原生部署:角色初始化与排错全流程

把OpenClaw 2026.3.28 跑进 Windows 原生环境,是我近期做得最折腾也最值的一件事。这里的“原生”,我指的是不套 WSL、不丢容器镜像,直接在 Windows 桌面系统的本地环境里装依赖、起服务、完成角色初始化并把角色跑起来。这篇文章把整个部署过…

2026/10/21 4:35:50 阅读更多 →
阿里EDAS示例工程上云实战:本地启动、部署配置与灰度避坑指南

阿里EDAS示例工程上云实战:本地启动、部署配置与灰度避坑指南

简介:这份资源是阿里EDAS(企业级分布式应用服务平台)的入门示例工程,面向希望学习微服务架构与云端应用部署的Java开发者,尤其适合刚接触EDAS、需要动手实践的中初级人员。压缩包共15个文件,以8个xml配置文…

2026/10/21 4:35:50 阅读更多 →
Redis哨兵实战:高可用架构部署、故障转移与踩坑经验

Redis哨兵实战:高可用架构部署、故障转移与踩坑经验

Redis 哨兵这套东西,我最早接触是在一个电商促销活动前夜。当时主从架构跑得好好的,结果主节点凌晨挂了,运维手动切了四十分钟,老板在群里连发十几条消息。从那以后我就把哨兵当成了高可用方案的标配。这篇文章不讲教科书定义&…

2026/10/21 4:35:50 阅读更多 →
C# WinForm Panel 边框颜色改不动?三种自绘方案一次讲清

C# WinForm Panel 边框颜色改不动?三种自绘方案一次讲清

简介:面向C# WinForm开发者的Panel控件美化方案,解决默认边框颜色与宽度不可直接调整的问题。资源通过继承Panel并重写OnPaint方法,以Graphics绘制自定义边框,提供BorderColor与BorderWidth两个扩展属性,示例代码清晰易…

2026/10/21 4:35:50 阅读更多 →
BMI160六轴传感器驱动开发实战:从寄存器配置到姿态解算的完整指南

BMI160六轴传感器驱动开发实战:从寄存器配置到姿态解算的完整指南

简介:面向STM32F030平台的博世BMI160自写驱动代码,通过I2C总线实现三轴陀螺仪的基础数据交互,适用于嵌入式开发者学习传感器驱动编写或快速搭建原型。压缩包共3个文件、仅6KB,包含BMI160.c源文件以及BMI160.h、BMI160_prm.h两个头…

2026/10/21 4:34:49 阅读更多 →

日新闻

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

统一内存+量化:锐龙AI Max PRO 400如何本地跑320B大模型

这段时间硬件圈和AI圈都在传一个事:AMD锐龙AI Max PRO 400系列把最高192GB统一内存搬进了PC形态的产品里,按宣传口径,本地跑320B参数的大家伙不再是纸面概念。我第一反应倒不是“内存真大”,而是这话背后的含金量——它把过去只能…

2026/10/21 0:00:11 阅读更多 →
AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

AI助手深度使用体验:对话质量、长文本处理与指令遵循如何留住用户

1. 从“封号重开”这个行为说起:用户到底在追求什么“封号重开”这四个字,放在任何产品语境里都带着一股决绝的味道。一个账号从零开始积累使用记录、调教偏好、沉淀工作流,背后是大量的时间和精力成本。正常情况下,没有人愿意主动…

2026/10/21 0:00:11 阅读更多 →
ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

ROS中YOLOv3工程落地:通信同步、坐标变换与性能调优

1. 为什么在ROS里硬刚YOLOv3不是“炫技”,而是工程落地的必经之路我第一次在某高校机器人实验室看到那台搭载Jetson TX2的移动底盘原地打转、反复识别错垃圾桶时,就意识到:单纯跑通darknet_ros demo和真正让YOLOv3在ROS里“干活”&#xff0c…

2026/10/21 0:00:11 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型(GMM)的语音识别系统,很多人第一反应就是一堆数学公式,觉得门槛很高。但如果你真的在MATLAB里把它落地跑通,会发现核心其实就是三件事:把声音变成特征向量,用GMM给每个类别…

2026/10/20 10:02:13 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人,但落到具体操作上,无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程:对图像做反白、改调色板、彩色转灰度,最后把像素数据导出成txt文件。单看每一…

2026/10/20 20:43:59 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词,你会发现一个很有意思的现象:每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型,有人指的是运动控制系统,还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/21 4:27:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 10:02:08 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:17 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 9:50:45 阅读更多 →