深度学习建筑物提取实战:从U-Net原理到图像分割全流程
简介这是一份基于深度学习的图像建筑物提取演示项目定位为面向初学者的计算机视觉实战资源以建筑物识别定位为主线串联深度学习、机器学习与人工智能算法的核心概念。压缩包共27个文件其中17张jpg测试图与1张png配图用于图像输入与结果对比8个py脚本分别承担数据读写、图像处理、算法封装、主程序等职责另有md说明文档帮助快速理解环境配置与运行流程整体仅1.49MB。目前已有126人学习下载。项目自带完整demo和清晰注释说明文档覆盖Python环境、深度学习框架及依赖库的搭建步骤适合读者对照源码理解CNN如何从边缘、纹理到形状逐层提取特征借助测试图像可快速验证网络输出完成从数据准备、图像预处理到模型推理的闭环实践对入门图像分割与目标提取具有直接参考价值。1. 深度学习做建筑物提取先看懂这份资源值不值得下很多人拿到一份「基于深度学习的图像建筑物提取.zip」第一反应是解压之后找到 main.py 直接跑跑通了就觉得自己已经入门了。我拆过不少同类项目结论可能有点反直觉这个 demo 的价值不在模型有多新而在于它把从图像预处理到掩码输出的完整链路补齐了——你拿到的不只是一段推理代码而是一套可以照着改的工程骨架。它适合两类人一类是刚接触深度学习图像分割、想弄明白输入图像到底怎么变成建筑物轮廓的初学者另一类是已经跑过分类模型、但没碰过语义分割的开发者想用最短时间把分割任务的完整流程走一遍。这份资源能解决的实际问题就是给你一批带测试图的脚本、一份 README让你把「图像进去、掩码出来」这件事在本地真正落地。2. 项目结构与数据管线从脚本分工读懂运行逻辑2.1 资源里有什么六个脚本和一批测试图的角色分配先看压缩包里的文件构成。主目录下有一组 Python 脚本——main.py、main2.py、test.py、test2.py、test3.py以及命名很直白的 Deal.py、IO.py、Algo.py还有个叫 function 的模块目录。单看名字就能猜个大概IO.py 管读写Deal.py 管处理Algo.py 管模型算法。这种命名方式在课程设计和入门项目里很常见好处是功能边界清楚坏处是文件一多容易混淆各自职责。我对照实际文件列了一张角色表你第一次拆包时按这个思路去对文件推断职责在流程中的位置IO.py图像读取、路径管理、结果保存最前端和最后端Deal.py图像预处理、数据增强、掩码处理输入端Algo.py网络结构定义、前向推理核心计算main.py主流程调度跑完整 demo入口main2.py可能是加载训练好的权重做推理入口的变体test.py / test2.py / test3.py不同阶段的测试脚本调试用resources/测试图片与样例图数据输入resources 目录里除了 test_map.JPG、map2.jpg 这类地图或遥感图还有 WeiNi_bear.jpg、monkey.png、fruit.JPG 这类明显不是建筑物的普通照片。这不是放错了而是特意准备的负样本——用来验证模型在非建筑物图像上会不会误报。理解这一点很关键因为建筑物提取本质上是一个二分类分割问题每个像素要么是建筑物、要么不是模型必须见过「不是」的样本才能学会拒绝。2.2 图像预处理链路Deal.py 与 IO.py 怎么配合预处理是这类项目最容易翻车的地方。Deal.py 处理的是「图像怎么进模型」IO.py 处理的是「图像从哪来、结果存哪去」。常见的配合方式是IO.py 先把图像读成 RGB 数组交到 Deal.py 做尺寸统一和归一化。我一般会按下面的逻辑来写import cv2 import numpy as np def read_image(path, target_size(512, 512)): # IO 层统一读取保持 RGB 顺序 img cv2.imread(path) img cv2.cvtColor(img, cv2.COLOR_BGR2RGB) img cv2.resize(img, target_size, interpolationcv2.INTER_LINEAR) return img def normalize(img, mean(0.485, 0.456, 0.406), std(0.229, 0.224, 0.225)): # Deal 层归一化到 [0,1] 再按均值方差标准化 img img.astype(np.float32) / 255.0 img (img - np.array(mean)) / np.array(std) # 转成 CHW 顺序供 PyTorch 使用 img img.transpose(2, 0, 1) return img这段代码逻辑不复杂但参数很有讲究。resize 到 512×512 是分割任务里比较稳妥的折中——太小会丢失建筑物边缘细节太大则内存占用激增。归一化用的 mean 和 std 是 ImageNet 统计值因为大多数预训练模型都是基于 ImageNet 训练的如果你完全从零训练这两个参数理论上应该用自己数据集的统计值替代但实际项目中沿用 ImageNet 值也能收敛。转成 CHW 顺序是为了匹配 PyTorch 的 tensor 布局如果你用 TensorFlow这里要改成 HWC。2.3 Algo.py 里最可能放什么网络U-Net 还是 FCN处理建筑物提取这种稠密预测任务网络结构的选择方向其实很固定全卷积网络FCN、U-Net、DeepLab 系列是三个主流选项。对于这份资源里的 demo 规模最可能是 U-Net 或其简化版本原因很实际——U-Net 结构简单、对小样本数据集友好、编解码结构让初学者容易理解每一层在干什么。U-Net 的核心思想是编码器逐层下采样提取语义特征解码器逐层上采样恢复空间分辨率中间用跳跃连接把低层细节和高层语义拼起来。这个设计对建筑物提取特别合适因为建筑物的边缘是强细节信息而跳跃连接恰好能把边缘纹理传给解码器。Algo.py 里如果没有预设权重只是定义网络骨架那你需要自己加载预训练编码器权重常见做法是直接用 torchvision 里的 resnet34 或 mobilenet 当编码器。import torch.nn as nn class SimpleUNet(nn.Module): def __init__(self, in_channels3, out_channels1): super().__init__() # 编码器逐层下采样 self.enc1 nn.Sequential( nn.Conv2d(in_channels, 64, 3, padding1), nn.ReLU(), nn.Conv2d(64, 64, 3, padding1), nn.ReLU() ) self.pool nn.MaxPool2d(2) # 解码器上采样 特征融合 self.up nn.ConvTranspose2d(64, 64, 2, stride2) self.dec1 nn.Sequential( nn.Conv2d(128, 64, 3, padding1), nn.ReLU(), nn.Conv2d(64, 64, 3, padding1), nn.ReLU() ) self.out nn.Conv2d(64, out_channels, 1) def forward(self, x): e1 self.enc1(x) e2 self.enc1(self.pool(e1)) d1 self.up(e2) # 跳跃连接通道拼接 d1 torch.cat([d1, e1], dim1) return torch.sigmoid(self.out(self.dec1(d1)))关键是 out_channels1 配 sigmoid 激活输出张量的每个像素值代表该位置是建筑物的概率值越接近 1 越可能是建筑。这里没用多类 softmax因为建筑物提取就是单类二分割一个通道就够了。后处理时对这个概率图做阈值分割比如大于 0.5 就判定为建筑物就能得到二值掩码。这就是整个模型前向推理的完整逻辑test_map 系列测试图也就是这样变成黑白轮廓图的。3. 环境搭建与首次运行把 demo 跑起来的具体步骤3.1 框架选型PyTorch 还是 TensorFlow版本怎么锁这份资源的 README 里大概率会提环境要求就算写的比较简略你自己也要先确定框架方向。PyTorch 和 TensorFlow 都能做分割但对这种中小规模 demoPyTorch 更顺手动态图调试直观torchvision 自带预训练模型和分割相关的 transform 工具社区里的 U-Net 实现也最多。版本锁定是我反复强调的一件事。很多初学者环境装到一半开始报错回头发现是 CUDA 和 PyTorch 版本对不上。一个我试过很多次、比较稳的组合是Python 3.8、PyTorch 1.10 以上但不追最新、CUDA 11.3、cuDNN 对应 8.2。如果你只用 CPU 跑那更简单不需要装 CUDA但推理速度会明显慢。装 PyTorch 时直接用官方源指定版本别用默认的 pip 源否则可能拉到不匹配的版本。组件推荐版本备注Python3.8 / 3.93.10 以上有些旧库容易编译报错PyTorch1.10 ~ 2.0稳定且兼容常见预训练权重CUDA11.3 / 11.8按显卡驱动选不是越高越好torchvision与 PyTorch 版本对应版本错位会直接 import 报错opencv-python4.x用于图像读取与 resize3.2 从零启动安装依赖、检查路径、跑 main.py环境配好后第一步不是直接跑训练而是先确认资源和脚本能正常读取。我最常踩的第一个坑就是不先看路径直接双击运行结果主脚本报错找不到 resources 目录。正确顺序是先确保工作目录在项目根目录再检查资源配置路径是相对路径还是绝对路径最后才执行主程序。# 建议在项目根目录下运行不要双击 cd /path/to/基于深度学习的图像建筑物提取 # 安装核心依赖按需补全 pip install torch torchvision --index-url https://download.pytorch.org/whl/cu113 pip install opencv-python numpy matplotlib pillow # 先跑一个最小测试确认 IO 层没问题 python test.py这里的逻辑很简单cd 进项目根目录是为了让相对路径生效test.py 通常只读一张图并输出尺寸信息不涉及模型加载所以它是验证环境的第一道门槛。如果 test.py 报错先看是 import 错误还是路径错误import 错误说明依赖没装齐路径错误说明工作目录不对。确认 IO 层正常后再跑 main.py。main.py 一般会加载模型权重如果压缩包里带了 .pth 或 .pt 权重文件它会直接推理如果没带那 main.py 可能是训练入口你需要准备好带标注的训练数据才能跑完流程。3.3 核心超参数batch_size、学习率、epoch 的参考设定demo 能跑通之后就该调参了。入门项目最容易犯的错是照搬默认参数不动导致模型不收敛或收敛极慢。对于建筑物提取这种分割任务我自己的参考经验是batch_size 先按显存允许的最大值设6GB 显存跑 512×512 输入batch_size 取 2 到 4 就差不多了学习率用 1e-4 起步Adam 优化器epoch 数看训练集大小几十张图的情况下 50 到 100 个 epoch 足够看出收敛趋势。参数参考值调整依据batch_size2 ~ 8显存不足就减半学习率1e-4Adamloss 震荡就降到 3e-5输入尺寸512×512图大边缘细就加大但注意显存epoch50 ~ 100看验证集 loss 不再下降就早停损失函数BCE Dice Loss正负样本不均衡时效果更好输入尺寸其实很值得单独说。resize 到 512×512 对大多数遥感图和地图够用但如果你处理的是高清航拍图直接 resize 会丢失大量建筑边缘细节。一种替代做法是把大图切成若干 512×512 的 patch 分别推理最后再拼回来。这个技巧我会在第 6 章展开。对于刚开始跑 demo 的人来说先把参数固定在参考值上确认整条链路通了再谈调优。4. 训练闭环与性能评估loss 曲线、指标与调参方向4.1 前向传播、损失计算与反向传播在代码里的落点很多初学者把训练当成「点一下开始」的魔法操作实际上训练闭环就四步前向传播算预测、损失函数算差距、反向传播算梯度、优化器更新权重。在建筑物提取里前向传播就是图像经过 U-Net 输出概率图损失计算拿概率图和真实掩码做对比反向传播由 PyTorch 自动完成优化器负责把梯度应用到参数上。分割任务里常用的损失函数组合是 BCE Loss 加 Dice Loss。BCE 逐像素计算交叉熵Dice Loss 衡量预测掩码和真实掩码的重叠程度。为什么要组合因为建筑物在图像里往往只占一小部分正负像素比例可能到 1:10 甚至更低单独用 BCE 会让模型倾向于把所有像素都预测为背景因为这样 loss 也不会太大。Dice Loss 对正负样本不均衡天然不敏感加上它能逼着模型把建筑物区域预测准。import torch import torch.nn.functional as F def dice_loss(pred, target, smooth1.0): # pred: 概率图 [B,1,H,W] target: 掩码 [B,1,H,W] pred pred.contiguous().view(-1) target target.contiguous().view(-1) intersection (pred * target).sum() return 1 - (2.0 * intersection smooth) / (pred.sum() target.sum() smooth) def combined_loss(pred, target): bce F.binary_cross_entropy(pred, target) dice dice_loss(pred, target) return bce dice # 两个损失等权相加也可以给 dice 乘 0.5 降权重这里的 smooth 参数是为了防止分母为零加的平滑项取 1.0 是常见默认值数据量大时也可以取更小。等权相加在多数分割任务里表现不错如果发现模型召回率高但精度低可以适当调高 dice 的权重。训练时每一轮迭代记录 loss 值画出来如果呈断崖式下降后平缓波动说明学习率和损失函数配置合理如果 loss 一直不降问题多半出在数据或学习率上而不是网络结构。4.2 精度、召回率与 IoU建筑物提取的指标怎么读训练完之后看结果不能只看几张图「感觉还行」要用数值指标说话。建筑物提取最常用的三个指标是精确率、召回率和 IoU。精确率衡量预测为建筑物的像素里有多少是真建筑召回率衡量真实建筑物像素里有多少被找出来了IoU 则同时惩罚漏检和误检是分割任务最核心的指标。指标计算公式建筑物提取中的含义精确率 PrecisionTP / (TP FP)预测的建筑区域里有多少是真的召回率 RecallTP / (TP FN)真实建筑里有多少被正确找到IoUTP / (TP FP FN)预测与真实区域的交集占并集比例越接近 1 越好在一个好的建筑物提取模型上这三个指标是互相制约的。你调低阈值会让更多像素被判为建筑物召回率上升但精确率下降调高阈值则反过来。实际工程里要看具体需求如果目的是从遥感图中圈出疑似建筑再人工复核那可以牺牲一点精确率换高召回率如果是要做自动化房产测量那精确率优先。4.3 过拟合与控制数据增强策略与正则化demo 项目的通病是训练数据太少几十张图反复跑很容易把模型训练到「背题」而不是「学会」。判断过拟合最直接的方法是看训练集 loss 持续下降但验证集 loss 开始回升。建筑物提取里对抗过拟合最有效的手段是数据增强——在训练时对图像做随机旋转、翻转、缩放、亮度扰动相当于把有限的数据集扩出更多变体。import albumentations as A train_transform A.Compose([ A.RandomRotate90(p0.5), A.HorizontalFlip(p0.5), A.RandomBrightnessContrast(p0.3), A.RandomScale(scale_limit0.2, p0.3), A.Resize(height512, width512), ])这里我选用的增强策略是有讲究的RandomRotate90 和 HorizontalFlip 对建筑物掩码完全无损因为建筑无论怎么旋转、翻转都还是建筑亮度扰动模拟不同光照条件RandomScale 模拟不同成像高度。注意标注掩码要跟随图像做完全相同的变换否则模型学到的是错位数据。albumentations 库的优势是同时处理图像和掩码保证变换同步。增强之外早停法和权重衰减也是常用的控过拟合手段。训练时每完成一个 epoch 记录验证集 loss连续 10 个 epoch 没有改善就停止。很多 demo 项目没做这一步导致最后产出的模型泛化能力很差。5. 避坑指南运行这个项目最容易翻车的五个地方5.1 中文文件名与路径编码导致的读取失败现象运行 main.py 时报 FileNotFoundError但 resources 目录下明明有这张图或者 cv2.imread 返回 None程序在后续处理时崩溃。原因项目文件名里混有中文和特殊字符Windows 下默认编码是 GBK而 Python 里 opencv 和部分库路径处理用的是 UTF-8两边对不上读取就直接失败。另外部分文件名里有空格比如the_woman.JPG某些命令行环境下也会被错误解析。解决第一优先是在加载图片时不直接拼接路径字符串改用 pathlib 库。pathlib.Path能自动处理系统编码差异。如果还不行把 resources 目录复制一份统一改成纯英文小写命名再试。注意 main.py 里如果有硬编码的路径也要同步修改。5.2 图片尺寸不一致导致的 tensor 形状不匹配现象报错信息里出现 RuntimeError: size mismatch 或 Expected 4D tensor as input, got 3D。模型加载后第一次前向推理就挂了。原因resources 里的测试图尺寸各不相同有的 1200×800有的是 640×480。如果预处理阶段没有强制 resize 到统一尺寸模型输入的 H 和 W 就不固定卷积层前向传播时张量形状对不上。PyTorch 的模型一旦定义好输入尺寸必须和训练时一致。解决在 Deal.py 的预处理函数里强制指定 target_size所有图像统一 resize。如果不想丢失宽高比用 padding 补成正方形而不是直接拉伸变形。遇到非 RGB 图比如 PNG 带透明通道要转成 RGBopencv 读取时灰度图也要先转三通道。5.3 显存不足与 batch size 调整现象训练或推理时弹出 CUDA out of memory程序直接退出。有时候运行参数没变但换了一张更大尺寸的图就崩。原因输入的 512×512 图像乘以 batch_size再乘网络通道数和中间特征图倍数显存占用是指数级增长。几张高分辨率图同时放进 GPU 就会溢出。很多 demo 默认 batch_size8在消费级显卡上就是灾难。解决先把 batch_size 降到 1 确认能跑通然后按 2 的倍数往上加直到显存逼近上限。另一种做法是在推理阶段用 torch.no_grad() 包裹前向传播省去反向传播的中间缓存。代码里检查一下有没有多余的训练模式下前向推理——评估时切到 model.eval() 能省不少显存。实在不够就 CPU 推理慢一点但不至于出不来结果。5.4 标签格式不对掩码与三通道标注混用现象训练时 loss 是 nan 或者模型输出全黑/全白。检查数据发现标注图是三通道 RGB 彩色图但模型期望的是单通道二值掩码。原因建筑物分割的标注掩码应该是 0 和 1 的单通道图0 代表背景1 代表建筑物。但很多数据集的标注是手工绘制的彩色多边形比如白色建筑、黑色背景直接读进来是三个通道和模型输出形状不匹配。解决加载标注后先转灰度再用阈值把像素分成 0 和 1 两类。常见做法是灰度值大于 128 的算建筑物小于等于 128 的算背景。转完之后检查一下唯一值确认确实是两类而不是多类。还要注意标注有没有抗锯齿边缘——边缘像素灰度值在 128 附近会被硬分类成某一边这也是后处理时掩码边缘普遍不整齐的原因。5.5 模型权重版本不匹配现象加载预训练权重时提示 state_dict 不匹配key 对不上或 size 不一致。程序虽能跑但预测结果明显不对。原因常见情况是权重文件来自 PyTorch 旧版本而本地用的是新版本序列化格式有差异另一个原因是网络结构里层名和权重文件保存的 key 不一致比如 Algo.py 改过结构但权重还是旧结构的。项目自带的权重如果来自别人的实现这种错位非常常见。解决先打印权重文件的 state_dict 里的 key和自己模型的 state_dict 逐个对比找出差异层名。很小的结构改动可以手动改 key差异大就别纠结直接用 torchvision 的预训练模型权重重新初始化编码器解码器从头训练。这里我个人的习惯是固定编码器权重只训练解码器几十个 epoch效果往往比强行复用旧权重好。6. 进阶用法用自己图片验证并把掩码输出到本地demo 跑通只是起点真正有价值的是把模型用在你自己关注的数据上。改用自选图片验证其实就三步图片放进去、改路径参数、跑推理并把概率图保存下来。这里我给一个通用的推理脚本模板注意它会输出一张叠加了轮廓的 RGB 图和一张黑白掩码图方便你直观对比效果import cv2 import torch import numpy as np from Deal import normalize from IO import read_image from Algo import load_model model load_model(weights_pathcheckpoints/best.pth) model.eval() img read_image(my_building.jpg, target_size(512, 512)) x normalize(img).unsqueeze(0) # 加 batch 维度 with torch.no_grad(): prob model(x) # 输出 [1,1,512,512] 的概率图 mask (prob.squeeze() 0.5).numpy().astype(np.uint8) * 255 # 保存掩码 cv2.imwrite(my_building_mask.png, mask)注意几个细节模型输入一定要做相同的 normalize否则推理结果会差很多评估模式必须开 model.eval()这样 dropout 层不会随机失活阈值 0.5 不是死值如果你的数据里建筑占比特别大或者特别小可以下调到 0.4 或上调到 0.6看哪边的效果更符合实际需求。我处理高清大图时会先切块推理再拼回完整掩码每块 512×512 重叠 64 像素重叠区域取平均概率这样拼接缝基本看不出来。这套切块拼图的逻辑不复杂但对大图预测的稳定性提升非常明显。现在每次拿到新的测试图我都会强制走一遍这个 512 切块流程确认输出掩码的边缘连续性再谈调参。这不是最炫的方案但对我这种习惯稳定复现的人来说它省掉的返工时间远比写脚本的时间多。希望帮到你。本文还有配套的精品资源点击获取

相关新闻

SecureC安全C库实战:从集成到避坑,给C代码焊上缓冲区护栏

SecureC安全C库实战:从集成到避坑,给C代码焊上缓冲区护栏

简介:securec.zip是一份遵循C11 Annex K边界检查接口标准的安全C函数实现集,面向嵌入式、系统底层及对输入安全有严格要求的C语言开发者,可有效缓解缓冲区溢出、字符串截断等常见内存风险。压缩包共46个文件,主体为40个.c源文件&a…

2026/10/11 0:47:03 阅读更多 →
LSP注入与Winsock协议链:深入解析FTP流量拦截机制

LSP注入与Winsock协议链:深入解析FTP流量拦截机制

简介:面向Windows底层网络开发者的LSP注入技术资源,使用C语言展示本地服务提供者的编写与注入全流程,重点解决FTP协议传输和Socket通信的拦截、监控与修改需求。压缩包共13个文件,包括3个cpp源文件、2个h头文件和1个dll动态库&…

2026/10/11 0:47:03 阅读更多 →
基于溯源图与RGAT的APT攻击检测实战指南

基于溯源图与RGAT的APT攻击检测实战指南

简介:本资源是华中科技大学2023届计算机专业毕业设计成果,聚焦APT攻击检测这一网络安全核心难题,面向高校学生、安全研究人员及入侵检测系统开发者,提供基于溯源图技术的检测方法优化实践方案。压缩包共26个文件,含11个…

2026/10/11 0:47:03 阅读更多 →

最新新闻

手把手教你 Win11 + WSL2 部署 OpenClaw:从环境配置到成功运行

手把手教你 Win11 + WSL2 部署 OpenClaw:从环境配置到成功运行

/* 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 1:33:31 阅读更多 →
PJ85718DM与STM32F723ZE在HVAC温度监测中的协同设计

PJ85718DM与STM32F723ZE在HVAC温度监测中的协同设计

/* 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 1:33:31 阅读更多 →
HVAC温度监测硬件选型:PJ85718DM与PIC18LF4685抗干扰低功耗组合

HVAC温度监测硬件选型:PJ85718DM与PIC18LF4685抗干扰低功耗组合

/* 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 1:33:31 阅读更多 →
CS229全套资源自学路线:讲义+作业+讲解吃透机器学习核心

CS229全套资源自学路线:讲义+作业+讲解吃透机器学习核心

简介:这是斯坦福大学CS229机器学习课程的完整学习资料包,涵盖讲义、作业及作业详解,适合想要系统掌握机器学习核心原理的学生、工程师和自学者,作为课程配套或备考复习的参考资料。压缩包共47个文件,以30个PDF讲义和解…

2026/10/11 1:33:31 阅读更多 →
基于PJ85718DM与STM32F373VC的嵌入式温度监测方案

基于PJ85718DM与STM32F373VC的嵌入式温度监测方案

1. 项目缘起与整体设计思路嵌入式温度监测这个方向,看起来简单,实际上坑特别多。我最早接触这类需求是在一个暖通空调控制器的改造项目里,当时的需求很朴素:本地要能看到实时温度,远程中控室也要能读到同一路数据&…

2026/10/11 1:33:31 阅读更多 →
数据结构——6.链式栈

数据结构——6.链式栈

一、前言栈是后进先出的特殊线性表,主流分为顺序栈和链式栈。这一篇讲述的是链式栈。顺序表尾部增删无需移动元素,时间复杂度是O(1),因此顺序栈以数组尾部作为栈顶,依靠尾插、尾删完成入栈、出栈。反观单链…

2026/10/11 1:32:30 阅读更多 →

日新闻

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

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

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

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

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

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

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

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

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

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

周新闻

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

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

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

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

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

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

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

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

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

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

月新闻

我发现了一个新思路:用 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/10 5:23: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/9 21:32:20 阅读更多 →
黑夜航拍船只数据集训练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/10 10:38:42 阅读更多 →