尧图建网站 尧图建网站 YAOTU WEB BUILD 免费咨询
ARTICLE DETAIL

资讯详情

深耕网站建设与建站编程的一线实战洞察。

双编码器把两期卫星图的变化“抠“出来:change_detection.pytorch 上手笔记

双编码器把两期卫星图的变化“抠“出来:change_detection.pytorch 上手笔记 双编码器把两期卫星图的变化抠出来change_detection.pytorch 上手笔记【免费下载链接】change_detection.pytorchDeep learning models for change detection of remote sensing images项目地址: https://gitcode.com/gh_mirrors/ch/change_detection.pytorch做遥感图像变化检测时最头疼的往往是两期图看着差不多变化区域却要逐像素找出来。change_detection.pytorch 用 PyTorch 提供了 11 种现成的双编码器变化检测架构配上 30 多种预训练编码器改几行参数就能开始训练。 变化检测任务里的三个老毛病上千对两期影像靠人眼比对盯三天看不完漏检率反而越来越高灾后复评这种场景等不起想自己搭双编码器网络得同时处理编码器选型、特征怎么融合、输出怎么上采样踩坑周期以周计变化像素通常只占图面的 2%~3%CrossEntropy 单独用模型会倾向全判无变化F1 直接垮掉说白了这个项目的定位就是把这些脏活固化成可配置的模块你只管挑架构、挑编码器、准备数据训练循环它替你写好了。⚙️ 输入两期图输出一张变化图数据流是单向的两期同区域图像 x1、x2 作为输入各走一遍编码器。默认siam_encoderTrue共享权重的孪生分支同一套权重看两个时间点网络被迫学哪里不一样而不是背住每幅图的绝对位置——这对新增一栋楼这种局部变化很关键。如果两期成像条件差异大比如不同传感器、不同季节可以关掉共享用独立编码器分开学。编码器吐出的多级特征进入解码器每一级先做融合再逐级上采样。融合方式由fusion_form控制concat 保留两期全部信息、参数最多sum 最省diff/abs_diff 直接算差异幅值、对变化有多大敏感。最后经 1×1 卷积头输出每个像素变/没变的概率图。遥感图像变化检测双编码器模型架构选模型不用记类名工厂函数一把梭cdp.create_model(arch, encoder_name, encoder_weights, ...)arch 对应 11 个已注册架构写错会直接抛出可用列表。 clone 到跑通训练的最短路径环境依赖很少注意 albumentations 被锁在 1.0.x 区间torch / torchvision 0.5.0pretrainedmodels0.7.4、efficientnet-pytorch0.6.3timm0.4.12timm- 前缀的编码器全靠它albumentations1.0.0,1.0.3git clone https://gitcode.com/gh_mirrors/ch/change_detection.pytorch cd change_detection.pytorch pip install -r requirements.txt数据按 LEVIR-CD 的目录习惯摆放train 下 A、B 两个子目录放两期影像label 放二值掩码LEVIR_CD_Dataset直接读。完整可运行脚本见 local_test.py核心就三段import change_detection_pytorch as cdp from change_detection_pytorch.datasets import LEVIR_CD_Dataset # 双编码器 Unetresnet34 共享权重特征 concat 融合输出二分类 model cdp.Unet(encoder_nameresnet34, encoder_weightsimagenet, in_channels3, classes2, siam_encoderTrue, fusion_formconcat) train_dataset LEVIR_CD_Dataset(../LEVIR-CD/train, sub_dir_1A, sub_dir_2B, ann_dir../LEVIR-CD/train/label) loss cdp.utils.losses.CrossEntropyLoss() # 训练循环由 TrainEpoch/ValidEpoch 封装细节见 local_test.py调参空间都收在两个参数里siam_encoder和fusion_form。换架构、换编码器都只是改构造函数训练循环一行不动。 11 个架构按用途分你想干什么选这些架构说明快速验证想法Unet、UnetPlusPlus结构简单收敛快Unet 是各类竞赛解法的常见底座冲指标DeepLabV3Plus、STANet、UPerNet、PSPNet、PANSTANet 内置时空注意力专为变化检测设计DeepLabV3 多尺度特征强轻量部署Linknet、FPN、MAnet参数少、推理快FPN 的金字塔融合对大目标变化友好编码器从 resnet1811M到 timm-efficientnet-l2474M都有timm-mobilenetv3 系列最小 0.57M清单和可用权重整理在 change_detection_pytorch/encoders/。损失函数在 change_detection_pytorch/losses/CrossEntropy、Dice、Jaccard、Focal、Lovasz、Tversky、Hybrid、BCL。变化像素占比低时优先 Dice 或 HybridBCEDice 组合别单押交叉熵。数据集目前内置 LEVIR-CD 和 SVCD其余走 CustomDataset。 三种典型场景怎么配单卡 8G 显存跑通组合Unet resnet34256 裁剪batch_size8预期单卡 2~4 小时/60 epoch注意再往大的编码器efficientnet-b7 级走先降 batch 或裁到 224别硬扛边缘设备部署组合Linknet timm-mobilenetv3_small_1000.93M预期单卡 1~2 小时注意精度会牺牲一些先在小验证集上确认 F-score 掉多少再决定要不要换 EfficientNet-lite论文里当 baseline 对比组合同一编码器resnet34分别套 Unet、Linknet、DeepLabV3Plus各跑一遍预期单卡 3~4 小时一组注意变量只留架构一个学习率、调度、数据增强保持一致表格才站得住️ 跑完三组实验后总结的几个坑loss 不降→ 常见根因是标签尺寸和裁剪尺寸没对齐或学习率对 30M 参数偏大。local_test.py 里用的是 Adam 1e-4第 50 个 epoch 衰减 0.1先照抄这套确认 ann_dir 里的掩码和 A/B 图像能按同名配对。显存爆→ LEVIR-CD 原图 1024×1024直接整图进模型必 OOM。LEVIR_CD_Dataset 默认 RandomCrop 256×256这是显存和分辨率之间的第一道折中batch_size 再往上加前先想清楚。装依赖报 ImportError→ albumentations 锁 1.0.x 不是随意限制1.1 之后 ToTensorV2 等接口有变动。别手敲版本号直接pip install -r requirements.txt。encoder 权重拉不下来→ 不带 timm- 前缀的编码器走 torchvision 和 pretrainedmodels 两个源带前缀的走 timm钉在 0.4.12。升级 timm 版本很容易碰到模块找不到的问题保持锁版本最省事。 它不覆盖什么这个库只处理两期影像的二分类变化检测三期以上的时间序列建模不在能力范围内输出的也只是哪里变了不区分变化类型。想接入自己的数据继承 CustomDataset 按 A/B/label 约定写读图逻辑即可推理大图可以用 transforms 里的 ChunkImage 做滑窗切块配合 ONNX 导出走 TensorRT 部署。✅ 读完可以直接做的四件事跑一遍 local_test.py确认 LEVIR-CD 训练流程和环境都通把数据集换成自己的两期影像走 CustomDataset 目录约定固定 resnet34 编码器横向对比 Unet、Linknet、DeepLabV3Plus 的 F-score只改fusion_form和siam_encoder看指标怎么动心里先有数再上更重的架构下次手上有两期卫星图要出变化报告时把 LEVIR-CD 的目录换成自己的数据用 change_detection.pytorch 把这套双编码器流程跑起来就是最快的验证方式。【免费下载链接】change_detection.pytorchDeep learning models for change detection of remote sensing images项目地址: https://gitcode.com/gh_mirrors/ch/change_detection.pytorch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表