CNN与ResNet实战解析:从卷积特征提取到残差连接原理
简介面向深度学习初学者这份Python源码以简易CNN与ResNet搭建为主线完整呈现图像分类模型的原理与代码实现帮助读者理解卷积神经网络的核心组件并厘清ResNet并非独立于CNN的另一种模型而是引入残差块与跳跃连接的CNN改进版本。资源共24个文件包括5个py源码脚本、6个h5格式数据集、8个xml工程配置以及pyc、iml等辅助文件整体大小约25.27MB目录按“第1周/第2周”分阶段组织结构清晰便于循次渐进。已有1099人浏览学习。代码基于PyTorch/TensorFlow的设计思想编写第1周可搭建含卷积层、池化层、全连接层的经典CNN第2周则通过残差块、批量归一化与跳跃连接实现ResNet并将两者对比直观体验残差结构如何缓解深层次网络的梯度消失问题。配套数据集与训练/测试脚本可直接运行非常适合作为课程设计、入门竞赛或期末项目的参考模板。1. 别再把 ResNet 当外行它只是 CNN 加了条“短路”第一次被问到“ResNet 到底算不算 CNN”时我差点把它当成文字游戏糊弄过去。直到自己动手搭网络、在 18 层深度的模型上看到 Loss 纹丝不动才意识到这个问题的分量ResNet 根本不是 CNN 的“另一个选项”它本身就是 CNN只是在卷基层之外多了一条跳跃连接的短路通道。这条看似简单的“加号”把训练深度网络的稳定性从拼运气变成了可预期的结果。很多人把 cnnresnet18 当作两套知识分开学结果既没搞懂卷积层在算什么也说不清残差连接为什么能 work。这篇笔记把项目里的简易 CNN 和 ResNet 源码拆开带你从“结论是什么”一路看到“为什么这么设计、代码里怎么落地”。学习这个机制的价值在于它解释了两个困扰初学者的问题——为什么卷积网络一定要有池化和激活为什么网络做深以后不是变强而是先崩掉。理解了这两件事你再看任何带残差结构的网络都能在脑子里自动补出一条反向传播的梯度路径而不是把 ResNet 当成一个需要死记的黑匣子。2. CNN 特征提取机制卷积、激活、池化是怎么一步步“看懂”图像的2.1 卷积层参数共享让“特征提取”从玄学变成规则计算卷积层做的事情本质上是“用一组小滤波器在整张图上做滑动内积”。一张彩色手语符号图进入网络时是 (3, 64, 64) 的三维数组高度 64、宽度 64、通道数 3。每个卷积核覆盖一个局部窗口比如 3×3它一次只看 9 个像素然后在整张图上按步长滑动把每个位置的局部特征都扫一遍。输出还是一张二维图这张图上每个位置的值就代表“这个局部区域和滤波器模式的相似程度”。真正让 CNN 高效的不是卷积本身而是它的两个约束局部连接和参数共享。局部连接意味着某个输出像素只受输入局部区域影响参数共享意味着同一个滤波器在图上所有位置用的是同一组权重。这个设计带来两个收益一是参数量从全连接的“输入尺寸×输出尺寸”变成“核大小×输入通道×输出通道”以 64×64×3 的输入、8 个滤波器为例全连接光一层就有 10 万 参数卷积层只有 3×3×3×8216 个参数二是它天然贴合图像的平移不变性——同一个边缘特征在图的左上角和右下角应该由同一组权重识别出来。这里还有一个必须会算的公式输出尺寸 (输入尺寸 - kernel_size 2×padding) / stride 1。比如 64×64 输入3×3 核stride1padding1输出还是 64×64如果用 stride2输出变成 32×32。项目里第一周的简易 CNN第一层选 3×3padding1就是为了让前两层卷积保持特征图尺寸不变只在池化层做降采样。很多维度报错根源都是这个公式没算明白。2.2 激活函数没有非线性堆再多层也是线性变换卷积只是线性运算两个卷积层叠在一起数学上等价于一个卷积。要让网络表达能力真正变强必须在层与层之间插入非线性激活。ReLU 是现在用得最多的选择实现是 max(0, x)它的优势不只是计算快在正区间导数恒为 1不会像 sigmoid 那样在深层出现导数趋近于 0 的饱和区。批量归一化BatchNorm通常和激活层放在一起。它在每个 batch 上对输出做标准化再乘一个可学习的缩放因子和平移项。标准位置是“卷积 → BN → ReLU”。这里有个容易被忽视的细节BN 是对通道维度做归一化的它统计的是每个通道在 batch 内所有位置上的均值方差。也就是说即使上一层的输出值范围波动很大进入 ReLU 之前的值已经被拉回标准范围ReLU 的梯度不会因为输入过大而变为 0。这正是深度网络里激活层不“死”的关键。2.3 池化层降采样不是为了省显存是为了扩大感受野最大池化把 2×2 窗口里的最大值挑出来步长通常等于窗口大小于是特征图直接缩小一半。很多人把池化理解为“压缩数据、省显存”这没错但真正的意义在感受野池化之后下一层卷积的一个 3×3 窗口看到的区域对应到原图就是更大的范围网络因此能逐层从局部纹理走向全局结构。池化也带来一定的不变性最大池化只关心窗口内有没有出现强响应不关心精确位置。对手语符号识别来说一个手势稍微平移几个像素池化层会让后续层对这个小偏移不敏感。平均池化则更保守保留窗口内的整体能量。项目代码里用的是最大池化因为手势的边缘和轮廓是强特征“有还是没有”比“分布得均不均匀”更重要。2.4 全连接层把特征图压平成分类分数经过若干轮卷积、激活、池化之后特征图还是多通道的二维数组。全连接层第一步是展平把 (C, H, W) 拉成一维向量然后和权重矩阵相乘输出每个类别的得分。源码里这行 x.view(x.size(0), -1) 就是把 batch 里每个样本的所有通道像素串起来-1 表示由 PyTorch 自动推断展平后的长度比如 16 个通道的 16×16 特征图展平后就是 4096 维。把整个网络拆成角色分工来理解会更清楚卷积层负责找“有没有某种特征”池化层负责告诉后续层“这个特征大致在哪片区域”全连接层负责把特征组合成最终的分类决策。这也是为什么 CNN 中间层的通道数往往逐层翻倍——空间分辨率降一半就用通道数把信息量补回来避免在前向传播中把图像细节白白丢掉。2.5 一个能跑的简易 CNN把机制落到代码把上面的机制串成完整模型代码并不长import torch.nn as nn class SimpleCNN(nn.Module): def __init__(self, num_classes6): super(SimpleCNN, self).__init__() # 输入形状: (batch, 3, 64, 64) self.conv1 nn.Conv2d(3, 8, kernel_size3, stride1, padding1) self.bn1 nn.BatchNorm2d(8) self.relu1 nn.ReLU() self.pool1 nn.MaxPool2d(2) # - (batch, 8, 32, 32) self.conv2 nn.Conv2d(8, 16, kernel_size3, stride1, padding1) self.bn2 nn.BatchNorm2d(16) self.relu2 nn.ReLU() self.pool2 nn.MaxPool2d(2) # - (batch, 16, 16, 16) self.fc nn.Linear(16 * 16 * 16, num_classes) def forward(self, x): x self.pool1(self.relu1(self.bn1(self.conv1(x)))) x self.pool2(self.relu2(self.bn2(self.conv2(x)))) x x.view(x.size(0), -1) # (batch, 4096) x self.fc(x) # (batch, num_classes) return x参数说明第一层只有 8 个滤波器输出 8 个通道每个通道是一张“激活图”代表一类简单特征第二层把通道数翻倍到 16是因为池化把空间尺寸减半后需要用更多的通道来补偿信息量。最后一层 Linear 的输入维度是 16×16×16 而不是 16×32×32就是因为两层池化各做了一次 1/2 降采样。这个网络如果直接跑还需要两个配套动作在训练循环里用交叉熵损失优化器用 Adam 或 SGD每次迭代前要调用 model.train() 让 BN 统计当前 batch求梯度后用 optimizer.step() 更新权重。对于 6 类手语符号分类这个简化版 CNN 已经能到 80% 以上的验证精度瓶颈不在深度而在数据增强和超参数上。3. 残差网络跳跃连接为什么能救回梯度3.1 梯度消失的成因链式法则里的连乘先回答一个最基本的问题为什么网络变深训练就崩。反向传播计算损失对第 l 层参数的梯度时要沿计算图从输出一路乘回这一层。每一层都贡献一个因子——权重矩阵的转置乘以激活函数的导数。如果每个因子的谱范数小于 1几十层连乘下来梯度就指数级缩水。数值上更好感知假设每层梯度缩放系数是 0.5网络 20 层时梯度缩水到原始值的 2^-20约百万分之一。这个量级下靠近输入层的卷积核几乎收不到有效更新信号整个浅层部分变成随机初始化状态。手写数字那种简单任务还能靠运气手语符号这种带背景噪声的高维输入浅层不更新意味着模型只能学到“蒙对”的规律。这就是很多人在第一周 CNN 上跑得好好的第二周换成 18 层 ResNet 反而 Loss 不降的根源。3.2 残差块的数学本质学习残差而不是完整映射残差块的思路是把一个子网络的输出从“拟合目标 H(x)”改成“拟合目标残差 H(x) - x”然后通过跳跃连接把输入 x 直接加到输出上。用公式表达普通层y F(x)残差层y F(x) x其中 F(x) 是两个卷积加激活组成的子网络。为什么这能救梯度看反向传播。y 对 x 的偏导是 ∂F/∂x I这里的 I 来自恒等项 x。即使 F 那部分梯度在深层被连乘压得很小恒等项 I 依然保证梯度有一个稳定的“旁路”可以直接传回浅层。这条旁路不经过任何权重矩阵所以不会被缩放。另一个角度同样关键让子网络去拟合“残差”本身比拟合“完整映射”更容易。网络输入输出相似度很高时F(x) 学到的最优解接近零映射而普通层的权重必须在深层里把单位变换和特征变换一起学出来。训练早期残差块里 F(x) 输出接近 0整体近似恒等层网络基本不退化随着训练推进F(x) 再逐步从零出发学出具体特征。3.3 残差块的实现细节BN 放哪、短接怎么搭PyTorch 里实现一个 BasicBlock 并不复杂但顺序有讲究import torch.nn as nn class BasicBlock(nn.Module): def __init__(self, in_channels, out_channels, stride1, downsampleNone): super(BasicBlock, self).__init__() # 第一个卷积可能做降采样控制空间尺寸和通道数 self.conv1 nn.Conv2d(in_channels, out_channels, 3, stride, 1, biasFalse) self.bn1 nn.BatchNorm2d(out_channels) self.relu nn.ReLU(inplaceTrue) self.conv2 nn.Conv2d(out_channels, out_channels, 3, 1, 1, biasFalse) self.bn2 nn.BatchNorm2d(out_channels) self.downsample downsample # 1x1 卷积用来对齐维度 def forward(self, x): identity x out self.conv1(x) out self.bn1(out) out self.relu(out) out self.conv2(out) out self.bn2(out) if self.downsample is not None: identity self.downsample(x) out identity # 跳跃连接的加法 out self.relu(out) return out逻辑说明conv1 的 stride 参数是关键当 stride2 时特征图尺寸减半此时 identity 和 out 的形状对不上不能直接相加必须用 downsample 分支把 x 也变换到同尺寸。这个分支通常是一个 kernel_size1 的卷积只改变通道数和空间尺寸不提取额外特征。biasFalse 是因为后面紧跟 BNBN 的平移项已经承担了偏置的作用再加偏置会造成冗余。一个争论点是 ReLU 放在加法前还是加法后。上面的实现是第一段 ReLU 在卷积之间最后做完 add 再补一个 ReLU。这保证了残差块整体输出是激活后的非负值。如果你把最后一个 ReLU 去掉让跳跃连接直接加在 BN 之后训练初期梯度会更通畅但要手动保证后续层对负输入不过敏。项目源码采用标准写法add 之后再激活和原始实现一致稳定且容易对照。3.4 从 BasicBlock 到 ResNet18stage 怎么拼ResNet 不是把一堆 BasicBlock 平铺而是按 stage 分组。每个 stage 里的第一个 block 负责降采样后面的 block 保持尺寸。以 ResNet18 为例常用的结构是初始一个 3×3 或 7×7 卷积做快速下采样然后是四个 stage分别堆叠 2、2、2、2 个 BasicBlock。通道数在 stage 之间翻倍64 → 128 → 256 → 512。stage作用block 数量输出通道关键操作输入层快速下采样1 个卷积64stride 2stage1浅层纹理2 个 block64保持尺寸stage2中层形状2 个 block128首次降采样stage3深层部件2 个 block256再次降采样stage4全局语义2 个 block512最后降采样每个 stage 的第一个 blockin_channels 和 out_channels 不同还带着 stride2所以必须构造 downsample。后面的 block 输入输出通道一致、尺寸一致shortcut 直接原样相加即可。这种分组设计不是随意的它让网络在最初步就丢掉大量空间冗余然后在低分辨率高通道数的空间里做深层语义建模计算量被控制在合理范围。3.5 对比信号普通 CNN 和 ResNet 在 18 层时的差异项目第二周的数据集是 train_happy.h5二分类任务简单。如果你把第 2 章那个 SimpleCNN 强行加到 18 层会发现验证 Loss 在几个 epoch 后反而比 8 层版本差换成 BasicBlock 堆叠的 ResNet18同样的层数却能稳定收敛。这个对比是设计取舍最直观的证明。要注意的是梯度消失不是深度网络的唯一敌人。特征复用能力同样重要ResNet 的跳跃连接允许后层直接拿到前层特征相当于给了网络一条“记忆通道”。这对小数据集特别友好因为浅层学到的边缘、颜色特征不会被深层重新学一遍而是直接复用。4. 从零搭建 CNN 和 ResNet避坑记录4.1 现象Loss 前几个 epoch 纹丝不动之后突然下降原因网络初始化和 BN 统计数据都还没稳定。深层 CNN 在早期有一个“冷启动”阶段如果用了过大的学习率BN 统计的均值和方差被少数样本带偏梯度方向完全被噪声覆盖。更隐蔽的情况是激活层饱和某些初始化方式会让输入进 ReLU 前全是负数梯度恒为 0整个分支不学习。解决先用小学习率预热比如 1e-3 跑 5 个 epoch再把学习率提高到 1e-2 或按训练计划调整如果预热后 Loss 仍不动检查权重初始化卷积层用 kaiming 均匀分布不要用默认正态分布。手语符号数据集里存在大量相似背景第一轮预热本质上是让 BN 统计先稳定。4.2 现象forward 里报尺寸不匹配或者加法时形状对不上原因跳跃连接最常见的翻车点。第一个残差块的输入是上一 stage 的输出通道数是 64而当前 block 的输出是 128stride 又让空间尺寸减半identity 没有做任何变换就直接相加。解决把每层输出尺寸写在注释里每次改通道数就重算一次公式。checkpoint 的方式是把 input 的尺寸 print 出来然后在 downsample 构造处打印变换后的尺寸确认两者完全一致。一个偷懒但可靠的办法downsample 统一用 kernel1、stride 与主分支相同、输出通道等于 out_channels 的卷积再在后面加一个 BN。这个 1×1 分支不会改变特征语义只负责维度对齐。4.3 现象训练精度高、验证精度突然崩掉或者 BatchNorm 统计错误原因训练时 BN 用 batch 内的实时均值和方差切到评估模式后应该用训练阶段累计的全局统计。如果只在训练循环里调了 model.train()但验证时忘了 model.eval()BN 会继续用当前 batch 做归一化小 batch 的波动直接传导到输出验证结果就忽高忽低。这属于“代码能跑但语义错了”的静默 bug非常容易漏。解决训练和验证脚本里分别显式调用 model.train() 和 model.eval()。如果用了 dropout这也是同样的纪律。养成习惯后在验证前打印一下 model.training 状态一秒钟确认能省掉一晚上的血压波动。4.4 现象H5 数据集加载后形状对不上或者精度一直低于预期原因H5 文件里的图像数组可能是通道在前(batch, 3, 64, 64)也可能是通道在后(batch, 64, 64, 3)。项目里的 cnn_utils.py 和 resnets_utils.py 各自封装了不同的加载逻辑如果拿第一周的工具去跑第二周的数据很可能出现 channel 顺序颠倒模型把 RGB 当成了 depth。解决加载后立刻打印一次 x.shape 和 x.max()、x.min()确认数据值域在 0 到 1 还是 0 到 255。统一的预处理是转成 float、除以 255 归一化到 [0,1]、转为 (batch, channel, height, width) 张量。图像任务里这类“数据管道 bug”造成的精度损失常常被误判为模型能力不足先把数据检查做在前再开始调网络结构。4.5 现象网络加深后显存爆炸训练直接 OOM原因ResNet 的每个 residual block 在跳连之前b 分支的激活值都要在显存中保留用于反向传播。批量大小、特征图尺寸和 block 数量三者乘积决定了显存占用初学者只盯着参数量忽略了“激活值”才是显存大头。解决显存不够时优先减 batch size而不是把网络改小如果必须维持 batch size用更小的输入分辨率或者把某些 stage 的通道数减半。混合精度训练是另一个思路但不建议在刚学会搭建时引入它会掩盖数值问题。先让网络在小 batch 上能跑通再逐步往上涨资源。5. 设计取舍残差不是越多越好深度要学会收着用残差连接确实解决了梯度消失但它不是免费的。每多一个残差块就多两条计算路径和一个加法节点前向计算和反向传播的显存占用都会涨。同样是 128 通道、32×32 的特征图一个 BasicBlock 的一次前向就要保存三份中间激活主分支两层卷积的输出、BN 的输出、加上 identity 的原始输入。层数翻倍这个开销跟着线性增长。所以设计取舍的第一个原则是深度要匹配数据量。对于只有几千张图的二分类任务ResNet18 和 ResNet34 的差距几乎不会被验证精度体现出来反而越深的模型越容易过拟合。第二个原则是残差块的数量要放在“真正扩大感受野”的位置而不是均匀堆叠。在特征图尺寸发生变化的 stage 交界处残差连接带来的收益最大在一个已经足够深、感受野已经覆盖全图的模块里继续加 block边际收益会迅速衰减。验证方法很朴素固定同一个数据集和同样的超参分别把第 2 章的 SimpleCNN 改成 8 层、18 层再和 BasicBlock 版本对比训练曲线。如果 18 层普通 CNN 的验证精度低于 8 层版本而同样的 18 层残差版本能稳定上升那你就亲手复现了残差机制的全部价值。从那以后我每次搭网络都强制自己先走一遍这个流程写尺寸注释、确认 BN 模式、打印数据形状、最后才调深度。这套习惯救了我很多次希望帮到你。如果你想省掉踩坑时间这份包含两个阶段源码和训练数据集的 Python 项目正好能让你把每一步机制都对着真实代码验证一遍。本文还有配套的精品资源点击获取

相关新闻

毕业论文AIGC检测率过高?一文讲透降AI工具原理与实测选型

毕业论文AIGC检测率过高?一文讲透降AI工具原理与实测选型

每年毕业季,我都能收到一堆来自本科生的私信,内容高度相似:老师,论文已经写完,AIGC检测率从35%降到18%,用什么工具能再压到10%以下?字里行间全是焦虑。到了2026年,高校对AIGC自动检测…

2026/10/19 6:06:39 阅读更多 →
大模型八股文:九大核心知识体系与工程实践全解析

大模型八股文:九大核心知识体系与工程实践全解析

“大模型八股文”这个词,前前后后在同行群里传了三四年,从最初调侃性质的学习提纲,慢慢变成了很多团队内部复盘知识体系的默认工具。我最早接触时也觉得“八股文”三个字带着点死记硬背的味道,直到自己真正把资料整理成体系&#…

2026/10/19 6:06:39 阅读更多 →
微博舆情分析系统:爬虫+情感分析+热词图谱全栈实现

微博舆情分析系统:爬虫+情感分析+热词图谱全栈实现

简介:本资源是一套面向计算机专业本科生的毕业设计级微博舆情分析系统实现方案,聚焦社交媒体数据采集、情感分析与可视化呈现,适用于课程设计、毕设选题参考及Python全栈开发实践。压缩包共49个文件,含6个核心Python脚本&#xff…

2026/10/19 6:06:39 阅读更多 →

最新新闻

Dify工作流实现双模型分栏流式对比:从原理到实践

Dify工作流实现双模型分栏流式对比:从原理到实践

最开始我对比两个模型的回答质量,用的还是最笨的办法:开两个浏览器标签页,把同一个问题分别粘进去,再左右来回切。遇到长回答还得自己对对齐位置,效率低到让人怀疑人生。直到我把这套动作搬进 Dify,用可视化…

2026/10/19 6:51:01 阅读更多 →
击剑赛事编排引擎:离线优先、规则可配置的本地化工具

击剑赛事编排引擎:离线优先、规则可配置的本地化工具

简介:Engarde816是一款面向击剑赛事组织者、裁判团队及体育信息化管理者的专业编排软件,专为解决中小型至大型击剑比赛中的分组抽签、赛制设定(单/双败淘汰、循环赛)、对阵生成、实时成绩追踪与多场地日程协同等核心难题而设计。资…

2026/10/19 6:51:01 阅读更多 →
TaskExplorer 完整指南:跨平台深度进程监控工具

TaskExplorer 完整指南:跨平台深度进程监控工具

TaskExplorer 完整指南:跨平台深度进程监控工具 【免费下载链接】TaskExplorer Power full Task Manager for Windows and Linux 项目地址: https://gitcode.com/GitHub_Trending/ta/TaskExplorer TaskExplorer 是一款功能强大的跨平台任务管理器&#xff0c…

2026/10/19 6:51:01 阅读更多 →
DeepSeek-V4-Flash-Vision-Exp-MLX生产部署指南:OpenAI兼容API与本地服务搭建

DeepSeek-V4-Flash-Vision-Exp-MLX生产部署指南:OpenAI兼容API与本地服务搭建

【免费下载链接】DeepSeek-V4-Flash-Vision-Exp-MLX 项目地址: https://ai.gitcode.com/hf_mirrors/mlx-community/DeepSeek-V4-Flash-Vision-Exp-MLX 点击查看 免费下载 DeepSeek-V4-Flash-Vision-Exp-MLX 是 DeepSeek V4 系列的实验性多模态模型(支持…

2026/10/19 6:51:01 阅读更多 →
VideoMamba开发者指南:如何将它作为Backbone无缝替换ViT接入你的视频项目

VideoMamba开发者指南:如何将它作为Backbone无缝替换ViT接入你的视频项目

【免费下载链接】VideoMamba 项目地址: https://ai.gitcode.com/OpenGVLab/VideoMamba 点击查看 免费下载 VideoMamba 是一个基于双向状态空间模型(Bidirectional SSM)的轻量级视频理解模型,由 OpenGVLab 开发,核心定…

2026/10/19 6:51:01 阅读更多 →
LTX-2 在 ComfyUI 中如何落地:ComfyUI-LTXVideo 节点安装、首跑与显存配置指南

LTX-2 在 ComfyUI 中如何落地:ComfyUI-LTXVideo 节点安装、首跑与显存配置指南

LTX-2 在 ComfyUI 中如何落地:ComfyUI-LTXVideo 节点安装、首跑与显存配置指南 【免费下载链接】ComfyUI-LTXVideo LTX-Video Support for ComfyUI 项目地址: https://gitcode.com/GitHub_Trending/co/ComfyUI-LTXVideo 本文面向刚接触 AI 视频生成的读者&am…

2026/10/19 6:50:01 阅读更多 →

日新闻

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

频率跟踪型PWM电源设计:臭氧发生器谐振点漂移与软开关实现

简介:本资源为电源技术方向的学术研究文档,聚焦介质阻挡放电型臭氧发生器电源的频率跟踪型PWM控制策略,面向电力电子、高压电源及臭氧应用领域的科研人员与工程技术人员。针对负载呈容性、等效电容随外加电压升高而增大、谐振频率随之漂移的难…

2026/10/19 0:00:47 阅读更多 →
Vibe Coding 遇上 TaoToken:把开发者思维圣殿的灵感流接入统一 Key 通道

Vibe Coding 遇上 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/19 0:00:47 阅读更多 →
HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

HundredCV-Chat话题建模实战教程:利用4,871个内置话题标签构建主题分析系统

【免费下载链接】HundredCV-Chat 项目地址: https://ai.gitcode.com/hf_mirrors/Jax-dan/HundredCV-Chat 点击查看 免费下载 HundredCV-Chat 是一个由 100 位青年简历数据开发而来的中文多轮对话数据集,共包含 24,750 组日常闲聊对话和 4,871 个话题标签…

2026/10/19 0:00:47 阅读更多 →

周新闻

基于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/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 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/19 2:54:50 阅读更多 →
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/18 12:16:16 阅读更多 →