AI芯片软硬件协同设计:算子映射、指令集与编译器适配全解析

AI芯片这行,聊架构的文章很多,聊编译器和指令集的文章也不少,但能把“软硬件设计”串成一条线讲清楚的,确实不多。这个系列我写到了第6篇,前几篇我把脉动阵列、片上网络、存储层次这些硬件架构翻来覆去讲过一遍。结果不少做软件的朋友留言说:你们硬件选型倒是讲得热闹,可这些东西到底怎么跟编译器、算子库配合?为什么同一块芯片,有人能跑到理论峰值的80%,有人拼了命只能用到三成?

这篇文章我就把软硬件协同设计里最容易被忽略、但决定成败的几个环节——算子映射、指令集裁剪、编译器适配、流片前联合验证——挑出来逐个拆开。适合正在做AI芯片工具链、或者准备从算法转芯片方向的人读;如果你刚入门,也不用慌,我会先讲清楚“为什么必须要软硬件协同”,再把每一环背后的逻辑说透。

1. 软硬件划分:AI芯片设计的第一个岔路口

1.1 为什么说架构决定软件的天花板

很多人以为软硬件协同是从写代码那一刻开始的,其实不是,真正的分岔路口在芯片定义阶段就出现了。你要先想清楚:哪些计算被固化到硬件里,哪些留给软件去灵活处理。这个划分决定了后面的软件团队在几层楼里跳舞,也决定了你的芯片两年后是“一把梭”还是“生锈的老古董”。

拿卷积举例。卷积运算在图像和AI模型里占了九成以上的计算量,锤死在硬件里很划算。但你要是把所有的卷积细节、不同的padding方式、不同尺寸的kernel全部用纯硬件逻辑实现,那芯片面积会爆掉,功耗也会失控。而且算法迭代特别快,今天流行卷积,明天可能流行注意力机制,或者新的算子。硬件一旦固死了,就只能看着新模型干瞪眼。

所以业界的普遍做法,是把最底层的乘累加阵列、激活函数、池化这类“原子操作”做成硬件单元,而把“如何组合这些原子操作”留给了指令流。这就是软硬件划分的核心:硬件负责确定性高、重复性高、能耗敏感的部分,软件负责策略性、组合性和未来可扩展的部分。

我参与过某AI推理加速芯片项目,当时团队就为“是否把softmax也做成硬件单元”吵了一星期。做硬件的人说softmax里那个exp和除法太费电,必须硬化;做软件的人说模型里经常有自定义变体,硬死了不好改。最后方案是:把exp查表做成了硬件小单元,但softmax的整体流程交给软件算子库去拼装。这样既保住了大部分功耗收益,又留了灵活性。

1.2 划分时的取舍原则

做软硬件划分时,我建议死守三条原则。

第一,看“调用频率”。频率极高的算子,例如矩阵乘、卷积、向量加法,果断倾向硬化;一年用不上几次的算子,就算再复杂,也别为它浪费芯片面积。

第二,看“数据依赖复杂度”。像卷积这种数据复用规律非常清晰的计算,硬化后可以用脉动阵列把数据搬移成本压到极低;而像动态维度、动态shape这类运行时才能确定的东西,硬到硬件里只会让你想砸键盘。

第三,看“生态兼容窗口”。你做的芯片总要跑主流框架吧?哪怕今天某个算子不常用,但如果它长在主流模型的骨干路径上,那硬件还得多留一步软实现的后路。

这里有个容易踩的坑:过度适配。我见过某芯片把三年前的某小众模型算子固化得非常漂亮,性能好看得很,但过两年那个模型已经没人用了,芯片反而因为那部分硬件占用,没法给新算子腾地方。软硬件划分的本质是风险管理,不是炫技。

2. 算子映射与指令集设计:让硬件听懂算法

2.1 从Tensor到指令:算子映射的路径

假设你已经从算法里抽出来了一个矩阵乘算子,下一步就是要把这个算子翻译成芯片能执行的指令序列。这段路大多数人叫“算子下发”,但里面门道很深。

首先,你要把矩阵乘这个逻辑操作拆成循环嵌套:遍历输出矩阵的行、列,然后做内积。针对每个芯片的计算阵列规模,循环要切块(tiling)。比如你的片上阵列是16x16的乘法单元,但你算的矩阵是128x128,那就得把大矩阵切成一堆16x16的小块,再一块块喂进去。

这个切块的大小直接影响两个东西:一是数据复用,小块从片外搬上来越少越好;二是流水线衔接,上一块还在算,下一块的数据最好已经在片上等着了。很多芯片利用率低,不是因为计算阵列不行,而是因为切块策略一塌糊涂,算一会儿等一会儿,等于花钱养了一堆闲着的乘法器。

我举个例子,某芯片的矩阵单元是32x32的MAC阵列,理论算力挺高。结果跑一个维度为512的全连接层时,软件团队直接把整个矩阵按一个小块硬拆,片外拷了四次数据,把时间全浪费在DDR带宽上了。后来改成混合分块:行方向按32拆,列方向按64拆,让片上数据复用率达到70%以上,实测端到端延迟直接降了三分之一。

2.2 指令集扩展的取舍

把算子拆分好了,还得靠指令把它表达出来。早期很多AI芯片直接沿用CPU的SIMD指令,后来发现矩阵乘用SIMD指令得拆成无数条向量乘加,指令流量太大,跑到飞起性能也上不去。于是大家开始做指令集扩展。

一种是VLIW风格,一条超长指令同时控制多个功能单元并行工作。好处是编译器可以做大量调度,坏处是解码器复杂、指令字长惊人,很容易把指令存储空间吃满。

一种是张量指令风格,就是你现在经常听到的“一条指令算一个矩阵乘”。这种方法指令密度高,但对硬件的数据通路要求也高,通常得配合专门的脉动阵列或二维寄存器堆。我和不少同行聊过,现在主流趋势其实是混合模式:控制密集、不规则的部分用通用指令;计算密集、规则的部分用张量指令。关键是接口要干净,别让软件每次下发都要猜硬件状态。

我看过一些芯片手册,指令集设计得极其丰富,但编译器只用了其中三分之一,剩下全是没用的死功能。指令集不是越多越强,而是找出现实模型里最常出现的计算模式,把那些模式啃下来就够了。这个取舍在AI芯片上比传统处理器要激进得多——因为AI芯片的指令集是和一个相对封闭的模型生态打交道的,少而精准更香。

3. 编译器与运行时:把高层语言落到底层硬件

3.1 编译器的层次与分工

指令集的另一端,就是编译器。AI芯片的编译器和传统编译器长得不太一样,它更像一个“调度器+优化器+代码生成器”的组合体。一般分三层干活:

前端负责把PyTorch、TensorFlow出来的计算图接进来,做算子融合。比如把卷积后面的批量归一化、ReLU融合进同一个算子,减少一次中间结果落回内存。很多新手工改框架后端,往往只盯着单个算子跑得快不快,完全忘了算子之间的数据搬运才是真正的消耗大户。融合一次,可能比单个算子优化半天的收益还大。

中端负责和硬件参数打交道,做循环分块、数据布局转换、内存分配。这一层是最容易翻车的。比如二维数据在内存里是按行还是按列排,直接决定搬运效率和向量化效率。很多算法模型用NCHW格式,但你的硬件如果对NHWC更友好,编译器就得自动插入layout转换,这个转换本身也有成本,如何均衡是门手艺活。

后端就是所谓的指令调度。把已经标好的操作排序、绑定到具体的执行单元、处理好流水线停顿。如果前中端做得好,后端压力会小很多;反之,后端再精心打补丁也没用。

有个观点我想多说一句:AI芯片编译器里,永远不要指望“一招吃遍天”。不同模型、不同尺寸的算子,最优调度方案可能截然不同。与其在编译器里堆一堆规则,不如建立一个静态性能模型,让编译器基于成本模型做决策。我在某项目里就用了个非常简化的带宽估算模型,就把不少算子的调度决策从“拍脑袋”改成了“按数据计算”,效果立竿见影。

3.2 算子调度与内存分配

讲到具体操作,大部分性能问题都绕不开存储层次。AI芯片基本都有寄存器堆、SRAM、DDR这几级存储。数据从DDR搬到SRAM要几十上百个周期,从SRAM搬到寄存器堆只要几个周期,差距悬殊。所以核心原则就一句话:尽可能让数据在离计算单元近的地方多被复用几次。

我做算子调优时常用的手段是“双重循环分块”:先按输出通道分块,让同一块输入数据对应多个输出通道的计算;再按输入通道分块,让同一输出区域复用多组输入。这样做能显著增加SRAM里的数据命中次数,而不是每算一个小块跑去DDR搬数据。

内存分配呢,最大的坑是“内存碎片”。AI芯片的SRAM通常不大,几兆已经算多的,但模型一进来各种张量同时并存,如果你用简单的先到先得策略,很容易把SRAM拆得七零八落,最后大模型根本装不下。我见过做得好的编译器,会先用一个“模拟退火+贪心”的分配器搜索一遍,把生命周期相近的张量安排到重叠区域,然后把剩余空间整合给最大的中间结果。这一步做扎实了,某些模型占用面积能减少四成。

3.3 运行时与驱动的设计

编译出来的“可执行文件”只是一堆指令和数据的集合,真正让它们在芯片上转起来的,是运行时和驱动。

运行时干的事很杂:内存管理、任务队列、同步、性能计数器的上报。我印象最深的是任务启动成本。很多芯片每次下发一个小算子,驱动就要做一堆寄存器配置、内存映射、中断处理。如果一个模型有几百个小算子,每秒跑几百轮,光启动开销就把性能吃光了。这也解释了为什么现在的落地产品格外强调“大算子fusion + 一次下发”,把几百个小算子揉成几个大任务,启动开销一下子降到可以忽略。

另外,别小看了性能计数器的设计。调优的时候没有精确的cycle数据,你只能瞎猜瓶颈在哪。给运行时加上指令计数、缓存miss计数、DRAM读写带宽统计,让软件团队能拿到多条硬件流水线的吞吐和占用率,这是软硬件协同能否持续优化的关键。某芯片就是因为在硬件里埋了一组轻量级的性能监控点,之后编译器团队才有了明确的优化方向。

4. 软硬件协同验证:流片前如何提前发现问题

4.1 性能建模与仿真的位置

软硬件设计最大的痛点是:软件开发想提早进行,但芯片还没流片。传统的做法是各干各的——硬件做RTL仿真,软件做指令模拟器,两边完全脱节,到了板子上才发现软硬件接口对不上,一改就是几个月周期,根本等不起。

我现在强烈建议在项目初期就建立一套“性能模型+指令集模拟器”的组合。性能模型不需要拿到精确到信号级的延迟,但要用会计量数据在每一级存储上的驻留时间、算子执行单元的占用情况。它能在一小时内验证“某种切块策略会不会导致长时间等待”,给指令集设计提需求。指令集模拟器则更精细一点,执行具体的指令流,输出计算和搬运事件的时序。两套工具并行,相当于在设计阶段就跑通了软硬件接口。

好多人跟我抱怨,说性能建模工作量太大,做不完。我的体会是:别沉浸在精确度里,先做能算“相对瓶颈”的工具。你需要回答的其实只有三个问题:数据搬运需要多少个cycle?计算单元有多少cycle是空闲的?到底谁在拖谁的后腿?有了这三个答案,大部分架构问题就现形了。

4.2 虚拟原型与联合调优

等指令集和编译器初版都有了,更完整的验收到虚拟原型(Virtual Prototype)阶段。这一层可以用软件模拟器把RTL的行为模型化,让完整应用在上面跑,甚至把调度器的策略放进去观察效果。我在某项目中做过一次实验:同样是卷积算子,在虚拟原型上换了一种存储排列顺序,利用率从56%升到78%,而这次调整发生在流片前半年,相当于白赚了一轮性能优化。

不过虚拟原型也有自己的问题:速度慢。给你一个调试用的慢版本可以,但别指望它大规模跑训练或推演整套手机端性能。所以在实践中,我会把验证策略分成三档:单算子级别跑架构级模拟器,小网络级别跑虚拟原型,完整应用则等在基于离线生成性能预测的阶段再估算。这样既不牺牲吞吐,又能尽早暴露深层的不一致。

说到联合调优,还有个细节:一定要让软件团队在早期就参与驱动接口定义。很多芯片团队硬件做完才甩给软件说“你们的编译器适配吧”,结果两边对寄存器接口的理解根本不在一频道。我习惯做法是每个硬件模块定义完之后,立即让软件写一个最小的烟雾测试(smoke test),在仿真环境里跑通基本算子,有问题当天反馈。这样哪怕到流片时才暴露BUG,也能迅速缩小到具体模块,而不是在全系统里盲人摸象。

5. 从实测数据看软硬件协同调优的收益

5.1 核心数据指标怎么读

真正开始调优了,怎么看数据?业内有几个关键指标,我每次都会让团队把这几项打印出来:算子占用率、内存带宽利用率、片内复用率、任务启动开销占比。

  • 算子占用率:计算单元真正在算的时间占比。长期低于50%,说明调度或切块有问题。
  • 内存带宽利用率:DDR或SRAM端口实际传输和理论峰值之比。高占用率但性能差,可能是数据搬运重复了,而不是带宽不够。
  • 片内复用率:每次数据从内存搬进片上后,被计算单元用了多少次。大于10基本健康,小于3基本在发呆。
  • 任务启动开销占比:驱动和运行时消耗周期在所有计算周期中的比例。超过20%,说明你得好好做算子融合了。

以上这些指标不要一次性全看,那样容易信息过载。我是习惯把一张热力图打出来,横轴是时间,纵轴是不同硬件单元的活动度。哪一个单元一直在跑、哪一个单元闲得像条咸鱼,一眼就看出来。比如计算单元烧满但数据传输线没几个脉冲,那就说明数据没喂饱;反过来搬运一直堵,计算一停一停的,就说明调度没铺开,或者切块切小了。

5.2 一个真实的调优实例

我挑一个自己印象最深刻的小案例讲吧。某图像处理Demo,输入是一张1080p图片,跑一个简单的超分模型,总共就二十来个算子。上线后延迟惨不忍睹,预估要50毫秒,实际跑了200毫秒。

最开始我们怀疑是卷积阵列太弱,于是翻性能计数器,结果发现卷积阵列占用率不到30%,说明问题根本不在计算本身。进一步看内存事务的时间戳,发现有很多频繁的“小搬”操作,每个算子都要读一遍完整特征图,片内复用率只有2。说白了,数据根本没有在片上停留下来,每次计算都要从DDR把整个图重新抬一遍。

当时我们的操作很简单:先把所有算子的数据布局统一成硬件友好的格式,避免layout转换产生的零散搬运;再把相邻的卷积与加融合成一个算子,让中间特征图停留在SRAM,而不是一算完就落回DDR。几天改下来,延迟降到70毫秒;后来又做了一次循环分块细分,把部分重复读取进一步削掉,干到了45毫秒。整个过程中芯片的算力一点没变,变的全是软硬件怎么协作、数据怎么流动。

从那次之后我就很笃定一件事:大多数AI芯片的性能事故,不是算力不够,而是软件没有把数据喂好。硬件设计得再好,数据流不转,就是空转。

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

6.1 排查思路:先定位瓶颈在哪一级

做软硬件协同,最怕的是拿到性能问题就到处怀疑。我习惯按一套固定排查流程走,能省很多精神内耗。

先看计算单元占用率。如果占用率中等或偏上,说明计算不是瓶颈,赶紧去看存储搬移和等待时间。如果占用率特别低,先怀疑算子切块:是不是切得太大导致数据排不上?再怀疑指令调度:是不是串行依赖没被打断?然后再怀疑数据布局:是不是格式转换把时间都烧走了。这套流程不算高深,但真能拦住90%的初调问题。

还有两类坑很隐蔽。一类是同步陷阱:多核芯片上,如果各核心之间要频繁同步,任务等待时间会急剧膨胀。我见过一个模型,算子都很轻,但同步点特别密集,导致多核利用率只有40%。后来把多个同步等待合并成一次握手,一下子就提上来了。另一类是缓冲区分配错误:有的编译器会给每个算子开一块固定大小的SRAM,结果明明很多算子的生命周期没重叠,资源也没共享,白白浪费空间,间接逼迫数据外溢到DDR。

6.2 常见问题速查

现象常见原因处理套路
计算单元空闲,内存正常切块尺寸不匹配,片上数据复用低调整tile尺寸,增大片内驻留时间
内存带宽打满,性能仍差数据被反复搬运多次优先做算子融合,再统一layout
单核快,多核不提升同步点过密或任务分配不均合并同步、按数据并行重排任务
小算子延迟极高驱动任务启动开销占比高算子融合或批量下发
编译器生成了冗余指令后端的模式匹配没覆盖硬件特性补上针对特定张量指令的匹配规则
性能模型和实测偏离大模型里面存储延迟估算不准校准各级存储的实际cycle数

6.3 两个容易被忽略的细节

最后说两个我踩过坑的细节。第一个是“仿真器太快了”。我在早期调试时,总觉得指令集模拟器跑得飞快,程序一下子就出结果,结果到了虚拟原型上一跑,性能完全两样。原因是模拟器默认所有访存都命中,而真实系统里缓存miss、SRAM bank冲突到处都是。所以建模拟器的时候,一定要把存储的bank冲突模拟进来,否则你辛辛苦苦调的指令序,一到真硬件就垮。

第二个细节是“性能数据要留到能溯源的程度”。很多芯片调试时,计数器能告诉你总周期数,但你看不出到底耗在哪个算子、哪条内存边上。所以我后来推行了一套规范:每个算子执行前记录起始的流水线阶段值,执行后读一次,算差值写进运行日志。这样做看似多余,但真正排查问题时,你才能在几万行日志里迅速定位到那一个操作出了毛病,而不是拿着一个总时间反复猜。

按照我个人的实践体会,AI芯片的软硬件设计从来不是两个聪明团队各写各的再拼起来,它是一场持续性的接口博弈。硬件留下多少余地,软件就能做出多少手脚;软件理解多少硬件,硬件就能跑出多少性能。如果你正在做这颗芯片的工具链,我建议从今天开始,把每一个算子的性能计数器都打开,把每一次数据搬移都画出来。你很快会发现,瓶颈永远比你想象得更靠前,也永远更容易被一套严谨的协同方法吃干榨净。

相关新闻

浏览器里跑三国杀:noname 网页版上手体验

浏览器里跑三国杀:noname 网页版上手体验

浏览器里跑三国杀:noname 网页版上手体验 【免费下载链接】noname 项目地址: https://gitcode.com/GitHub_Trending/no/noname 周三深夜加班结束,发现手边的备用电脑只装了浏览器,装不了任何客户端,又想在睡前打一局三国杀…

2026/10/21 1:53:35 阅读更多 →
Linux归档与压缩实战:tar命令、格式选型与解压排错全指南

Linux归档与压缩实战:tar命令、格式选型与解压排错全指南

1. 归档和压缩是两件事:先把这个概念掰清楚再动手我必须先讲一个大多数初学者都容易搞混的点:Linux里"归档"和"压缩"是完全不同的两件事,只是平时使用的时候习惯把它们绑在一起说,导致很多人以为tar.gz是一个…

2026/10/21 1:53:35 阅读更多 →
电压电流检测方案全解析:从采样电阻到隔离运放的选型与避坑指南

电压电流检测方案全解析:从采样电阻到隔离运放的选型与避坑指南

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

2026/10/21 1:53:35 阅读更多 →

最新新闻

STM32F2多串口扩展:WK2114驱动实现与避坑指南

STM32F2多串口扩展:WK2114驱动实现与避坑指南

简介:这份资源面向嵌入式开发工程师与STM32学习者,提供WK2114串口扩展芯片的驱动实现,用于解决STM32F2系列微控制器UART接口不足、难以同时与多个外设进行串行通信的问题,适用于物联网设备、工业自动化等需要多路串口通信的场景。…

2026/10/21 2:32:56 阅读更多 →
基于豆包与 Dola 模型构建可视化节点式 AI 工作流的技术探索

基于豆包与 Dola 模型构建可视化节点式 AI 工作流的技术探索

摘要: 在 AI 多媒体批量生成场景中,传统网页交互模式存在素材反复上传、任务串行执行、提示词版本难以管理等问题。本文探讨如何搭建一套节点画布系统,实现可视化编排 AI 生成任务,对接豆包、Dola 以及第三方模型 API;…

2026/10/21 2:32:56 阅读更多 →
24GB 显存跑 740 亿参数 Agent:Nemotron 3.5 Bolt 本地部署工程拆解 | RiseClaw玄策

24GB 显存跑 740 亿参数 Agent:Nemotron 3.5 Bolt 本地部署工程拆解 | RiseClaw玄策

24GB 显存跑 740 亿参数 Agent:Nemotron 3.5 Bolt 本地部署工程拆解 | RiseClaw玄策 10 月 15 日,NVIDIA 在官方研究页发布 Nemotron 3.5 Bolt 74B-A9B:总参数 740 亿、每 token 只激活 90 亿的 MoE 混合架构模型,2-bit 量化后压…

2026/10/21 2:32:56 阅读更多 →
深圳结构设计基本功:把 DFM 写进每一张图

深圳结构设计基本功:把 DFM 写进每一张图

深圳的结构设计公司整体强,不是天赋使然,而是被产业链"训"出来的。深圳八千里设计公司的TONY结构总监讲清它强在哪,以及 DFM 为何是基本功。 一、DFM 是默认共识 深圳背靠全国密度领先的制造配套,结构工程师天天和模具厂…

2026/10/21 2:32:56 阅读更多 →
GPU 调度栈开源与框架层精炼:AI 基础设施的两个新落点|2026年10月20日

GPU 调度栈开源与框架层精炼:AI 基础设施的两个新落点|2026年10月20日

AI 基础设施的改动今天集中落在两处:一是调度,NVIDIA 把完整的 Run:ai 平台以 Apache 2.0 协议开源,GPU 调度、配额与工作负载管理可以自托管;二是框架,Google 开源 Harness,把智能体的改进对象从模型权重移…

2026/10/21 2:32:56 阅读更多 →
SpringBoot4 + Vue3 实现全局跨域配置与 JWT 登录鉴权|计算机毕设实战

SpringBoot4 + Vue3 实现全局跨域配置与 JWT 登录鉴权|计算机毕设实战

技术栈版本&#xff1a; SpringBoot 4.0.x JDK 21 JJWT 0.12.x Vue3 Vite Element Plus MySQL8.0 毕设后台系统必备登录认证模块&#xff0c;SpringBoot4 环境很多依赖包版本需要适配升级。一、pom.xml 核心依赖 <!-- SpringBoot4 Web --> <dependency><group…

2026/10/21 2:31:56 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

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

周新闻

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

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

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

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

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

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

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

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

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在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 阅读更多 →