尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
基于MATLAB与CNN的地震等级预测:时频图构建与训练避坑指南
简介基于MATLAB编程的卷积神经网络CNN地震等级预测项目面向深度学习入门者、地震信号分析研究者及需要将CNN应用于时序数据的MATLAB用户完整呈现从数据预处理、网络构建、训练到预测的流程借助卷积层、池化层、全连接层等结构自动提取地震信号特征便于理解CNN原理并迁移到类似分类任务。包内共33个文件以30个m脚本为核心涵盖网络初始化、前向传播、反向传播、数值梯度校验、超参数组合生成等模块另有2个mat文件保存网络与数据、1个xlsx存放地震数据表整体约370KB轻便易用目前已有351人学习参考。通过这份资源读者可掌握在MATLAB中搭建CNN的完整思路学习数据标准化、时频分析、模型调参与结果可视化等关键环节也可直接复现实验或替换自己的数据集进行训练为地震等级预测及深度学习实践提供高性价比的参考模板。1. 地震等级预测为什么值得用 CNN 来做先把输入和标签定义清楚地震等级预测是地震预警里最要命的环节。P 波先到台站S 波还在路上系统手里只有几个台站的几秒波形却要回答“这次最终是 4 级还是 6 级”。传统能力靠 P 波幅值套经验公式近场大震经常被低估小震又容易高估。卷积神经网络 CNN 的直接优势是自动从波形里挖震级指纹不依赖人工设计的幅值函数这正是 MATLAB 能派上用场的地方不用切到 Python 环境Deep Learning Toolbox 从数据拆分到 trainNetwork 都是一套语法。下面按我实际跑通的技术路线把波形切分、时频图生成、CNN 搭网、训练调参、翻车点排查以及把分类换成回归后的时效验证一步步拆开写。适合有 MATLAB 基础、想用深度学习解决地球物理问题的工程师和研究生。2. 数据准备把地震波形切分、打标签构造 CNN 需要的训练矩阵2.1 原始地震记录长什么样一维时程与最常见的预处理地震台站记录到的是连续波形一个事件往往被多个台站同时记到。做等级预测先从连续记录里截出事件段常见格式是文本或 SAC 文件至少包含东向、北向、垂直向三个分量采样率常见 100 Hz 或 200 Hz。你可以把一个样本理解成“某个台站从 P 波到时开始、往后 N 秒的三分量波形”标签是该事件最终震级。一个事件产生几十上百个样本因为它们来自不同台站、不同方位角波形差异很大这对 CNN 反而是好事等于天然做了数据增强。原始波形不能直接进网络我一般先做三件事。去均值把每个分量的直流偏置去掉否则台站零点漂移会变成网络要学习的假特征。去趋势强震记录有时带长周期倾斜用 detrend 处理掉。分量幅度归一化地震记录动态范围很大从 0.1 gal 到 1000 gal 都可能不归一化会让损失函数被大振幅样本主宰。还有一件事必须早期确定标签分档粒度。震级可以按 0.1 分但对地震预警来说没有工程意义类别还非常多。常见做法是按 0.5 或 1.0 分档比如 3.0–3.9、4.0–4.9、5.0–5.9、6.0–6.9。分档太粗区分度不够太细样本数扛不住。先把数据结构和标签语义定清楚再去想网络结构。2.2 用短时傅里叶转成时频图喂给二维 CNN 的理由与代码CNN 最成熟的形态是二维卷积输入是图像。把时间序列送进二维网络之前常见做法是短时傅里叶变换得到时频图。为什么这么做时频图同时保留频率内容与时间演化震级差异在这种表示下更直观大震在低频段能量更强持续时间也更长。直接用原始波形做一维卷积完全可行但二维输入能直接复用图像领域成熟的网络构造经验可视化也更好——你看到的是“图”而不是一段波形数组。下面是单个三分量样本转时频图的 MATLAB 代码。这里取 4 秒窗口采样率 100 Hz所以输入是 3×400 的矩阵输出是 128×128×3 的一张“图”。function img wave2spec(x, fs) % x: 3 x T 的三分量波形段 % 返回 128 x 128 x 3 的时频图 for ch 1:3 % 256 点汉宁窗重叠 192 点FFT 点数 256 [s, ~, ~] spectrogram(x(ch,:), hann(256), 192, 256, fs); spec db(s); spec max(spec, -80); % 低于 -80 dB 的能量当成噪声 spec (spec 80) / 80; % 线性缩放到 0~1 img(:,:,ch) imresize(spec, [128, 128]); end endspectrogram 来自信号处理工具箱hann(256) 是窗函数192 是相邻窗之间的重叠采样点数重叠越多时间分辨率越高但计算量也更大。db 把幅度谱转成 dB因为原始谱幅度跨几个量级网络很难学。max(spec, -80) 相当于把动态范围截断最后线性缩放成 0~1正好符合 imageInputLayer 对输入范围的偏好。imresize 统一成 128×128保证所有样本尺寸一致这是 CNN 的基本要求。如果数据里有明显的 50 Hz 工频干扰我一般会在 spectrogram 之前先对原始波形做 0.5–40 Hz 的带通滤波否则时频图上会多出一条贯穿全图的亮线CNN 很容易被这条线带偏。2.3 训练集/验证集划分与归一化先写一个数据预处理脚本把切窗和转图组合起来就是一个完整的预处理脚本。下面这个循环遍历事件目录对每个事件每个台站生成一个样本标签取该事件最终震级分档。fs 100; winLen 4; % 4 秒窗口 for k 1:height(catalog) raw readmatrix(catalog.file{k}); % [time, ns, ew, vertical] x extract_window(raw, fs, catalog.tt_p(k), winLen); XTrain{k} wave2spec(x, fs); % 1 个样本128x128x3 labels{k} catalog.magClass(k); % 先存 cell最后统一 categorical end YTrain categorical(labels);extract_window 函数负责切窗和预处理。切窗起点是 P 波到时代码如下。function seg extract_window(data, fs, tt_p, winLen) idx0 round(tt_p * fs) 1; idx1 idx0 round(winLen * fs) - 1; if idx1 size(data,1) idx1 size(data,1); end seg data(idx0:idx1, 2:4); % 取三分量 pre data(max(1, idx0-100):idx0-1, 2:4); % P 波前噪声段 seg seg - mean(pre, 1); % 只用噪声段估计去均值 seg seg ./ (std(pre, 0, 1) 1e-6); % 按噪声段标准差归一化 end这里和 2.1 节说的去均值/归一化略有不同不是拿整段波形算统计量而是拿 P 波之前 100 个采样点做噪声背景估计。这样做的原因后面避坑章会展开如果用整段波形算均值标准差等于把未来信息泄露给了网络测试时会得到一个虚假的漂亮结果。这里先用这种因果化的处理保证样本生成只依赖过去。数据集划分这一环我建议按事件划分而不是按样本划分。同一事件的多个台站波形高度相关如果一部分进训练集一部分进测试集网络在测试时相当于见过同一事件的其他台站形态指标会虚高。最简单的实现是先把事件 ID 取唯一值再按事件抽测试集。uniqueEvents unique(catalog.event_id); testEvents datasample(uniqueEvents, round(0.2*numel(uniqueEvents)), Replace, false); isTest ismember(catalog.event_id, testEvents); XTrain XTrain(~isTest); YTrain YTrain(~isTest); XTest XTrain(isTest); YTest YTrain(isTest);注意这里按事件划分而不是按样本划分是避免数据泄漏的关键一步。这段代码按 20% 事件做留出验证。XTrain 是 cell 数组每个元素是 128×128×3YTrain 是 categorical 数组。如果样本量巨大后续可以用 datastore 方式读取避免一次全部载入内存这个坑在第 5 章单独讲。3. 搭建 CNN用 Deep Learning Toolbox 定义网络与训练选项3.1 选一维卷积还是二维卷积两种输入各自的取舍输入可以是原始波形也可以是时频图于是就有了两条路线。一维 CNN 直接用 sequenceInputLayer或把 imageInputLayer 的尺寸设为 [1, T, 3]卷积只在时间方向滑动。优点是没有时频变换这一步实时性最好端侧推理也最简单。缺点是对基线漂移、噪声更敏感特征可视化不如二维直观。二维 CNN 吃的是时频图卷积在时间和频率两个方向同时滑动能利用图像上的局部相关性但多了一步 spectrogram实时性稍差——一次短时傅里叶在 MATLAB 里只有几十毫秒相对预警系统的秒级预算可以忽略。做学术实验我优先推荐二维 CNN因为好调、好解释、好出图部署到嵌入式预警终端则一维 CNN 更现实。下面按二维输入写因为第 2 章已经生成了 128×128×3 的时频图。3.2 用 convolution2dLayer 搭建分类网络关键层参数说明以 5 档震级分类为例下面这个网络是我在项目里常用的起点结构。它不算深因为地震样本量通常不像图像分类那么大深网络在小数据集上容易过拟合。numClasses 5; inputSize [128 128 3]; layers [ imageInputLayer(inputSize, Normalization, none) convolution2dLayer(3, 8, Padding, same, Name, conv1) batchNormalizationLayer reluLayer maxPooling2dLayer(2, Stride, 2) convolution2dLayer(3, 16, Padding, same, Name, conv2) batchNormalizationLayer reluLayer maxPooling2dLayer(2, Stride, 2) convolution2dLayer(3, 32, Padding, same, Name, conv3) batchNormalizationLayer reluLayer maxPooling2dLayer(2, Stride, 2) fullyConnectedLayer(64) reluLayer dropoutLayer(0.5) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer ];参数选型的思路卷积核个数从 8 起步每层翻倍到 32参数总量可控。卷积核用 3×3两次 3×3 的感受野相当于一次 5×5但参数量更小。maxPooling2dLayer(2, Stride, 2) 把特征图边长减半128 经过三层池化变成 16×16再加全连接层参数量足够小。batchNormalizationLayer 在地震数据上几乎是必需品因为不同台站增益差异大BN 能抑制这种差异带来的协变量偏移。dropoutLayer(0.5) 加在全连接之前防止它把前面提取的特征“背下来”。各层输出尺寸如下表训练前可以先用 analyzeNetwork 检查一遍输入输出维度对不对一次就知道。层名类型输出尺寸可调参数inputimageInputLayer128×128×3Normalizationconv1convolution2dLayer128×128×8FilterSize 3, NumFilters 8pool1maxPooling2dLayer64×64×8PoolSize 2, Stride 2conv2convolution2dLayer64×64×16FilterSize 3, NumFilters 16pool2maxPooling2dLayer32×32×16PoolSize 2, Stride 2conv3convolution2dLayer32×32×32FilterSize 3, NumFilters 32pool3maxPooling2dLayer16×16×32PoolSize 2, Stride 2fcfullyConnectedLayer64OutputSize 64dropoutdropoutLayer64DropoutFactor 0.5outputclassificationLayer5Classes 自动来自 YTrain有一个容易踩的细节imageInputLayer 默认会做零中心归一化如果时频图已经缩放到 0~1再默认归一化相当于又做了一次偏移所以我这里显式设置 Normalization 为 none。训练时 MATLAB 会根据 YTrain 的类别顺序自动配置 classificationLayer 的 Classes不需要手动写。3.3 trainNetwork 之前的训练选项4 个最值得调的参数网络定义好只是开始trainingOptions 里的参数才是真正决定能不能收敛的地方。我每次必调的是这四个。options trainingOptions(adam, ... MiniBatchSize, 16, ... MaxEpochs, 40, ... InitialLearnRate, 1e-3, ... LearnRateSchedule, piecewise, ... LearnRateDropFactor, 0.5, ... LearnRateDropPeriod, 10, ... ValidationData, {XVal, YVal}, ... ValidationFrequency, 50, ... Shuffle, every-epoch, ... Plots, training-progress, ... OutputNetwork, best-validation); net trainNetwork(XTrain, YTrain, lgraph, options);MiniBatchSize 16样本量不大时用小批量梯度噪声大一点反而能从不好的局部极值里跳出来显存小的机器也友好。MaxEpochs 40 配合早停够用。InitialLearnRate 1e-3 是 Adam 的常用起点如果 Loss 一开始就 NaN就降到 3e-4 重试。LearnRateSchedule 设成 piecewise每 10 个 epoch 学习率乘 0.5让 Loss 在训练后期继续下降的常规手段。ValidationData 和 ValidationFrequency 用来边训练边看验证集表现。ValidationFrequency 建议按迭代次数而不是 epoch 设小数据集上一个 epoch 可能只有几十次迭代按 epoch 设会太稀疏。OutputNetwork 设成 best-validation 会保留验证集表现最好的那版权重而不是最后一个 epoch 的权重对早停之后的模型特别重要。Shuffle every-epoch 保证每个 epoch 的批组合不同模型不会记住批顺序。4. 调参与验证让 Loss 降下去用混淆矩阵看真实水平4.1 过拟合识别与常规组合降低容量、加 dropout、早停我见过最多的翻车场景是训练 Loss 一路走低验证 Loss 先降后升画出来的曲线像一只鸟嘴。这时候模型已经进入过拟合区域但新手往往还会继续拉长 epoch以折腾训练 Loss 为乐。判断标准很简单训练准确率接近 100%验证准确率不再涨或者验证 Loss 比上一轮明显升高就要停止并往回退参数。处理组合我按顺序试。先看网络容量是不是太大——把通道数从 32/64 降到 8/16把全连接层从 128 降到 64参数量立刻小一个量级。再看 dropout全连接前 0.5 不够时加到 0.6。最后才动正则和早停。trainingOptions 里 L2Regularization 一般设 1e-4配合 ValidationPatience 使用patience 设成 8 的含义是连续 8 次验证没有改善就停。options.L2Regularization 1e-4; options.ValidationPatience 8;经验之谈L2 正则和 dropout 不要同时往猛了加。两个正则手段同时拉满模型会走到另一个极端——欠拟合训练 Loss 也降不下去。我通常固定 dropout0.5只调 L2调不动再去动 dropout尽量不让两个变量同时变化。4.2 混淆矩阵与分类指标不要只看训练准确率训练结束后trainNetwork 打印的 accuracy 是训练集上的真实水平要看测试集混淆矩阵。用 classify 先预测再画图。YPred classify(net, XTest); cm confusionchart(YTest, YPred); cm.Normalization row-normalized; cm.RowSummary total-normalized; cm.ColumnSummary total-normalized;Normalization 设成 row-normalized每一行显示真实震级档位的召回率对角线是“这一档有多少比例被认对”。RowSummary 显示每行合计百分比ColumnSummary 显示每列的精确率这两栏能一眼看到模型在哪个档位崩溃。地震震级预测有个特殊之处预测偏一档可以接受偏两档以上才是灾难。把 4.5 级预测成 5.5 级预警阈值会被错误抬高把 6.5 级预测成 5.5 级则可能漏报。所以看混淆矩阵时我重点看对角线附近 ±1 档的总占比而不只是精确的对角线值。如果模型把相邻档位来回混那是震级特征本身重叠加深网络很难解决如果出现远隔两档的预测往往是样本不平衡或数据泄漏要回去查数据。除了画图用 confusionmat 拿数字指标更直接。C confusionmat(YTest, YPred); recall diag(C) ./ sum(C, 2); precision diag(C) ./ sum(C, 1); for i 1:numel(recall) fprintf(档位%d: 召回率 %.2f, 精确率 %.2f\n, i, recall(i), precision(i)); end4.3 学习率和批大小怎么配从 NaN Loss 到正常收敛的调节顺序调学习率最容易上头的就是反复改 InitialLearnRate其实大多数时候问题不在数值而在组合。我给自己定过顺序先调学习率再调批大小最后才碰网络结构。第一步看训练前 50 次迭代的曲线。Loss 一开始就 NaN几乎可以断定学习率过大直接降一个数量级到 1e-4 或 3e-4。Loss 一直平缓但偏高比如总在 1.5 附近不动说明学习率太小先回到 1e-3 再看。第二步调批大小MiniBatchSize 增大时梯度更稳但太大容易进不了最优区域减小批大小相当于给梯度加噪声常能带来更好的泛化。小数据集上优先试 16不行再试 8 或 32不要一上来就 128。第三步才回头改网络结构和数据。加了 batchNormalizationLayer 后学习率可以稍微放开一点BN 能让每一层输入的分布不那么扭曲对学习率变化更有耐受力这是我在第 3 章坚持加 BN 的原因。最后一步是纪律每次调参只动一个变量同一组参数跑完再看曲线而不是一次改五个选项然后怪网络收敛不了。深度学习训练里有一半问题靠“固定其他变量”这个习惯避免。5. 避坑指南地震预测 CNN 最容易翻车的 5 个问题5.1 数据泄漏同一事件的记录不能同时出现在训练和测试里现象训练时验证准确率奇高比如 0.95但部署到新地震事件上准确率掉到 0.6 以下。原因把同一事件不同台站的样本随意打乱划分一部分进训练集一部分进测试集。某个台站记录进了训练集另一个台站记录进了测试集但它们的波形都来自同一次地震时频图高度相关。网络学到的是“这次地震长什么样”而不是“这个震级的波形特征”。解决按事件 ID 分组划分保证同一个事件的样本要么全在训练集要么全在验证或测试集。第 2.3 节已经写过划分代码这里再强调用 datasample 是在事件 ID 层面随机而不是在样本层面随机。如果事件数很少可以只分训练集和测试集验证集用训练数据内部切一部分但验证集包含的事件也不能出现在测试集里。5.2 样本不平衡小震级样本会把网络训练带偏现象混淆矩阵显示模型几乎只预测小震级档位大震级档位召回率趋近于零。训练 Loss 看上去正常但测试集大震级样本几乎全错。原因真实地震目录里小震数量远多于大震5 级以上事件本来就少。交叉熵损失被多数类主导网络只要把所有样本都判成多数类就能拿到很低的损失根本不学大震特征。解决第一选择是加权损失。训练选项里可以传 ClassWeights权重按各类别样本数的倒数再归一化。如果 MATLAB 版本不支持就改少数类过采样——把大震级样本复制几份混进训练集但复制次数不要超过原始样本的三分之一否则模型容易把同一批样本背下来。classCounts countcats(YTrain); classWeights median(classCounts) ./ classCounts; classWeights max(classWeights, 0.01); options trainingOptions(adam, ..., ClassWeights, classWeights);另一种工程做法是合并类别把 0.1 级的细分档合并成 0.5 或 1.0 级的大档使每个档位的样本数更接近。档位粗一点对预警实用影响不大但训练难度低很多。5.3 归一化泄漏对整段波形做归一化等于提前偷看了结果现象用 2 秒早期窗口也能得到 0.9 以上的测试准确率明显好得反常。原因在生成样本时对整条事件波形求均值和标准差然后用它做归一化。这个统计量包含了 P 波之后数秒甚至数分钟的振幅信息网络等于提前拿到了“未来”的尺度所以震级猜得特别准——但它学的是全局振幅不是真实早期特征。解决只在 P 波到时之前的噪声段上估计均值和标准差第 2.3 节 extract_window 里已经用 pre 段做了这件事。再强调一句归一化所用的统计量必须只依赖 t0 之前的数据否则“早期预警”在数据生成环节就不成立。我用 idx0-100 到 idx0-1 这 100 个采样点大约对应 1 秒背景噪声足够估计台站噪声水平。5.4 数据缺失与 NaN Loss断记和零通道不是网络能自己处理的现象训练跑到中途 Loss 变成 NaN网络输出权重全部失效或者某一个通道图像全黑模型对这个分量视而不见。原因台站记录存在断记、错记某些分量可能长时间为零或恒为常数。spectrogram 遇到这类数据会产生空值或者 dB 转换时出现 log(0)一路传进损失函数就变成 NaN。解决读取数据后先做完整性检查。下面这段代码在生成训练样本时把坏样本筛掉不要等到 trainNetwork 报错再回头查。seg fillmissing(seg, linear, 1); if any(std(seg, 0, 1) 1e-8) warning(分量可能无有效信号: %s, catalog.file{k}); continue; endfillmissing 按线性插值补掉零散断点但补不了长时间的整段缺数。如果某分量标准差低于阈值说明它大概率是恒零通道直接跳过这个样本比强行补数据更省心。补数据补出假样本比丢样本更危险。5.5 内存不足与授权报错大训练集和 MATLAB 环境的两个典型坑现象一训练集很大时把 X 所有样本一次性生成成 4 维数组读入阶段内存直接耗尽MATLAB 弹 Out of Memory。现象二新装的 MATLAB 在第一次执行 trainNetwork 时报 licensing error 8提示 license 与 hostid 不匹配代码一行没跑就中断。原因一128×128×3 的样本一万条就是上亿个浮点数全载入内存会挤爆。原因二授权文件绑定的硬件标识和当前机器对不上属于环境配置问题和代码逻辑无关。解决一用 datastore 或 minibatchqueue 边读边训不要一次性把所有样本压进内存。常见做法是先把每张时频图存成单独的 .mat 或图片文件再用 imageDatastore 输入trainNetwork 会在训练中分批读取内存占用基本恒定。解决二重新激活正版授权确认授权文件里的 hostid 与当前机器一致如果换了网卡或虚拟机的 MAC 地址需要重新生成授权。这类授权问题不影响算法设计但会浪费半天时间建议项目一开始就把环境跑通。6. 进阶把分类输出换成回归输出并用滑动时间窗评估预警时效6.1 把 softmax 分类层换成回归层少量改动的两种方式分类输出只能回答落在哪个档位预警系统真正想要的是“这次可能几级”。改成回归只需在网络尾部动刀移除 softmax 和分类层接一个单节点全连接层和 regressionLayer。% 先确认最后一层名称再移除分类输出 lastName lgraph.Layers(end).Name; lgraph removeLayers(lgraph, {softmax, lastName}); lgraph addLayers(lgraph, [fullyConnectedLayer(1, Name, fc_reg) regressionLayer(Name, regout)]); lgraph connectLayers(lgraph, dropout, fc_reg);回归标签是数值震级而不是 categoricalX 仍然是时频图。训练完成后用 predict 得到连续预测值评估指标从准确率换成 RMSE。6.2 用 2 秒/4 秒/10 秒窗评估时效RMSE 随窗长下降是及格线预警时效要回答的是“震后几秒能给出可信等级”。做法是对不同窗长重复生成数据并训练画出 RMSE–窗长曲线。for len [2, 4, 6, 10] [XTrain, YNum] build_data(catalog, len); netReg trainNetwork(XTrain, YNum, lgraph, optsReg); rmse(len) sqrt(mean((predict(netReg, XTest) - YTestNum).^2)); end如果 RMSE 在某一窗长之后不再明显下降说明信息已经用尽预警时效就取那个窗长如果还在降可以再加窗长试。这张曲线比单个准确率更有说服力是预警系统设计评审时最容易让听者点头的一页。我做这个方向最大的教训是一开始只做分类在 5 级附近反复横跳后来保留分类做粗筛、再用回归校正才把 RMSE 压下来。窗长评估一定要按预警时段重新做分类版本结论不能直接搬到回归版本。希望帮到你。本文还有配套的精品资源点击获取
RELATED

相关推荐

ESP32 Rust开发实战:ESP-IDF-HAL环境搭建与内存安全编程指南

ESP32 Rust开发实战:ESP-IDF-HAL环境搭建与内存安全编程指南

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

📅 2026/10/30 1:09:44
电磁兼容整改实战:从测试报告到设计源头,硬件工程师避坑指南

电磁兼容整改实战:从测试报告到设计源头,硬件工程师避坑指南

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

📅 2026/10/30 1:09:44
物联网通信与定位技术全景解析:从LoRa到UWB的选型与工程实践

物联网通信与定位技术全景解析:从LoRa到UWB的选型与工程实践

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

📅 2026/10/30 1:09:44
MORE NEWS

更多资讯

📰

RapidOCR 5分钟装好,离线跑通多语言 OCR 识别

RapidOCR 5分钟装好,离线跑通多语言 OCR 识别 【免费下载链接】RapidOCR 📄 Awesome OCR multiple programing languages toolkits based on ONNX Runtime, OpenVINO, MNN, PaddlePaddle, TensorRT and PyTorch. 项目地址: https://gitcode.com/GitHub…

📰

Blender 免费开源 3D 软件完整指南:从建模、动画到渲染

Blender 免费开源 3D 软件完整指南:从建模、动画到渲染 【免费下载链接】blender Official mirror of Blender 项目地址: https://gitcode.com/gh_mirrors/bl/blender Blender 是免费开源的一体化 3D 创作软件,覆盖建模、雕刻、绑定、动画、物理模拟、Cycles 与 EEVEE 渲…

📰

可白嫖源码---课程设计--毕业设计--springboot二次元周边售卖网站[编号:project18448](案例分析)

本文仅展示核心实现逻辑与部分代码片段,完整项目源码、配套文档、数据库脚本内容较多,篇幅有限无法全部放出。 有需要完整资源的同学,可以在评论区留言【资料或领源码】,我会一 一回复站内私信,发送完整文件 摘 要 本…

📰

用自编码器重建误差抓异常:deep-learning-with-python-notebooks 的检测基线搭法

用自编码器重建误差抓异常:deep-learning-with-python-notebooks 的检测基线搭法 【免费下载链接】deep-learning-with-python-notebooks Jupyter notebooks for the code samples of the book "Deep Learning with Python" 项目地址: https://gitcode.…

📰

TranslucentTB 透明任务栏启动失败?4步排除0x80073CF3错误的完整指南

TranslucentTB 透明任务栏启动失败?4步排除0x80073CF3错误的完整指南 【免费下载链接】TranslucentTB A lightweight utility that makes the Windows taskbar translucent/transparent. 项目地址: https://gitcode.com/gh_mirrors/tr/TranslucentTB Translu…

📰

沐曦股份联合启动“木兰AI-OpenG大模型开源开放分级测评”,共建开源繁荣生态

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

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬