Qwen2.5-VL-7B LoRA微调实战:从原理到训练全流程指南

开始前先说一句:这篇是 Qwen2.5-VL-7B 模型低秩适配 LoRA 微调方法应用连载的第八篇,前面几篇已经零零散散聊过部署、数据、评估这些东西,这一篇想把这些内容收敛到一条能从零跑通的实战链路上。Qwen2.5-VL-7B 是目前在文档理解、截图问答、智能质检这些场景里非常能打的开源视觉语言模型,LoRA 则是把它改造成业务专用模型时性价比最高的手段,因为只需要训练一小部分参数,就能在目标任务上把效果拉起来,又不用担心一张卡放不下整个 7B 参数。这篇适合刚接触多模态微调的人,也适合已经跑通基础流程但总在训练细节上踩坑的工程师,作为一个可以直接照着抄的 checklist。

1. 为什么我把 LoRA 放在 Qwen2.5-VL-7B 前面考虑

1.1 全量微调账算不过来的地方

先算一笔硬账。Qwen2.5-VL-7B 的参数量大概在 7B 级别,如果做全量微调,单是模型权重和梯度在混合精度训练里就需要权重 2 字节、梯度 2 字节、优化器状态 8 字节,再加上一份 FP32 主权重 4 字节,每参数字节数轻松到 16 字节。7B 参数乘下来就是 100GB 以上的内存占用,这还没算视觉 token 带来的激活值。普通单卡是绝对玩不转的,上多卡又会遇到通信瓶颈、损失震荡这些连带问题。

LoRA 的思路很简单,冻结原来的 W,在旁边加两个低秩矩阵 BA,训练时只更新 BA,原来模型的 7B 参数全部不动。这样优化器要管的状态一下从 7B 降到可能只有一两千万,显存大头只剩下输入图像产生的视觉激活值。配合 4bit 量化加载,一张 24GB 显存的卡也能跑 Qwen2.5-VL-7B 的 LoRA 微调。我自己的习惯是先按 QLoRA 方案启动,如果显存还有富余,再把基座模型切成 8bit 或半精度来加载。

1.2 多模态模型微调的特殊性

Qwen2.5-VL-7B 不是单纯的语言模型,它包含视觉编码器、多模态连接器和语言解码器三块。视觉编码器负责把图像变成 patch 特征,连接器负责把这些视觉特征对齐到文本 embedding 空间,语言解码器负责真正生成答案。很多人第一次上手时喜欢在全部线性层上加 LoRA,效果反而不稳定,尤其把视觉编码器动得太厉害以后,模型对图像位置和分辨率的感知会漂移。

我踩过一轮坑之后,只把 LoRA 加到语言解码器和连接器的线性层上,视觉编码器保持冻结。这么选的逻辑是:通用视觉底座已经在大规模图文数据上对齐过,业务数据集通常只有几千到几万条,指望用这么小的数据量把视觉特征重学一遍不现实。LoRA 要解决的只是“怎么在已有视觉特征之上,通过指令和答案格式把这些特征引到目标任务上”。如果任务里确实有很强的特定图像风格,比如工程图纸、扫描件、医疗切片,可以在视觉塔里挑一两个线性层做低秩适配试水,但至少先跑一版不加的基线,再看差异决定要不要动。

1.3 我对 LoRA 数学原理的粗浅理解

LoRA 参数的更新形式是 W’ = W + BA。W 是冻结的大矩阵,形状是 d_in × d_out,A 和 B 分别做降维和升维,A 的形状是 r × d_out,B 的形状是 d_in × r,r 是远小于 d_in 和 d_out 的低秩秩数。训练开始时 A 一般是高斯初始化,B 初始化为 0,这样新增分支最初对输出没有贡献,模型起始状态就是原始模型的推理状态,不会出现权重初始化破坏原能力的问题。

训练完成后,BA 可以合并回 W 形成 W_merged,推理时不需要再单独维护两个低秩矩阵。低秩约束的本质是把更新量限制在低维子空间中,这样模型学到的不是 7B 参数空间里任意方向的改动,而是更接近原始预训练数据分布的一组紧凑变化。实际操作里我一般让 lora_alpha 等于两倍的 r,也就是缩放系数 alpha/r 固定为 2,这样在不同 r 之间切换时,模型生成稳定性不会发生大的跳变。

2. 微调前的环境配好,后面能少踩一半的坑

2.1 量化加载和基础库版本

环境第一步是装依赖。我目前用的组合是 Transformers、PEFT、Accelerate、bitsandbytes 四个库,版本尽量保持最新稳定的 release,特别是 Transformers 对 Qwen2.5-VL 的支持更新很快,旧版本容易出现模型类找不到、图像 token 解析不对的问题。

pip install -U transformers peft accelerate bitsandbytes

模型加载用 QLoRA 风格,先按 4bit NF4 加载基座,再在它外面套 LoRA。这里有个容易忽略的点:load_in_4bit和torch_dtype不要同时直接传,显式构造 BitsAndBytesConfig 更可控。

import torch from transformers import Qwen2_5_VLForConditionalGeneration, AutoProcessor from transformers import BitsAndBytesConfig bnb_config = BitsAndBytesConfig( load_in_4bit=True, bnb_4bit_quant_type="nf4", bnb_4bit_use_double_quant=True, bnb_4bit_compute_dtype=torch.bfloat16, ) model = Qwen2_5_VLForConditionalGeneration.from_pretrained( "Qwen/Qwen2.5-VL-7B-Instruct", quantization_config=bnb_config, device_map="auto", torch_dtype=torch.bfloat16, ) processor = AutoProcessor.from_pretrained( "Qwen/Qwen2.5-VL-7B-Instruct", trust_remote_code=True, )

bnb_4bit_use_double_quant=True是我常用的开关,它对第二阶量化再做一次量化,能省出一点显存,代价是加载速度和前向速度略有下降。对训练场景来说,这个性价比是划算的。

2.2 多模态训练数据应该长什么样

Qwen2.5-VL 的对话模板走的是多模态消息结构,图像不是放在“前缀字符串”里,而是作为 content 里独立的一个占位元素。构造训练数据时,建议统一成这样的形式:

[ { "messages": [ { "role": "user", "content": [ {"type": "image"}, {"type": "text", "text": "这张图片里订单号是多少?"} ] }, { "role": "assistant", "content": [ {"type": "text", "text": "订单号是 20250071。"} ] } ] } ]

拿到这样一条样本后,用 processor 的对话模板把它处理成输入序列。关键点是图像部分不要自己手动写成 “” 这种硬编码,让 processor 根据模型模板自动插入视觉占位符。不同版本的 Qwen2.5-VL 占位符格式可能有差异,靠手工拼容易翻车。

数据集的划分我也想说一句:不是所有图片任务都适合随机切分 train/val。比如同一个 PDF 提取出来的几张图,可能有很强的版式相似度,如果分到两个集合里,评估指标会虚高。我一般按文档或业务来源分组切分,保证验证集和训练集在“来源文档”层面隔离,这样 LoRA 的效果评估才可信。

2.3 batch 里的图像尺寸和 padding 问题

多模态 batch 和纯文本 batch 有一个本质区别:图像的宽高比不同,视觉 token 数量不同。不能简单地把所有图像 resize 成固定大小,也不能在 collator 里用同一个最大长度给所有样本硬 padding,否则显存浪费在无效的 pad token 上,训练速度会非常难看。

我实测下来的做法是:在一个 batch 内让图像按照“最大那条边不超过某个阈值”进行缩放,文本部分用 processor 自带的 padding 逻辑,图像尺寸尽量保持原始宽高比。Qwen2.5-VL 对图像分块有自己的一套处理逻辑,直接喂长图也能支持,但训练时如果输入无意义的长图太多,loss 会被那些没标注的区域带偏。切分数据时最好把长图、截图、扫描件分成不同类型,必要时单独做一次针对性清洗。

3. LoRA 注入点与超参配置:最值得花时间的部分

3.1 四个真正需要手动调的超参数

LoRA 微调需要关心的超参数不算多,但每个都有讲究:r 是秩数,lora_alpha 是缩放因子,lora_dropout 是随机失活比例,target_modules 是作用模块列表。很多人一上来就纠结 r 是 16 还是 64,却忽略了 target_modules 选得对不对。其实 target_modules 决定了 LoRA 到底改模型哪些部分,影响比 r 更大。

我给出的一个稳妥配置如下。这个配置把注意力全模块和 FFN 三层全盖上,适合通用场景的指令跟随和视觉问答:

from peft import LoraConfig, get_peft_model, prepare_model_for_kbit_training lora_config = LoraConfig( r=64, lora_alpha=128, target_modules=[ "q_proj", "k_proj", "v_proj", "o_proj", "gate_proj", "up_proj", "down_proj" ], lora_dropout=0.05, bias="none", task_type="CAUSAL_LM", ) model = prepare_model_for_kbit_training(model) model = get_peft_model(model, lora_config)

prepare_model_for_kbit_training这一行容易被漏。它会把量化模型的某些层做成可训练状态,同时把参数的 requires_grad 设置好,少了它 LoRA 层可能不会像预期一样参与训练。也可以用find_all_linear_names自动找出模块名,但建议先打印一遍模型结构,人工确认目标模块是否真的存在。

3.2 target_modules 要不要覆盖视觉塔

关于视觉塔,我的结论很简单:先不加。Qwen2.5-VL 的视觉编码器通用能力很强,业务数据量小,加视觉塔 LoRA 不仅训练更慢,还容易造成灾难性遗忘。真到了模型能理解视觉特征但不会按业务格式输出答案时,问题不在视觉编码,而在语言解码器的指令范式上,把 LoRA 覆盖到 FFN 层通常就能解决。

如果目标任务是高度特殊的图像域,比如票据版式、显微图像、遥感影像,再考虑让视觉塔里少量线性层参与低秩适配。我的经验是控制数量,不要直接把 LoRA 加满所有视觉层。可以先在visual.patch_embed或单独的注意力投影层实验一小步,用验证集对比,增益不显著就撤回,不必硬加。

3.3 rank 和参数量的关系,用我自己的“粗算公式”

很多教程只告诉你 rank 越大容量越大,但到底多大合适,还是得自己算。假设 Qwen2.5-VL-7B 的隐藏层维度为 h,FFN 升维维度为 m,层数为 L,则每层所有线性层都加 rank 为 r 的 LoRA 时,注意力模块引入参数约 4 × 2rh,FFN 模块约 3 × 2r(h+m)。按 h 约 3584、m 约 18944、L 约 28 层、r 取 64 来粗算,总参数量会在两三百万到三百万这个量级甚至更高,约占总参数 4% 左右。

如果只像常见教程那样把 LoRA 加到 q_proj 和 v_proj,两种可训练参数差异会非常大。打印一行代码就能看到结果:

trainable_params = sum(p.numel() for p in model.parameters() if p.requires_grad) all_params = sum(p.numel() for p in model.parameters()) print(f"trainable/all: {trainable_params / all_params:.4%}")

我通常先打印这个比例,再决定要不要继续跑训练。比例低于 0.5% 时,模型可能学不到复杂输出格式;比例超过 5%,就要小心过拟合。多模态图文任务对输出格式和 OCR 纠错的要求很高,我一般把 r 设到 64,对应比例在几个百分点级别,效果相对稳。

3.4 lora_dropout 并不是越大越好

lora_dropout 我固定选 0.05,很少调到 0.1 以上。LoRA 本身参数量就不大,dropout 太高会让训练不稳定。尤其是当数据里样本量只有几千条时,一个过高的 dropout 几乎等价于每步都在随机改变低秩子空间的更新方向,训练集损失能降,验证集效果却忽高忽低。更稳妥的做法是保留 0.05,靠 warmup 和学习率来控制过拟合。

还有一个容易忽略的点:bias="none"意味着 LoRA 不训练任何偏置项,这是 LoRA 的标准设置,能够最大程度保持原始模型的稳定性。如果任务里需要模型微调位置偏好,再去单独把 bias 打开也不迟。默认配置下不要动它。

4. 训练过程实录与损失曲线分析

4.1 优化器和学习率的取舍

QLoRA 场景下优化器通常用paged_adamw_8bit,它能减少 optimizer state 的显存压力,同时只更新 LoRA 可训练参数。学习率我习惯从 1e-4 到 2e-4 之间起调,多模态任务比纯文本任务更害怕大步长,因为图像输入让每 batch 的 loss 方差更大,学习率稍高一点就容易出现一步把低秩子空间拉飞的情况。

下面的训练参数是我在单卡 24GB 上跑通的一套基准配置。批量大小设 1 是因为视觉 token 太多,single sample 的激活值已经不小,靠梯度累积把有效 batch size 撑到 16,算是显存和稳定性的一个平衡点。

from transformers import TrainingArguments training_args = TrainingArguments( output_dir="./qwen2.5vl_lora_r64", per_device_train_batch_size=1, per_device_eval_batch_size=1, gradient_accumulation_steps=16, learning_rate=2e-4, warmup_ratio=0.05, num_train_epochs=2, logging_steps=20, save_steps=200, bf16=True, optim="paged_adamw_8bit", remove_unused_columns=False, )

remove_unused_columns=False对多模态训练尤其重要。默认行为会把非 model 前向需要的列删除,但图像处理有时依赖原始列信息,关闭它可以在数据预处理时保留更多灵活性。如果不开这一项,有些自定义 collator 会莫名报列不存在。

4.2 损失曲线应该出现哪些变化

正常训练的 loss 曲线不会一直平滑下降,而是会在前几百步有一个明显下探,然后进入平台,再伴随小幅度波动。多模态任务里 loss 平台不是坏事,可能代表模型正在把视觉特征和回答格式做对齐。如果 loss 在 1.0 附近卡住不动,我首先怀疑数据标注质量,比如答案里混着原始文本里的噪声,或者多个样本答案格式不一致。

我在实际项目里的经验是:如果 loss 从 2.0 降到 0.8 左右,就能看到比较可用的生成结果;如果还想更低,不要急着加 LoRA 的 rank,先去看验证集上是不是出现重复片段。多模态模型很容易在 VQA 任务里背答案,loss 很低但回答千篇一律,这是过拟合信号,需要检查验证集是否足够多样。

4.3 中断恢复和 checkpoint 管理

训练中途断电、断卡是常态,不要从头再来。Trainer 里带resume_from_checkpoint=True,就可以从最近一次保存的 checkpoint 继续训练。我建议把save_steps设成可接受的时间粒度,比如每 200 步保存一次。LoRA 权重小,每个 checkpoint 也就几十到几百 MB,多存几份的成本完全可控。

还有一点:要同时保存 processor 和 LoRA 权重,不要只在训练脚本里 save model。视觉模型部署时需要 processor 的 tokenizer 配置、图像 transform 参数,丢了它,后面推理时你都不知道图像该按什么尺寸缩放。

5. 常见问题与排查技巧实录

这些年 Qwen2.5-VL 相关的 LoRA 微调排障不少,我把最容易踩的坑整理成一张速查表。

现象常见原因排查方向
启动训练时报 OOM4bit 加载没生效,或视觉 token 激活过大检查 quantization_config 是否传入,调低 batch size 和最大图像尺寸
训练正常但验证时图像内容完全认不出LoRA 加了视觉塔导致视觉特征漂移冻结视觉塔,只保留语言解码器和连接器 LoRA
Loss 降不下去,一直 1.0 以上标签里有大量 -100 位置没有正确屏蔽检查 labels 是否把图像占位 token 对应的位置也算了 loss
生成结果只有中文,没有图像相关内容数据里图像 token 和文本 token 被错误 padding 对齐检查 processor 的 padding 策略,图像 input 不要重复 padding
继续训练时 loss 突然跳高用了错误的 checkpoint 恢复方式确认 resume 的是同一个 LoRA 基座模型,不要换量化方式
合并权重后生成质量变差4bit 基座直接 merge 可能精度损失用半精度基座加载 LoRA 后 merge,或部署时保留 adapter 方式

5.1 图像 token 参与 loss 计算的问题

这个坑非常隐蔽。多模态样本的 labels 通常需要用 -100 把提示词和图像占位符对应的位置屏蔽掉,只保留 assistant 回答部分的监督信号。如果用 Transformers 自带的数据拼接方式,偶尔会把图像占位符的 token 保留在标签里,让模型去预测图像 token。损失看起来在降,模型学的却是“复制图像占位符”的无意义任务。

排查方法很简单:打印一条训练样本的 input_ids 和 labels,肉眼看一下 labels 里除了 -100 之外,是否包含 image 占位符对应 id。如果有,手动把 mask 补齐。初始调试阶段花十分钟做这一步,能省后面一整天的无效训练。

5.2 推理时 LoRA 合并与不合并怎么选

LoRA 训练完有两种使用方式:一种是保留 adapter,推理时动态叠加;另一种是 merge 回 base model 权重,用普通加载方式推理。我的建议是,如果最终部署环境支持 PEFT 加载,就直接保留 adapter,这样 base 模型还可以复用给其他 adapter;如果要把模型转换到其他推理框架,才考虑 merge。

merge 代码很短:

merged_model = model.merge_and_unload() merged_model.save_pretrained("./qwen2.5vl-merged") processor.save_pretrained("./qwen2.5vl-merged")

但注意,如果是 4bit 基座,直接 merge 会因为量化权重和低秩分量的数值对齐问题造成精度损失。一般先在 fp16/bf16 的 base 上重新加载 LoRA 权重,再做 merge,损失会小很多。这个问题在显存足够的机器上几乎零成本规避。

5.3 多卡环境下的 checkpoint 对齐问题

如果你在多卡上训练,每次保存的 checkpoint 是分片的,还要带safetensors索引文件。有些人图省事把某一台机器上的分片 copy 走,推理时发现权重不完整,报各种 shape mismatch。最稳的做法是保存后先本地加载一次,跑两个 prompt 确认输出正常再归档。不要信任“文件都在”就等于“状态都对”。

6. 一个容易忽略的追求:让 LoRA 真正服务于场景

关于 Qwen2.5-VL-7B 的 LoRA 微调,技术流程可以总结成“环境、数据、注入点、训练、合并”五步,但真正决定效果上限的往往是后半程的数据和评估闭环。我常用一个小技巧:训练时每隔 500 步,从验证集里挑 10 条固定样本做生成对比。这样可以看到模型从胡言乱语到逐渐进入状态的完整过程,比只看 loss 曲线直观得多。

如果你也在做类似项目,我特别建议训练完成后先不要急着上线,把 LoRA 输出和 base 模型输出同时放到业务方手里做盲测。多模态模型的“效果变好”不能只靠几个 OCR 准确率指标衡量,指令跟随的稳定性和对特殊版式的容忍度同样重要。

最后再分享一个经验:不要把 LoRA 微调当成一次性的炼丹。同一个业务场景,数据会变、版式会变,模型能力也会随开源社区更新而升级。我会把每次训练的 LoRA 单独命名,记录 r、alpha、数据版本、训练轮次,下次来新数据时不是覆盖旧权重,而是在旧的 LoRA 基础上做增量训练。这个方法帮我避开了好多次“新数据一上,旧能力归零”的尴尬。连载写到这里,希望这些实操里的选择与取舍,能让你的 Qwen2.5-VL-7B LoRA 微调少走几步弯路。

相关新闻

智能支持员的技术协助与问题解决:架构设计与落地实践

智能支持员的技术协助与问题解决:架构设计与落地实践

一个智能支持员如果只能“答上话”,却解决不了问题,那它在实际业务里基本就是个摆设。我见过太多团队上一套智能客服系统,上线时演示效果惊艳,真正跑起来之后用户问两句就转人工,后台堆满未闭合工单,最后整…

2026/10/20 12:02:59 阅读更多 →
C++快速排序全解析:分治思想、三种分区写法与工程级优化

C++快速排序全解析:分治思想、三种分区写法与工程级优化

先说一个我自己的体会。有一阵子我在处理一批模拟订单数据,几十万条结构体记录,需要按时间戳排序。头一回图省事,直接套了个最简单的选择排序,结果跑了快半分钟,整个后端接口直接超时。换成快排之后,同一批…

2026/10/20 12:02:59 阅读更多 →
彻底解决C盘空间不足:从清理临时文件到长效预防的完整攻略

彻底解决C盘空间不足:从清理临时文件到长效预防的完整攻略

C盘变红应该是Windows 10用户遇到最多的糟心事之一。明明是同一个系统,别人用了三年还干干净净,自己用半年就满得连输入法升级都要提示磁盘不足。我前些年帮人处理过不少这类问题,发现大多数人的第一反应是手动删文件——删完确实空了一点&am…

2026/10/20 12:02:59 阅读更多 →

最新新闻

提示词模板化:从基础到高级的Prompt Engineering实战指南

提示词模板化:从基础到高级的Prompt Engineering实战指南

1. 为什么要把提示词做成模板:从重复劳动到可复用资产先讲一个我自己的经历。早期用对话式AI干活的时候,每次都是临时想提示词,想到哪写到哪:“帮我总结一下这段文字”“写一个产品介绍,要专业一点”。这种随手写的做法…

2026/10/20 12:46:33 阅读更多 →
Kafka入门进阶:分区、副本、acks与消费者组核心机制详解

Kafka入门进阶:分区、副本、acks与消费者组核心机制详解

1. 从“能跑起来”到“跑得明白”:Kafka 基础入门的第二道坎很多人第一次接触 Kafka,都是照着官方 Quickstart 敲一遍命令行,看到生产者发消息、消费者收到消息,就觉得“我会了”。但真到了项目里,面对一堆server.prop…

2026/10/20 12:46:33 阅读更多 →
SpringBoot+Vue图书推荐系统源码解析:协同过滤与前后端分离实战

SpringBoot+Vue图书推荐系统源码解析:协同过滤与前后端分离实战

最近我在帮几位同学梳理毕业设计项目,被问得最多的就是“图书推荐系统”。这类题到现在依旧热门,原因也很简单:图书天然适合做推荐,用户行为数据容易理解,和电商推荐、短视频推荐比起来业务逻辑更干净,特别…

2026/10/20 12:46:33 阅读更多 →
技能不是标签而是动作:用刻意练习、反馈与复盘构建底层能力

技能不是标签而是动作:用刻意练习、反馈与复盘构建底层能力

很多人都把“技能”当成一个名词来理解,觉得自己会写代码、会做PPT、会剪辑视频,就算拥有一项技能。但真正带过人、自己从零啃过几门硬技能的人会知道,技能其实是动词——它是你每天都要做的一个动作,而不是简历上既能唬人又能自我…

2026/10/20 12:46:33 阅读更多 →
把涂鸦设备搬回局域网:Tuya-Local 本地控制与 Home Assistant 配置指南

把涂鸦设备搬回局域网:Tuya-Local 本地控制与 Home Assistant 配置指南

把涂鸦设备搬回局域网:Tuya-Local 本地控制与 Home Assistant 配置指南 【免费下载链接】tuya-local Local support for Tuya devices in Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/tu/tuya-local Tuya-Local 是 Home Assistant 的一个…

2026/10/20 12:46:33 阅读更多 →
MCP协议驱动智能体底座架构设计:从插件思维到接口思维

MCP协议驱动智能体底座架构设计:从插件思维到接口思维

1. 从“插件思维”到“接口思维”的认知跃迁大多数人第一次接触MCP(Model Context Protocol,模型上下文协议)时,脑子里蹦出来的第一个词就是“插件系统”。这也不奇怪,毕竟它的外在表现确实像插件:你写一个…

2026/10/20 12:45:32 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* 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 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* 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 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* 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 1:01:30 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/20 2:50:50 阅读更多 →

月新闻

我发现了一个新思路:用 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 阅读更多 →