深度可分离UNet:轻量级医学图像分割新方案与工程实践
简介一套基于深度可分离卷积的轻量级UNet实现面向医学图像分割任务尤其适合部署在资源受限的医疗设备上适合具备一定深度学习基础的开发者参考。模型支持标准卷积与可分离卷积两种模式可通过参数灵活切换在控制参数量的同时保留较强特征提取能力并配套完整的数据预处理、训练评估与主控流程。压缩包共十个文件以Python脚本为主涵盖模型构建、数据管线和训练工具另附项目说明文档及依赖清单整体压缩后仅28KB。目前已有70人学习下载内容包含自动标签映射、图像-掩膜配对、独热编码、Dice系数评估、断点续训及双语训练曲线绘制等功能细节。资料还提供了不同卷积模式对比与实验复现路径可直接迁移至自定义分割数据集是快速上手轻量级分割模型的实用参考。1. 深度可分离UNet轻量级医学图像分割新方案能省多少、值不值得换医学图像分割场景里UNet是最稳的baseline但标准UNet从输入到瓶颈层堆下来参数量在三千万级别一张512×512的CT前向一次就够小显存卡受的。深度可分离UNet的思路是保持UNet的编码-解码结构和跳跃连接不变把中间层的标准3×3卷积换成深度卷积加1×1逐点卷积参数量能压到原来的八分之一左右精度通常只掉一到两个Dice点。这对低成本GPU、离线批量分割、边界推理这类资源受限场景很有吸引力。这篇笔记按原理、代码、训练配置、避坑、验证的顺序讲清楚读完可以直接照着自己手上的医学图像数据集改。2. 普通卷积和深度可分离卷积差在哪参数省了特征交互方式也变了2.1 深度可分离卷积的参数量与计算量一张表看清3×3的变化普通卷积是“空间通道”同时处理的。输入64通道、输出64通道的一个3×3卷积参数数量是64×64×3×336864个输出特征图每个像素点的乘加次数也是36864次。深度可分离卷积把这个操作拆成两步第一步depthwise卷积每个输入通道单独用一个3×3滤波器参数为64×3×3576个第二步pointwise卷积用1×1卷积把64个通道重新混合成想要的输出通道数参数为64×644096个。加起来4672个参数只有普通卷积的12.7%。卷积类型输入64→输出64输入128→输出128适合位置标准3×3卷积36,864参数147,456参数输入层、输出层、解码器浅层深度可分离3×3逐通道1×1逐点4,672参数17,536参数编码器中深层、瓶颈层通道数越大替换收益越明显。128→128那一行深度可分离卷积的参数量只有标准卷积的11.9%。所以UNet的瓶颈层512→1024附近是最值得替换的位置那里通道数最多节省最可观。输入层通道少替换收益小风险却大通常保留普通卷积。计算量的下降比例和参数量基本一致。以一个256×256特征图、64通道的卷积层为例标准卷积一次前向约9.6GFLOPs深度可分离卷积只有约1.2GFLOPs这在小显存卡上一次迭代能看出明显差距。这里有个容易被忽略的细节深度可分离卷积的感受野和普通卷积一样都是3×3并没有缩小。真正变化的是特征交互方式。普通卷积在同一个3×3窗口内同时做空间混合和通道混合而深度可分离卷积把跨通道信息交流全部压到1×1逐点卷积里。直观理解是空间结构被保留得更“纯”通道混合变成一步独立操作。对医学图像这种目标与背景差异大、纹理细节多的数据这反而是一种隐式正则化在小数据集上不容易过拟合。但后果也很直接如果某层输入通道太少比如第一层的单通道灰度图depthwise卷积只有一个3×3滤波器空间特征提取能力太弱后面逐点卷积再怎么混合也补不回来。浅层不换就是从这里来的。2.2 UNet里哪些层可以换、哪些层不该换我在几个数据集上调过深度可分离UNet的结构最终习惯用的替换策略比较固定输入层保留普通卷积。首层输入是单通道CT或MRI灰度图深度可分离卷积在这个位置能提供的特征太少普通卷积多出来的参数在这里花得值。编码器中后段全部换成深度可分离。64→128之后通道数足够1×1逐点卷积有足够的输入信息做重组节省明显。瓶颈层一定换。通道数最高一个DSBlock能省下几百万参数对显存和推理时间影响最大。解码器层也能换但别全换。解码器负责把语义信息恢复到原图分辨率对细节敏感。我的习惯是离输出层最近的一个解码块保留普通卷积其余用深度可分离。跳跃连接本身没有卷积不用动。但注意拼接后的通道数会翻倍比如解码器第一层经常要处理10245121536通道的输入这是全网络最重的一个卷积位置。还有一个坑要提前说不要把下采样交给深度可分离卷积的stride2去做。UNet的尺度变化尽量统一走MaxPool。depthwise逐通道下采样加上pointwise混合在浅层信息还不多时会把边缘响应直接丢掉。我一开始图省事把第一个DSConv的stride设成2结果分割图上的小目标全没回退到MaxPool才恢复正常。BN的位置也一样重要。深度可分离卷积里我习惯用“depthwise → BN → ReLU → pointwise → BN → ReLU”的顺序。如果为了省事把两个BN合成一个放在pointwise后面训练前期看着正常epoch到三四十以后部分通道的统计量会漂移表现为验证Dice上下抖。保持两个BN让深度卷积和逐点卷积各自有稳定的分布训练能省心不少。3. 用PyTorch搭建深度可分离UNet三个代码块讲清实现与训练3.1 深度可分离卷积模块两个BN的顺序不能省下面这个DSConv模块是整个改造的核心。groupsin_channels是depthwise卷积的关键参数表示每个输入通道独立使用一组3×3滤波器biasFalse是因为后面紧跟BN卷积的bias会被BN归一化抵消留着只会增加参数和干扰。import torch import torch.nn as nn class DSConv(nn.Module): 深度可分离卷积3x3深度卷积 1x1逐点卷积中间插BN def __init__(self, in_channels, out_channels, stride1): super().__init__() self.depthwise nn.Conv2d( in_channels, in_channels, kernel_size3, stridestride, padding1, groupsin_channels, biasFalse ) self.bn1 nn.BatchNorm2d(in_channels) self.pointwise nn.Conv2d( in_channels, out_channels, kernel_size1, biasFalse ) self.bn2 nn.BatchNorm2d(out_channels) def forward(self, x): x self.depthwise(x) # 每个通道独立做3x3空间卷积 x self.bn1(x) x torch.relu(x) x self.pointwise(x) # 1x1逐点混合所有通道 x self.bn2(x) x torch.relu(x) return x模块里没有做下采样因为UNet的尺度变换统一交给MaxPool。之前在2.2提过stride2放进depthwise卷积会让浅层特征丢失这里代码就直接不提供这个入口。3.2 完整UNet主体跳跃连接拼接与上采样方式的选择DSBlock把两个DSConv串起来对齐标准UNet每个stage的双卷积习惯。UNetDS则保持经典的四次下采样结构base_ch64时参数量约370万标准UNet同配置约3400万差距接近一个数量级。class DSBlock(nn.Module): 两个深度可分离卷积组成一个block def __init__(self, in_channels, out_channels): super().__init__() self.conv1 DSConv(in_channels, out_channels) self.conv2 DSConv(out_channels, out_channels) def forward(self, x): return self.conv2(self.conv1(x)) class UNetDS(nn.Module): 深度可分离UNet输入输出层保留普通卷积中间全部轻量化 def __init__(self, in_ch1, out_ch1, base_ch64): super().__init__() # 输入层保留标准卷积提取边缘、纹理等低级特征 self.inc nn.Sequential( nn.Conv2d(in_ch, base_ch, 3, padding1, biasFalse), nn.BatchNorm2d(base_ch), nn.ReLU(inplaceTrue), nn.Conv2d(base_ch, base_ch, 3, padding1, biasFalse), nn.BatchNorm2d(base_ch), nn.ReLU(inplaceTrue), ) self.pool nn.MaxPool2d(2) self.enc1 DSBlock(base_ch, base_ch * 2) self.enc2 DSBlock(base_ch * 2, base_ch * 4) self.enc3 DSBlock(base_ch * 4, base_ch * 8) self.bottleneck DSBlock(base_ch * 8, base_ch * 16) # 上采样用双线性插值避免转置卷积常见的棋盘伪影 self.up1 nn.Upsample(scale_factor2, modebilinear, align_cornersFalse) self.dec1 DSBlock(base_ch * 16 base_ch * 8, base_ch * 8) self.up2 nn.Upsample(scale_factor2, modebilinear, align_cornersFalse) self.dec2 DSBlock(base_ch * 8 base_ch * 4, base_ch * 4) self.up3 nn.Upsample(scale_factor2, modebilinear, align_cornersFalse) self.dec3 DSBlock(base_ch * 4 base_ch * 2, base_ch * 2) self.up4 nn.Upsample(scale_factor2, modebilinear, align_cornersFalse) self.dec4 DSBlock(base_ch * 2 base_ch, base_ch) self.outc nn.Conv2d(base_ch, out_ch, kernel_size1) def forward(self, x): x0 self.inc(x) # 原始分辨率 p1 self.pool(x0); x1 self.enc1(p1) # 1/2 p2 self.pool(x1); x2 self.enc2(p2) # 1/4 p3 self.pool(x2); x3 self.enc3(p3) # 1/8 p4 self.pool(x3); x4 self.bottleneck(p4) # 1/16 u1 self.dec1(torch.cat([self.up1(x4), x3], dim1)) # 1536 - 512 u2 self.dec2(torch.cat([self.up2(u1), x2], dim1)) # 768 - 256 u3 self.dec3(torch.cat([self.up3(u2), x1], dim1)) # 384 - 128 u4 self.dec4(torch.cat([self.up4(u3), x0], dim1)) # 192 - 64 return self.outc(u4)几个值得注意的细节。dec1的输入是bottleneck输出1024通道与encoder第三层512通道拼接共1536通道这是整个网络参数最重的一块。显存如果吃紧优先在拼接后插入一个1×1卷积把通道压回512效果比我之前试过的任何通道裁剪方式都好。Upsample统一用align_cornersFalse医学图像分割里保持这个默认值避免角点对齐带来的局部坐标偏移。推理前先用x torch.randn(1, 1, 256, 256)跑一遍确认输出尺寸一致再进循环训练。3.3 最小训练脚本AMP、优化器与损失函数接起来from torch.cuda.amp import autocast, GradScaler model UNetDS(in_ch1, out_ch1).cuda() opt torch.optim.AdamW(model.parameters(), lr1e-4, weight_decay1e-5) scaler torch.cuda.amp.GradScaler() for epoch in range(100): model.train() for images, masks in train_loader: images, masks images.cuda(), masks.float().cuda() opt.zero_grad() with autocast(): logits model(images) loss bce_dice_loss(logits, masks) scaler.scale(loss).backward() scaler.step(opt) scaler.update()深度可分离卷积参数量小AdamW比SGD好训练但学习率要保守1e-4起步别用默认1e-3。用默认学习率跑前几个epoch容易出现Dice归零再缓慢恢复的翻车曲线。混合精度对这类网络影响不大显存大约能省一半。如果loss不收敛先把AMP关掉跑五个epoch排除BN在fp16下的统计异常。bce_dice_loss的定义放在4.1给出直接调用即可。4. 医学图像分割的训练配置损失、指标、增强与显存参数4.1 损失函数BCEDice混合为什么更稳医学图像分割最常见的问题不是模型不收敛而是背景占比太大单独用BCE大面积背景把loss主导了单独用Dice小目标区域梯度又容易剧烈波动。两者混合几乎是这类任务的标准答案。import torch.nn.functional as F def bce_dice_loss(pred, target, dice_weight0.5, smooth1.0): # pred是模型logitstarget是0/1标签 p torch.sigmoid(pred) bce F.binary_cross_entropy(p, target, reductionmean) inter (p * target).sum(dim(1, 2, 3)) total p.sum(dim(1, 2, 3)) target.sum(dim(1, 2, 3)) dice 1 - (2 * inter smooth) / (total smooth) return (1 - dice_weight) * bce dice_weight * dice.mean()smooth1.0是Dice损失里最常用的平滑项防止分子分母同时为0导致梯度爆炸。dice_weight默认0.5器官这类中等占比目标从0.5开始调肿瘤、血管这类占比极小的目标建议把dice_weight提到0.7让Dice主导训练BCE只做稳定梯度。如果面对的是极度不平衡的病灶分割可以换成Tversky损失把假阴性的惩罚调高这个后面避坑章会展开。损失配置适用场景注意事项纯BCE前景背景接近均衡医学图像很少满足纯Dice目标占比极小单用梯度噪声大BCEDice多数器官分割默认权重1:1起步小目标提高Dice权重4.2 评估指标Dice、IoU与HD95怎么配合使用Dice和IoU在二分类分割里是单调对应的IoU Dice / (2 - Dice)所以看一个就行。医学论文里习惯报告Dice因为它对小块目标更敏感数值上也更好看。Dice达到0.9不等于边界误差小一个整体轮廓正确的预测边缘偏移两三个像素Dice可能只掉0.01肉眼却很容易看出问题。这时候要看HD95也就是预测边界与真实边界之间距离分布的第95百分位数单位是毫米。对器官分割HD95超过10mm基本意味着边界不可用对精细的血管或神经结构要求还要高得多。评估时建议同时打印Dice和HD95Dice管区域重叠HD95管边界质量。测试集做五折交叉验证时报告均值±标准差单次结果没有说服力。另一个容易被忽视的点是验证集增强必须关闭尤其是几何变换。裁patch和翻转在推理阶段都不要加否则指标会虚高。4.3 数据预处理与增强CT截窗、MRI归一到patch裁剪预处理比网络结构更容易让结果翻车。CT图像要先截断到[-1024, 1024]的HU范围再缩放到[-1, 1]MRI没有统一量纲按每个volume做z-score归一化病理切片这类大图则按颜色归一化。我的习惯是先在代码里把预处理后的图像分布打印出来看一眼再进网络。显存不够时优先固定base_ch64把patch缩到256×256不要一开始就砍通道数。通道太浅会让1×1逐点卷积没有足够输入信息重组精度掉得比裁剪更厉害。GPU显存patch大小batch sizebase_ch备注6GB256×256432能用但不宽裕12GB256×256864默认配置24GB512×512464尽量配合随机裁剪数据增强用albumentations就能覆盖常规需求import albumentations as A train_aug A.Compose([ A.RandomRotate90(p0.5), A.HorizontalFlip(p0.5), A.VerticalFlip(p0.5), A.ElasticTransform(alpha1, sigma50, alpha_affine30, p0.3), ])图像和mask必须使用同一个transform对象保证几何变换同步。mask的插值方式必须用最近邻不能和图像一样用线性插值这一点是下面的避坑重点。5. UNet使用时的注意事项五个高频踩坑与解决办法5.1 坑一推理时输入尺寸不是16的倍数输出图与输入对不齐现象训练用256×256的patch推理时来一张512×384的CT模型输出的分割图尺寸对得上但整张图看起来像被平移过几个像素边缘错位。原因UNet有四次下采样和四次上采样特征图尺寸始终必须是2^416的倍数。输入不是16的倍数时Upsample只能做近似取整产生整体偏移。解决推理前用镜像填充把短边补到16的倍数预测完再裁回原尺寸。F.pad(modereflect)比补零效果好减少边界伪影。5.2 坑二mask增强用了线性插值边界变成灰色过渡带现象训练曲线前期正常Dice到0.85左右就卡住可视化预测图在目标边界处有一圈灰色晕染。原因数据管线里为了省事把图像和mask一起用cv2.resize(interpolationcv2.INTER_LINEAR)处理mask被插值成了0到1之间的连续值网络学到的是模糊边界而不是锐利分割。解决图像随意用线性插值mask一律用INTER_NEAREST。如果数据集本身就是软标签比如多个医生标注取平均的结果那就换软标签版本的Dice损失别硬套二值BCE。5.3 坑三batch size太小BN统计量把网络带崩现象batch2训练前几个epoch正常后面loss突然跳到NAN或者验证Dice剧烈震荡。原因深度可分离卷积的depthwise部分是逐通道独立统计的batch只有2时每个通道只拿到几个样本均值和方差抖动极大1×1逐点卷积再把抖动放大BN统计量成了黑匣子。解决单卡显存不够上大batch时把BN换成GroupNormnum_groups设8即可或者先用batch8跑五到十个epoch把BN统计量磨稳再切回小batch微调。我现在做医学图像分割直接默认GroupNorm省去这些玄学问题。5.4 坑四异常小的前景区域让Dice失真现象血管、小肿瘤这类目标占全图不足0.5%模型从头到尾预测全背景Dice居然有0.9以上训练曲线看起来已经收敛。原因Dice公式里目标为空时分子分母都是0空预测会被当成满分真实前景极小时接近空的预测分数也相当高梯度接近消失。解决训练时定期统计预测mask中前景像素比例别只盯Dice把小目标的损失换成Tverskyalpha0.3、beta0.7提高假阴性惩罚评估时同时报告IoUIoU对空预测的惩罚比Dice狠得多。5.5 坑五滑窗拼接处出现网格效应现象大图切成多个patch分别预测再拼回去拼缝处出现一条条亮线或暗线目标在patch边界处被切断。原因推理时没有重叠滑窗每个patch边缘的预测置信度天然偏低重叠区域也没做融合。解决推理时用50%重叠率的滑窗重叠区域按到patch中心的距离做加权平均融合。代价是推理时间增加20%到30%但边界连续性明显改善。这个方案对大尺寸病理切片和全肺CT都适用是离线批量分割里最值得先做的后处理优化。6. 深度可分离UNet怎么验证参数量、推理耗时与Dice对照改造完结构第一件事不是直接上全量数据训练而是先用一个最小实验确认替换没有把模型搞坏。下面这段代码能同时看参数量和前向耗时import time model UNetDS(in_ch1, out_ch1).cuda() total sum(p.numel() for p in model.parameters()) print(fparam: {total / 1e6:.2f}M) x torch.randn(1, 1, 256, 256).cuda() for _ in range(10): _ model(x) torch.cuda.synchronize() t0 time.time() for _ in range(50): _ model(x) torch.cuda.synchronize() print(favg forward: {(time.time() - t0) / 50 * 1000:.1f} ms)基准对照用标准UNet跑同一个数据集相同的patch、相同的增强和训练轮数比较三组数参数量、单次前向耗时、验证Dice。参数量和耗时下降一个数量级Dice差距不超过1个点这个轻量化方向就值得继续投入。如果Dice掉了3个点以上先检查替换范围把解码器浅层的普通卷积加回来再试而不是怀疑整个方案。我现在的习惯是每改一版结构先在小数据集上跑20轮画出Dice波动区间和标准UNet对照。两边曲线有重叠说明替换在这个任务上是安全的完全分开说明当前数据不适合深度可分离果断回头。多次做下来最深的体会是轻量化不是玄学它有明确的边界输入层和解码器浅层保留普通卷积就是那条边界。把边界守住剩下的交给训练参数和耐心。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

AI Agent外挂记忆系统mem0实战:可演化的语义记忆架构

AI Agent外挂记忆系统mem0实战:可演化的语义记忆架构

1. 项目概述:为什么一个“外挂记忆”能让AI Agent真正像人一样思考?最近在几个技术社区里,几乎每天都能看到有人问:“我的AI Agent跑着跑着就忘了上一轮聊了什么,指令一多就开始自相矛盾,这到底算智能还是人…

2026/10/12 10:05:55 阅读更多 →
对比 Claude Code 与 Cursor 后,DeepSeek Harness 的插件化架构优势在哪

对比 Claude Code 与 Cursor 后,DeepSeek Harness 的插件化架构优势在哪

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

2026/10/12 10:05:55 阅读更多 →
Gemini 是什么?kimi K2.5 的区别是什么——用 TaoToken 统一 Key 实测对比

Gemini 是什么?kimi K2.5 的区别是什么——用 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/12 10:05:55 阅读更多 →

最新新闻

Qt图像裁切实战:QImage::copy()实现精准ROI提取

Qt图像裁切实战:QImage::copy()实现精准ROI提取

1. 项目概述:一张图里切出你要的“那一块”最近在某高校实验室带学生做图像处理小项目,经常遇到一个看似简单、实操却容易卡壳的需求:Qt:读入一张图片,切割特定区域的图片并保存。这个词组在技术社区里高频出现&#x…

2026/10/12 11:00:10 阅读更多 →
操作系统入门通关地图:从定义断层到工程实战

操作系统入门通关地图:从定义断层到工程实战

1. 这份知识点整理不是“抄书笔记”,而是操作系统入门者的通关地图你手头这份《操作系统教程》第5版第一章的整理材料,表面看是教材章节的摘录汇总,实则是一张被反复验证过的“操作系统认知路线图”。我带过十几届某高校计算机专业本科生做课…

2026/10/12 11:00:10 阅读更多 →
Python高光谱数据预处理实战:ENVI读取、反射率转换与光谱平滑

Python高光谱数据预处理实战:ENVI读取、反射率转换与光谱平滑

简介:这是一份基于Python实现的高光谱数据预处理项目资料,面向毕业设计、课程设计及项目开发场景,适合需要完成光谱数据清洗、校正、降噪与归一化处理的开发者参考。资料以预处理算法集合为核心,覆盖标准正态变换(MSC)、多元散射校…

2026/10/12 11:00:10 阅读更多 →
llama.cpp与GGUF:让大模型跑在普通CPU上

llama.cpp与GGUF:让大模型跑在普通CPU上

把一个十几G的大模型塞进一台只有 CPU 的老机器,还能以每秒几个 token 的速度跑起来,这在两三年以前听起来像天方夜谭。但现在只要有 llama.cpp 和 GGUF 这两个东西,普通人用一台配置普通的电脑就能把这件事做成。圈内人常把这对组合叫作本地…

2026/10/12 11:00:09 阅读更多 →
百万QPS高并发抢券系统架构设计:分层拦截与Redis原子扣减

百万QPS高并发抢券系统架构设计:分层拦截与Redis原子扣减

架构二面:如何设计一个百万级别QPS的高并发抢券系统?这个问题我在模拟面试里被问到过很多次,也在真实的大促活动中见过好几版方案。先说结论:百万QPS的抢券系统,绝大多数流量根本不该到达业务后端,真正扛压…

2026/10/12 11:00:09 阅读更多 →
并查集详解:从原理到实战,掌握动态连通性

并查集详解:从原理到实战,掌握动态连通性

1. 并查集到底在解决什么问题第一次接触并查集,很多人会被这个名字吓到。“并”是合并,“查”是查询,“集”是集合,三个字拆开看其实已经把它的全部功能说完了:把两个集合合并成一个,查询某个元素属于哪个集…

2026/10/12 10:59:05 阅读更多 →

日新闻

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

复古胶片颗粒感噪点合成器:Canvas ImageData 像素高斯杂色注入算法

在数码相机、高清显示屏与现代矢量图形技术高度发达的今天,画面可以做到绝对的锐利、平滑与无瑕。然而,当一张秋日手账插画或拍立得照片过于“平整无瑕”时,往往会散发出一种冰冷生硬的“数码塑料感(Digital Plasticity&#xff0…

2026/10/12 0:00:59 阅读更多 →
活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

活字印刷古籍线装排版:Canvas 竖排文字与栏线自适应算法

在现代网页与移动端设计中,横排(Horizontal Layout)早已经成为了绝对的主流。然而,当我们翻开泛黄的线装古籍、宋版木刻诗集,或是欣赏一张茶道雅集的手写便签时,那种**自上而下纵向书写、自右向左逐列铺展&…

2026/10/12 0:00:59 阅读更多 →
周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

周日晚间的“精神松绑减震器”:无压力情绪倾倒箱与温和轻声陪伴

每到周日的晚上八点到十点,很多人心里都会悄悄亮起一盏警示灯。 在心理学上,这种现象有一个专门的称谓——“周日夜晚焦虑症(Sunday Scaries)”。明天又是周一,闹钟又要重新在七点响彻卧房;脑海里仿佛有一个…

2026/10/12 0:00:59 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/12 0:16:30 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/12 0:16:38 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/12 0:16:43 阅读更多 →

月新闻

我发现了一个新思路:用 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/11 10:45:37 阅读更多 →
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/11 14:36:53 阅读更多 →
黑夜航拍船只数据集训练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/11 14:36:54 阅读更多 →