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

资讯详情

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

PyTorch遥感图像变化检测:用30+预训练编码器搭建完整训练流水线

PyTorch遥感图像变化检测:用30+预训练编码器搭建完整训练流水线 PyTorch遥感图像变化检测用30预训练编码器搭建完整训练流水线【免费下载链接】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 库把孪生编码器、十一种解码器和三十多个预训练编码器都做成可插拔组件装完依赖就能开始训练。为什么选现成的遥感图像变化检测库变化检测任务本质上是成对输入的图像分割两个图像编码器分别处理两期影像一个解码器把两路特征融合后输出二值变化图。孪生一般指权重共享——两个编码器共用同一套参数这样两期影像的特征才能落在同一特征空间里直接比较。这个结构写起来不难难在细节编码器取哪几层输出、上采样后如何对齐融合、损失函数怎么处理变化区域占比极小的类别不平衡这些通常要自己踩坑试错。这个项目的做法是继承 segmentation_models.pytorch 那套在语义分割领域已经磨得很稳的编码器-解码器 预训练权重模式再扩展成双输入版本。调用 create_model 传入架构名、编码器名和融合方式整个网络就拼装完成。它也接受过实战检验在 PRCV2021 遥感变化检测竞赛中基于该库的方案拿到了第三名。对刚入门的人来说这比从空白工程起步可靠得多。孪生编码器如何处理两期卫星影像遥感图像变化检测的双编码器模型架构模型的 forward 只接收 x1、x2 两个张量两期影像返回同尺寸的变化掩码。siam_encoderTrue 时同一个编码器被调用两次处理两张图设为 False 时则自动切换成 encoder 和 encoder_non_siam 两套独立编码器等于允许两期各用不同家族的骨干网络。特征提出后进入解码器fusion_form 决定两路特征怎么合并concat 沿通道维拼接保留信息最完整也是默认最常用的一种sum 直接相加尺寸小、速度快diff 和 abs_diff 取差值直接凸显差异但会丢失部分绝对特征信息。解码器里 STANet 是唯一专为变化检测设计的结构配套了两个注意力模块放在 change_detection_pytorch/stanet/ 目录的 BAM 和 PAM 文件里把两期特征分开建模再融合适合两期影像光照条件差异大的场景。如何搭建变化检测模型的最短路径安装环节没有门槛克隆仓库后在目录里执行 pip install -r requirements.txt 即可依赖只有 torchvision、pretrainedmodels、efficientnet-pytorch、timm 和 albumentations 五个库其中 albumentations 被限定在 1.0.x 版本。如果你环境里已有 PyTorch装完就能跑。最短路径只需要两步先初始化模型import change_detection_pytorch as cdp model cdp.Unet( encoder_nameresnet34, encoder_weightsimagenet, in_channels3, classes2, siam_encoderTrue, fusion_formconcat)这里选 resnet34 是因为它在 21M 参数下精度和速度的平衡不错classes2 对应变化/未变化两类输出。接着加载数据change_detection_pytorch/datasets/ 目录内置了 LEVIR-CD 和 SVCD 两个经典数据集的现成类指定路径和子目录名即可from change_detection_pytorch.datasets import LEVIR_CD_Dataset train_ds LEVIR_CD_Dataset(../LEVIR-CD/train, sub_dir_1A, sub_dir_2B, img_suffix.png, ann_dir../LEVIR-CD/train/label)训练循环同样是封装好的local_test.py 里用 TrainEpoch 和 ValidEpoch 分别承担一轮训练与验证以 F-score、精确率、召回率为指标每轮把验证集最优的权重落盘最后调用 infer_vis 导出变化图大图场景下 transforms 模块还提供了 ChunkImage 滑动窗口推理避免整幅卫星图显存爆掉。30多个预训练模型中如何选编码器和解码器change_detection_pytorch/encoders/ 目录按家族整理了 30 多个预训练编码器resnet18 到 resnet152 覆盖 11M 到 58M 参数的主流需求efficientnet-b0 到 b7 在精度与算力间逐级取舍轻量场景有 2M 参数左右的 mobilenet_v2 和最小的几十万像素级 mobilenetv3此外还有 densenet、SENet、DPN、Inception 以及 timm 系列里的 ResNeSt、Res2Net、SKNet。encoder_weights 除了 imagenet部分编码器还支持 ssl、swsl 这类自监督预训练权重。解码器共 11 种Unet 和 Unet 稳妥、适合入门Linknet 参数少、推理快MAnet 和 PAN 引入注意力机制FPN、UPerNet、DeepLabV3/V3 侧重多尺度特征PSPNet 用金字塔池化STANet 则专为变化检测设计。change_detection_pytorch/losses/ 下还提供 CrossEntropyLoss、DiceLoss、JaccardLoss、FocalLoss、LovaszLoss、TverskyLoss 和 HybridLoss 等约十种损失函数。由于变化区域通常只占图像很小一部分只用交叉熵时损失容易停在某个位置下不去这时换 DiceLoss 或 JaccardLoss 往往更管用。基于 LEVIR-CD 数据集的建筑物变化检测实战LEVIR-CD 是建筑物变化检测的经典基准由两期同区域遥感影像和标注好的变化掩码组成。以 local_test.py 的配置为例Unet 搭配 resnet34三通道输入、两类输出孪生共享权重concat 融合batch size 8Adam 优化器、初始学习率 1e-4第 50 轮后衰减 10 倍共训练 60 轮。每轮以验证集 F-score 为准绳保存最优权重训练结束调用 infer_vis 把二值变化掩码存到本地目录叠回原图即可直观检查新建和拆除建筑的检出效果。如果你的数据不是 LEVIR-CD只要按 A一期、B二期、label掩码三个子目录组织图像与标签同名不同后缀就能用 CustomDataset 加载训练代码完全不用改。不同资源条件下的配置建议如果目标是先把流程跑通我建议 Unet resnet34 CrossEntropyLoss 这一组合规模小、收敛稳训练异常也容易定位原因。显存紧张时把编码器换成 mobilenet_v2 或 timm-mobilenetv3_small解码器选 Linknet整网参数可以压得很低代价是精度上限下降。想冲精度时EfficientNet-b7 配 DeepLabV3Plus 或 UPerNet 是稳妥方向也可以直接上 STANet损失函数叠加 DiceLoss 应对类别不平衡。另外记住一点孪生共享权重是最省显存的默认配置只有当两期影像质量差异明显、确实需要不同骨干时才把 siam_encoder 关掉。下一步很直接克隆仓库后通读一遍 local_test.py在 LEVIR-CD 的小规模数据上跑通建模、加载、训练、导出变化图的完整链路之后换成 CustomDataset 接自己的数据整套流程就都通了。【免费下载链接】change_detection.pytorchDeep learning models for change detection of remote sensing images项目地址: https://gitcode.com/gh_mirrors/ch/change_detection.pytorch创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表