基于ResNet-50的人脸多属性识别:多任务学习工程实践与踩坑复盘
需求方最开始给的需求只有一句话给一张正脸照片同时返回年龄、性别、人种三个属性。团队里很快分成两派一派认为老老实实训三个模型最稳另一派想把三个任务塞进同一个网络里用多任务学习一把搞定。最终我们选了后者基于 ResNet-50 作为共享主干在 TensorFlow 里实现了年龄、性别、人种三个分支同时输出。这个方案从训练开销、部署复杂度和实际效果来看都明显优于三个独立模型但过程中踩的坑也不少。这篇文章是完整的技术复盘包括网络结构设计、数据清洗、损失函数平衡、训练策略和部署量化适合正在做多属性人脸识别或者想了解多任务学习工程细节的开发者参考。我会尽量把每个“为什么这么选”讲清楚而不是只丢结论。1. 为什么把三个属性塞进同一个模型先算清这笔工程账1.1 三个任务依赖同一组底层特征人脸属性识别的输入是一张已经对齐过的人脸图输出是年龄、性别、人种三个标签。乍看是三个互不相干的分类或回归问题但实际上它们在特征层面高度重叠无论是判断性别、估计年龄还是判断人种卷积网络最先学到的东西都是一致的——脸型轮廓、五官比例、皮肤纹理、眼睛鼻子嘴巴的相对位置。这些低层次和中层次的特征根本不需要为每个任务单独训练一遍。硬参数共享所有任务共用同一套主干参数只有最后的分支各自独立正是建立在“底层特征复用”这个前提上。换个说法人的视觉系统也不会分别准备三套线路来看年龄、性别和人种而是同一眼扫过去综合判断。多任务网络做的事情和这个逻辑一样只不过把“同一眼”落实成了共享卷积层“综合判断”落实成了三个并行输出头。1.2 三个独立模型看着简单账算下来全是成本如果把三个任务拆开最直接的方案是三个 ResNet-50 各跑各的。我来给你算一笔具体的账假设输入都是 224×224 的图像参数量一个 ResNet-50 主干约 2360 万参数三个模型仅主干就是 7000 多万而共享主干的多任务模型主干只保留一份三个分支加起来通常不到 100 万参数总数大约 2400 万。推理开销三个模型需要三次前向计算多任务模型只需要一次前向就拿到三个结果GPU 上的吞吐差距就是三倍级别。训练开销三个模型各自要吃一遍数据多任务模型同一批数据喂一次三个任务同时更新训练时间省一大截。部署维护一个服务接口和一个模型文件远比三个模型三个版本管理起来省心尤其是后面还要做量化、灰度、回滚的时候。这还只是工程账。从效果角度多任务学习还有一个隐性红利共享主干等于用三个任务的标签共同约束同一组参数相当于一种隐式的数据增强和正则化。在人脸属性数据集标签本身就有噪声的情况下这种“一个样本同时提供三份监督信号”的做法通常能让每个单任务都比单独训练略好一点。1.3 哪些场景不适合硬参数共享多任务不是万能药。如果两个任务的输入分布差异很大或者任务之间的相关性很低强行共享主干反而会互相拖累。举个反例一个是近景高清人脸的年龄识别另一个是远距离人脸的性别判断前者依赖皮肤纹理细节后者更多依赖整体轮廓共享底层会让两个任务都学不痛快。我在动手之前先做了一个小实验把单任务模型在中间层的特征向量取出来算相关性确认三个属性任务的特征相关性足够高才决定使用硬参数共享。如果相关度不够我会改成软参数共享也就是每个任务保留一小部分独立参数层而不是硬塞进同一个主干。2. 主干为什么选 ResNet-50不是因为它最强而是因为它最稳2.1 残差连接解决的是“能不能训深”的问题深度网络大规模应用之后视觉任务但凡要上深度模型基本绕不开 ResNet 这个选择。它的核心贡献是残差连接让每一层学习的是输入和输出之间的残差 F(x)而不是完整的映射 H(x)。在反向传播时恒等映射那条通路保证了梯度可以几乎无损地回传到浅层所以网络深度增加带来的退化问题被压住了。相比之下纯堆叠类的卷积网络一旦层数多了训练就很难稳定收敛。在人脸属性这种中等规模数据集上ResNet-50 的深度已经足够表达人脸特征训练速度比 ResNet-101 快不少精度差距通常在 1 个点以内很多时候甚至没有差距。所以我的选型原则很朴素先选一个最稳、最不容易出问题的主干把其他变量控制住而不是一上来就追最新的结构。2.2 ResNet-50 和更轻、更新模型的取舍我也认真考虑过更轻量化的 MobileNet 系列和精度上限更高的 EfficientNet 系列。MobileNet 的优势是参数量和计算量小适合部署在低算力设备上EfficientNet 精度更高但调参敏感需要更精细的训练配置。人脸属性识别这个场景尴尬在哪呢它不像通用人脸识别那样动辄千万级数据数据集通常只有几万到几十万张模型太大容易过拟合模型太小又学不到足够的纹理细节。ResNet-50 正好落在“够用且不浪费”的甜区。如果将来要上移动端再考虑用蒸馏把 ResNet-50 的知识迁移到轻量网络上而不是一开始就赌轻量网络能训出同样的效果。这里补充一句很多人的第一反应是直接用换主干来“追赶精度”但在我做的几组对比里主干从 ResNet-50 换成 ResNet-101三个任务的指标几乎没有变化倒是训练时间实打实增加了将近一倍性价比很低。2.3 预训练权重和输入预处理两个最容易被忽略的细节使用在通用图像数据集上预训练好的 ResNet-50 权重是最省事也最有效的起点。但有两个细节很容易翻车。第一加载预训练权重后输入归一化必须和预训练时保持一致通常是用固定的 mean 和 std 把像素值缩放到标准范围不能想当然地认为模型自己会适应。第二人脸要先对齐再缩放最后送入网络。人脸对齐包含检测人脸和定位五个关键点双眼、鼻尖、嘴角然后做仿射变换把脸摆正。我第一版偷懒直接把人脸检测框裁剪后 resize 成 224×224性别准确率一直上不去后来加上五点对齐并统一把眼睛位置放到固定坐标指标才明显改善。这个环节对最终效果的影响比换一个更新的主干大得多建议做这个项目的同学先把对齐管线稳定下来再碰网络结构。3. 网络结构一个 ResNet-50 主干三个“性格不同”的任务头3.1 最简结构GAP 之后直接分叉先给一个可以直接抄的骨架用 TensorFlow 的 Keras 接口写import tensorflow as tf from tensorflow.keras import layers inputs layers.Input(shape(224, 224, 3), dtypetf.float32) base tf.keras.applications.ResNet50( include_topFalse, weightsNone, input_tensorinputs, poolingNone, ) x base.output # (7, 7, 2048) x layers.GlobalAveragePooling2D()(x) x layers.BatchNormalization()(x) x layers.Dropout(0.3)(x) gender_head layers.Dense(1, activationsigmoid, namegender)(x) age_head layers.Dense(10, activationsoftmax, nameage)(x) race_head layers.Dense(num_races, activationsoftmax, namerace)(x) model tf.keras.Model(inputs, [gender_head, age_head, race_head])这个结构的思路是主干输出 7×7×2048 的特征图经过全局平均池化变成 2048 维向量再做一次 BN 和 Dropout然后直接分叉。三个任务头之间除了共享这个向量之外没有任何相互依赖关系。为什么不加一层共享全连接再分叉我试过在 GAP 后面再接一个 512 维共享 FC效果不升反降中间层和数据集规模不匹配多出来的参数量在几十万张图的规模下只会放大过拟合Dropout 都压不住。去掉之后验证集上三个任务的表现都有小幅提升。所以在数据集不是特别大的时候分叉之前的结构越简单越好。3.2 三个任务头为什么长得不一样性别头二分类问题我用单个神经元加 sigmoid输出值在 0 到 1 之间0 表示女性1 表示男性。相比两个神经元加 softmax少一个参数训练时数值更稳定评估时阈值也可以灵活调整。年龄头输出 10 个区间的概率分布预测时取期望得到最终年龄。为什么不直接输出一个连续值因为直接回归的年龄模型很容易被标签噪声带偏而且容易“学到均值”后面数据工程那节会详细讲。用区间分布的好处是模型只需要判断“这个人大概在哪个年龄段”同时还能通过 softmax 的分布看出模型的不确定度。人种头多分类 softmax类别数量取决于业务定义。我的实现里先按常见的四到五类做训练好之后再根据混淆矩阵决定是否需要合并尾部类别。三个头都建好之后用 tf.keras.Model 把输入和三路输出绑定编译的时候 loss 传一个字典把每个头的损失分别指定就行。3.3 我试过但最终放弃的两个结构第一个是辅助监督。我在 ResNet 第三阶段的输出上额外接了一个性别分类头想让中间层早点学到性别相关的判别特征。实验结果是最终精度几乎没变化训练时间却长了约 15%。后来分析中间层本来就已经包含足够多的性别信息辅助头只是把同样的梯度多传了一份属于重复劳动。第二个是分支间交互比如让年龄分支把性别分支的输出当作额外输入或者在三个分支之间加注意力。在小数据集上这种结构训练非常不稳定收敛速度慢而且很容易出现某一个分支主导整个模型的情况。我的结论是三个属性任务的相关性已经在共享主干里被充分吸收了分支之间再加显式交互属于过度设计。先把最简结构跑通、跑稳再考虑加花。4. 数据工程三份标签的清洗、对齐和建模方式4.1 多数据源合并时的标签统一现实中没有一份现成的数据集同时带年龄、性别、人种三份干净标签通常要把多个公开的人脸属性数据集合并使用。合并第一步是对齐标签格式这一步特别容易出问题。有的数据集年龄给的是出生年份和拍摄年份需要做减法有的给的是整理好的整数年龄性别有的用 0/1有的用字符串人种类别的定义更是五花八门。我最后统一成了这样一套内部规范性别用 0、1 表示女、男年龄范围 0 到 100统一取整数人种按业务定义分成若干类别。任何无法确定含义的标签宁可去掉也不用。因为一条脏标签在训练里产生的破坏力远大于它本身的价值尤其是在多任务模型里一条脏标签会同时污染三个任务的梯度。4.2 标签噪声清洗年龄和人种的标签噪声最让人头疼。年龄是被标注者猜出来的同一张脸标成 28 岁和 32 岁都很正常人种标签本质上是基于外观的主观分类边界本身就是模糊的。我的清洗策略分三层第一层用开源人脸检测模型跑一遍所有样本用检测置信度、模糊度和遮挡程度过滤掉质量太差的图第二层做标签交叉检查比如同一个人出现在多个样本里年龄标签却相差超过 10 岁这一组样本就标记为可疑人工抽检后决定修正还是删除第三层按年龄段分布做统计如果某个年龄段的样本数量出现明显异常的尖峰大概率是标注时出现了按批复制标签的情况这类样本直接丢弃。清洗听起来繁琐但回报非常直接。我之前做过对比清洗前和清洗后各训一轮性别准确率提升不到 1 个点但年龄 MAE 下降了 0.6 左右人种尾类召回率提升了将近 3 个点。原因是年龄和人种对噪声更敏感清洗对它们的帮助比对性别大得多。4.3 年龄任务的三条技术路线年龄建模有几种做法我实际对比过差别很大。方案优点缺点我的判断直接回归实现最简单输出连续年龄对噪声敏感预测容易收拢到均值附近不推荐区间多分类鲁棒能表达不确定性桶边界有误差桶内无法区分推荐序数回归利用年龄顺序关系实现和调参成本较高进阶可试我采用的是区间多分类加期望值把 0 到 100 岁切成 10 个桶每个桶用一个神经元表达“这张脸属于这个年龄段的概率”预测时用每个桶的中心年龄加权求和作为最终输出。这里还有一个进阶技巧叫软标签不要用 one-hot 硬标签而是给相邻桶分配高斯权重。比如真实年龄是 32 岁落在 30-34 那个桶就把 28-30 和 34-36 两个桶也分一点概率。这样模型不会被边界搞得太死拟合更平滑实测在年龄段交界处的误差明显下降。4.4 人种类别不平衡处理人种分类的样本分布通常是不平衡的头部的类别可能占一半以上尾部的几个类别加起来不到百分之十。如果不做处理模型会把所有不确定的样本都推给头部类别整体准确率看着还行尾部类别几乎废掉。我的处理方式是组合拳训练集里对尾部类别做过采样损失函数里按类别样本数的反比加权同时保留一个完全真实分布的验证集来评估。这里要特别提醒调整加权之后训练集上的整体准确率会下降这是正常的因为模型不再“无脑猜头部类别”了真实的业务指标反而会变好。关于人种属性多说一句这个标签本身是主观且带有社会争议的概念本文讨论的只是基于视觉外观的机器学习分类任务。如果要把这类能力放到生产环境必须经过公平性评估和数据合规审查不能用于任何对人的歧视性决策。5. 损失函数与训练策略怎么让三个任务不在一个锅里打架5.1 损失函数组合与权重设置三个任务的损失类型不一样性别是二分类用二元交叉熵年龄是区间多分类用多分类交叉熵人种也是多分类交叉熵。总损失就是三个损失的加权和。难就难在权重怎么定。我的经验是先各自训一个只有单任务头的模型记录每个损失收敛后的量级然后把初始权重设为量级反比再结合实际训练曲线微调。这个项目里最后用的是 w_age1.0、w_gender0.8、w_race1.2。原因也很直接年龄最难人种类别最不平衡所以权重大一些性别相对简单权重小一点可以防止它对共享特征产生过强的主导。注意这只是 loss 层面的数值不代表它们在总损失里的实际贡献比例具体还要看训练时的下降曲线但至少给了个合理的起点。5.2 分阶段训练先让任务头学会读特征再放开主干多任务模型最忌讳一上来就全参数微调。主干是预训练好的三个任务头是随机初始化的如果第一步就让所有参数一起更新任务头的梯度噪声会一路传回主干预训练特征会被快速破坏还可能出现训练初期某个任务的 loss 先把主干拽向一个方向另一个任务一直在追赶的情况。我用的策略是分三阶段冻结主干全部参数只训练三个任务头学习率 1e-3Adam 优化器。这个阶段让任务头快速学会如何从 2048 维共享特征里读取自己要的信息。解冻主干最后一阶段学习率降到 1e-4让靠近输出层的特征重新适配任务。解冻全部层学习率降到 1e-5配合余弦退火做整体精调。每个阶段之间我会跑一遍验证集确认没有掉点再进入下一阶段。这个方法看起来笨但在多任务场景里非常稳能避免掉大部分“三个 loss 互相打架”的问题。优化器我用了 Adambeta1 取 0.9beta2 取 0.999梯度裁剪阈值 1.0。训练时还开了混合精度整体训练速度大约提升三到四成指标没有明显变化。5.3 梯度冲突的高级话题什么时候才需要用多任务论文里经常强调梯度冲突也就是不同任务的梯度方向不一致导致共享参数更新互相抵消。常见解法有动态调整任务权重的 GradNorm 方法也有把冲突梯度投影后再合并更新的 PCGrad 方法。我在这个项目里都实际试过。GradNorm 确实能让 loss 收敛得更稳但训练时间大约增加两成PCGrad 实现起来稍麻烦在三个高度相关的任务上收益并不明显。我的工程结论是当任务之间的相关性足够高权重设置和分阶段训练都做对的情况下固定权重就够用了。如果哪天业务加了一个跟人脸属性毫无关系的任务再把这些高级方法捡起来也不迟。先把基础做扎实比盲目上高级优化器更重要。6. 训练踩坑实录多属性识别最容易翻车的三个地方6.1 性别分支学到了“发型捷径”第一个坑是性别分支在偷偷用“头发长度”做判断。数据集中长发样本绝大多数是女性模型发现这个规律之后就不再认真学脸部结构特征了结果一到真实场景短发女性、戴帽子的女性、长发男性全部翻车。这是典型的捷径学习。我的解决方法有两层一是数据增强里加入随机水平翻转、随机擦除和随机裁剪打破“长发等于女性”这种虚假关联尤其是随机擦除可以让模型不能只依赖某一个局部区域二是在数据层面刻意给长发男性和短发女性多一点采样权重。修复之后短发女性的误判率从大约 9% 降到了 4.5%效果非常直观。6.2 年龄模型在均值附近“躺平”第二个坑出现在年龄任务上。最初用直接回归做年龄收敛之后 MAE 看起来不错但把预测值分布画出来才发现几乎所有样本的预测都集中在 25 到 40 岁之间老年人被预测成中年人儿童也被预测成少年。原因是回归损失会天然倾向于把不确定的样本推向训练集的均值这是一种风险最小的行为。改成区间多分类加期望值之后这种“躺平”明显缓解因为模型必须对十个桶都给出概率不再允许把所有不确定性压缩到一个单点输出。评估年龄模型时我也多留了一招除了看 MAE还要看年龄段混淆矩阵观察是不是每个年龄段都分布在正确位置附近这比单一指标可靠得多。6.3 整体准确率会骗人指标口径要提前对齐第三个坑是指标口径。人种分类的头部类别占了数据一半以上模型只要学会“全猜头部”整体准确率就能到 85% 以上看起来很好但尾部类别的召回率可能只有 40%。所以我对外报的指标改用 balanced accuracy 和 macro recall同时在训练时就用这些指标做模型选择而不是看整体准确率。这里有个容易忽略的点评估指标和训练数据分布必须对齐。如果训练数据里的类别分布和业务上线后的真实分布不一样再好看的指标也没有意义。上线前一定要拿一份接近真实业务分布的数据重新评估这一步不能省。7. 从训练到上线导出、量化和吞吐优化7.1 导出 SavedModel把归一化也装进模型里训练完的 Keras 模型不能直接丢给服务端我做的第一件事是重新组装一个推理模型把预处理归一化也作为一层放进计算图里这样上游只需要传原始图像不再需要知道 mean 和 std 这些细节。代码大致是这样serving_input layers.Input(shape(224, 224, 3), dtypetf.uint8) cast tf.cast(serving_input, tf.float32) norm (cast - mean) / std # 这里的 mean/std 和训练时一致 features trained_model(norm) outputs { gender: features[gender], age_dist: features[age], race: features[race], } serving_model tf.keras.Model(serving_input, outputs) tf.saved_model.save(serving_model, model_dir)导出之后还要注意签名管理。我会给性别和人种直接输出概率给年龄同时输出年龄段概率分布和期望年龄两个字段这样下游可以自己决定用哪个省得服务端再做一次转换。模型文件也要做版本号管理方便回滚。7.2 FP16 和 INT8 量化的实测差异多任务模型在部署时优势更明显一次前向就出三个结果但模型体量仍然有约 2400 万参数推理优化还是要做。我实际测试了两条路线FP16 量化GPU 上几乎不影响精度性别和人种准确率基本不变年龄 MAE 变化也在 0.2 以内推理吞吐大约提升三到五成属于无脑收益直接上。INT8 量化需要用一小部分训练数据做校准集。实测性别和人种受影响很小但年龄的概率分布会变得略微集中期望年龄的计算会发生可见偏差。原因是年龄头对输出概率的微小变化很敏感量化误差被软标签放大。如果业务对年龄精确度要求高INT8 需要更谨慎地挑选校准集或者只量化主干保留任务头为 FP16。7.3 批量推理是吞吐提升的最大杠杆最后一个建议是千万不要一次只送一张图进模型。人脸属性识别在相册分类、客流统计这类业务里通常都是批量场景动态 batching 是吞吐提升最大的杠杆。同样的模型单张推理和一个 batch 32 的推理单张平均耗时能相差两三倍因为 GPU 的并行度被更充分地利用起来。TensorFlow 服务端可以开启动态 batch再加上预取队列高峰期的吞吐从每秒一两百张提升到五六百张很常见具体数字取决于显卡和输入图大小但方向肯定是对的。如果上游是异步任务队列还可以直接把批量大小设为固定值进一步降低调度开销。最后聊一点个人体会。这个项目做下来我最大的感受是在人脸多属性识别里标签质量对结果的影响大于模型结构数据工程上花的时间永远值得。另一个体会是多任务学习在中小规模数据下特别划算一个样本喂进去同时给三个任务提供监督信号等于变相扩大了有效数据量这是单模型结构很难获得的红利。如果让我重做一遍我不会急着升级主干或者换注意力结构而是先把年龄软标签的平滑参数、人种族别的定义和类权重重新调一遍这些细节带来的提升比换模型更明显。最后再分享一个实用小技巧训练启动后的前 20 个 step我会盯着三个 loss 是否都在同步下降如果有一个任务始终不动先停下来检查是这个分支的学习率有问题还是共享特征被另一个任务带偏了别等跑了几小时再发现。多任务模型的排查越早介入越省事。

相关新闻

Java版Personal Agent实战:基于Spring Boot与Spring AI构建生产级智能体

Java版Personal Agent实战:基于Spring Boot与Spring AI构建生产级智能体

1. 这个 Java 版 Personal Agent 到底解决了什么问题1.1 从“调个 API”到“跑一个 Agent”,中间差了什么过去一年,围绕大模型的工程实践基本分成了两条路。一条是 Python 生态里各种 Agent 框架快速迭代,另一条是 Java 生态里大量业务系统想…

2026/10/18 9:32:31 阅读更多 →
Oracle 11.2.0.3 GI PSU 终极补丁 p20996944 安装与避坑指南

Oracle 11.2.0.3 GI PSU 终极补丁 p20996944 安装与避坑指南

简介:本资源为 Oracle 11.2.0.3 版本最后一个 GI(Grid Infrastructure)PSU 补丁包,版本号 .15,同时包含数据库组件,适用于仍在使用该版本、需要完成安全加固与稳定性维护的 DBA 及运维人员。补丁包文件名 p…

2026/10/18 9:32:31 阅读更多 →
PyTorch反向传播与计算图:彻底搞懂叶子节点和requires_grad的梯度机制

PyTorch反向传播与计算图:彻底搞懂叶子节点和requires_grad的梯度机制

如果你正在用 PyTorch 训练模型,却对backward()之后.grad有时有值、有时是None感到困惑,这篇文章就是为你准备的。反向传播是深度学习的核心机制,而计算图、叶子节点、非叶子节点、根节点之间的关系,以及requires_grad的作用&…

2026/10/18 9:32:30 阅读更多 →

最新新闻

告别熬夜改稿:AI辅助PPT制作全流程效率提升实战指南

告别熬夜改稿:AI辅助PPT制作全流程效率提升实战指南

凌晨两点十七分,我对着同一页公司介绍已经改了第九遍,只因为上面那条业务模块的配图怎么摆都差那么点意思。这不是我第一次为PPT熬夜,也大概率不会是最后一次——如果我没在那个周末试过那款叫PaperXieAIPPT的工具的话。真正让我把标题写成“…

2026/10/18 10:07:39 阅读更多 →
视频深度理解三阶段方案:先浏览再定位后精读,成本降58.3%

视频深度理解三阶段方案:先浏览再定位后精读,成本降58.3%

这阵子我一直在折腾视频长内容的深度理解。这里说的深度理解,不是随便剪一段视频丢给模型让它出个总结,而是像Deep Research那样,针对一个具体的问题,从视频里挖出答案、收集证据、整理成结论。网页文本上的Deep Research已经跑得…

2026/10/18 10:07:39 阅读更多 →
【WSL】让WSL2后台持久运行不自动关闭的解决方案:TaoToken 统一 Key 通道下的 systemd 与 dbus-launch 配置

【WSL】让WSL2后台持久运行不自动关闭的解决方案:TaoToken 统一 Key 通道下的 systemd 与 dbus-launch 配置

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

2026/10/18 10:07:39 阅读更多 →
用状态机设计游戏主菜单:Pygame经典游戏架构实践

用状态机设计游戏主菜单:Pygame经典游戏架构实践

复刻“Mario Forever”这类经典游戏时,很多人会把精力放在关卡设计、跳跃手感、敌人 AI 上,结果做到一半才发现,光是“主菜单”这一个环节就已经暴露出大量工程问题。菜单上下项选择不顺畅、按钮点击后进程卡死、从暂停返回主菜单时状态全乱、…

2026/10/18 10:07:39 阅读更多 →
AI生成3D资产如何批量导入虚幻引擎?Blender中继管线指南

AI生成3D资产如何批量导入虚幻引擎?Blender中继管线指南

过去几年里,AI 生成 3D 资产已经从“玩一玩”变成了很多工作室认真评估的生产方式。现在你完全可以用 Opus 5.5 这类 AI 工具快速产出一整套物件的模型:木箱、油桶、石柱、路灯、管道,几分钟就给你几十个。看起来效率已经起来了,但…

2026/10/18 10:07:39 阅读更多 →
AI生成SVG动画实战:从提示词编写到性能优化的完整指南

AI生成SVG动画实战:从提示词编写到性能优化的完整指南

最近做前端动效时,试了一种新玩法:直接让AI大模型写SVG动画。之前这类动效要么用Lottie配AE插件,要么自己熬夜调path和keyframes,工作量和调试成本都不小。而这几天拿到一个内测的预览版AI对话模型,我试着把页面里几个…

2026/10/18 10:06:39 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

周新闻

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

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

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

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

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

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

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

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

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

2026/10/18 0:00:55 阅读更多 →

月新闻

我发现了一个新思路:用 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/18 0:55:02 阅读更多 →
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/17 17:22:31 阅读更多 →
黑夜航拍船只数据集训练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/16 14:23:36 阅读更多 →