ChangeFormer
ChangeFormer 是一款基于 Transformer 架构的孪生神经网络,专为遥感图像中的变化检测任务设计。它主要解决如何精准识别两幅不同时间拍摄的卫星或航空图像中地表物体(如建筑物、道路等)发生变化的问题,广泛应用于城市规划、灾害评估及环境监测等领域。
该工具适合遥感领域的研究人员、AI 开发者以及需要处理地理空间数据的专业人士使用。其核心技术亮点在于摒弃了传统的卷积神经网络(CNN),转而利用 Transformer 强大的全局上下文建模能力,结合孪生网络结构,能够更有效地捕捉图像中的长距离依赖关系,从而在复杂场景下实现比传统方法更高的检测精度。
官方提供了在 LEVIR-CD 和 DSIFN-CD 等主流数据集上的预训练模型与完整代码,支持用户快速复现论文结果或基于现有模型进行微调训练。无论是希望深入探索前沿算法的学者,还是寻求高效解决方案的工程师,ChangeFormer 都提供了一个灵活且高性能的开源基准。
使用场景
某省级自然资源监测中心急需对全省过去五年的高分辨率卫星影像进行自动化分析,以精准识别违规建筑扩张和耕地流失情况。
没有 ChangeFormer 时
- 人工判读效率低下:面对海量双时相遥感影像,分析师只能依靠肉眼逐帧比对,耗时数周且极易因视觉疲劳产生漏检。
- 传统算法误报率高:基于像素差值或浅层 CNN 的传统方法难以区分季节性植被变化、光照差异与真实的土地覆盖改变,导致大量虚假警报。
- 细节特征丢失严重:现有模型在处理建筑物边缘、道路细微延伸等小尺度变化时表现乏力,无法生成边界清晰的变更图斑。
- 模型泛化能力不足:针对不同地域或传感器拍摄的影像,往往需要重新调整大量参数甚至重新训练,部署成本极高。
使用 ChangeFormer 后
- 自动化批量处理:利用 ChangeFormer 的 Siamese Transformer 架构,系统可自动并行处理成千上万对影像,将原本数周的工作量压缩至数小时完成。
- 抗干扰能力显著增强:凭借 Transformer 强大的全局上下文建模能力,ChangeFormer 能有效抑制云层阴影、季节更替带来的噪声,大幅降低误报率。
- 高精度边界提取:模型在 LEVIR-CD 等数据集上验证的卓越性能,使其能精准捕捉建筑物扩建等细微变化,输出边缘锐利、拓扑准确的变更掩膜。
- 开箱即用的泛化性:直接加载官方预训练的 ChangeFormerV6 权重,即可在不同区域的遥感数据上获得稳定可靠的检测结果,无需从零开始训练。
ChangeFormer 通过将先进的 Transformer 机制引入变化检测,彻底解决了传统方法在复杂场景下“看不清、辨不准、跑不动”的难题,实现了遥感监测的智能化升级。
运行环境要求
- Linux
需要 NVIDIA GPU (脚本中指定 CUDA_VISIBLE_DEVICES),具体型号和显存未说明,需支持 PyTorch 1.10.1
未说明

快速开始
ChangeFormer:一种基于 Transformer 的孪生网络用于变化检测
在 IGARSS-22,马来西亚吉隆坡发表。
有用链接:
- 论文(已发表):https://ieeexplore.ieee.org/document/9883686
- 论文(ArXiv):https://arxiv.org/abs/2201.01293
- 演示视频(YouTube):https://www.youtube.com/watch?v=SkiNoTrSmQM
我的其他变化检测仓库:
网络架构

LEVIR-CD 和 DSIFN-CD 上的定量与定性结果

使用方法
需求
Python 3.8.0
pytorch 1.10.1
torchvision 0.11.2
einops 0.3.2
- 请参阅
requirements.txt获取所有其他依赖项。
设置 conda 环境:
使用以下命令创建名为 ChangeFormer 的虚拟 conda 环境:
conda create --name ChangeFormer --file requirements.txt
conda activate ChangeFormer
安装
克隆此仓库:
git clone https://github.com/wgcban/ChangeFormer.git
cd ChangeFormer
LEVIR 数据集快速入门
我们在文件夹 samples_LEVIR 中提供了一些来自 LEVIR-CD 数据集的样本,方便快速上手。
首先,您可以下载我们训练好的 ChangeFormerV6 模型——通过 Github-LEVIR-Pretrained。
将其放置在 checkpoints/ChangeFormer_LEVIR/ 目录下。
运行演示以开始使用:
python demo_LEVIR.py
您可以在 samples/predict_LEVIR 中找到预测结果。
DSIFN 数据集快速入门
我们在文件夹 samples_DSIFN 中提供了一些来自 DSIFN-CD 数据集的样本,方便快速上手。
下载我们训练好的 ChangeFormerV6 模型——通过 Github。下载完成后,您可以将其放入 checkpoints/ChangeFormer_DSIFN/ 目录中。
运行演示以开始使用:
python demo_DSIFN.py
您可以在 samples/predict_DSIFN 中找到预测结果。
在 LEVIR-CD 上训练
当我们首次训练 ChangeFormer 时,为了加快收敛速度,我们用在 RGB 分割任务(ADE 160k 数据集)上预训练的模型初始化了网络的部分参数。
您可以下载预训练模型 Github-LEVIR-Pretrained。
wget https://www.dropbox.com/s/undtrlxiz7bkag5/pretrained_changeformer.pt
然后,通过更新 run_ChangeFormer_LEVIR.sh 中的 path 参数来指定预训练模型的路径。
此处:
https://github.com/wgcban/ChangeFormer/blob/a3eca2b1ec5d0d2628ea2e0b6beae85630ba79d4/scripts/run_ChangeFormer_LEVIR.sh#L28
您可以在 scripts 文件夹中找到训练脚本 run_ChangeFormer_LEVIR.sh。您可以通过在命令行环境中执行 sh scripts/run_ChangeFormer_LEVIR.sh 来运行该脚本。
详细的 run_ChangeFormer_LEVIR.sh 脚本如下所示:
#!/usr/bin/env bash
#GPU
gpus=0
#设置路径
checkpoint_root=/media/lidan/ssd2/ChangeFormer/checkpoints
vis_root=/media/lidan/ssd2/ChangeFormer/vis
data_name=LEVIR
img_size=256
batch_size=16
lr=0.0001
max_epochs=200
embed_dim=256
net_G=ChangeFormerV6 #ChangeFormerV6 是最终版本
lr_policy=linear
optimizer=adamw #选项:sgd(设置 lr 为 0.01)、adam、adamw
loss=ce #选项:ce、fl(Focal Loss)、miou
multi_scale_train=True
multi_scale_infer=False
shuffle_AB=False
#从预训练权重初始化
pretrain=/media/lidan/ssd2/ChangeFormer/pretrained_segformer/segformer.b2.512x512.ade.160k.pth
#训练和验证划分
split=train #训练
split_val=test #测试、验证
project_name=CD_${net_G}_${data_name}_b${batch_size}_lr${lr}_${optimizer}_${split}_${split_val}_${max_epochs}_${lr_policy}_${loss}_multi_train_${multi_scale_train}_multi_infer_${multi_scale_infer}_shuffle_AB_${shuffle_AB}_embed_dim_${embed_dim}
CUDA_VISIBLE_DEVICES=1 python main_cd.py --img_size ${img_size} --loss ${loss} --checkpoint_root ${checkpoint_root} --vis_root ${vis_root} --lr_policy ${lr_policy} --optimizer ${optimizer} --pretrain ${pretrain} --split ${split} --split_val ${split_val} --net_G ${net_G} --multi_scale_train ${multi_scale_train} --multi_scale_infer ${multi_scale_infer} --gpu_ids ${gpus} --max_epochs ${max_epochs} --project_name ${project_name} --batch_size ${batch_size} --shuffle_AB ${shuffle_AB} --data_name ${data_name} --lr ${lr} --embed_dim ${embed_dim}
在 DSIFN-CD 上训练
遵循与 LEVIR-CD 类似的流程。使用 scripts 文件夹中的 run_ChangeFormer_DSIFN.sh 来在 DSIFN-CD 上进行训练。
在 LEVIR 上评估
您可以在 scripts 文件夹中找到评估脚本 eval_ChangeFormer_LEVIR.sh。您可以通过在命令行环境中执行 sh scripts/eval_ChangeFormer_LEVIR.sh 来运行该脚本。
详细的 eval_ChangeFormer_LEVIR.sh 脚本如下所示:
#!/usr/bin/env bash
gpus=0
data_name=LEVIR
net_G=ChangeFormerV6 #这是最佳版本
split=test
vis_root=/media/lidan/ssd2/ChangeFormer/vis
project_name=CD_ChangeFormerV6_LEVIR_b16_lr0.0001_adamw_train_test_200_linear_ce_multi_train_True_multi_infer_False_shuffle_AB_False_embed_dim_256
checkpoints_root=/media/lidan/ssd2/ChangeFormer/checkpoints
checkpoint_name=best_ckpt.pt
img_size=256
embed_dim=256 #请确保更改嵌入维度(最佳且默认值为 256)
CUDA_VISIBLE_DEVICES=0 python eval_cd.py --split ${split} --net_G ${net_G} --embed_dim ${embed_dim} --img_size ${img_size} --vis_root ${vis_root} --checkpoints_root ${checkpoints_root} --checkpoint_name ${checkpoint_name} --gpu_ids ${gpus} --project_name ${project_name} --data_name ${data_name}
在 DSIFN 上进行评估
请遵循与 LEVIR-CD 相同的评估流程。您可以在 scripts 文件夹中找到评估脚本 eval_ChangeFormer_DSFIN.sh。在命令行环境中,可以通过运行 sh scripts/eval_ChangeFormer_DSIFN.sh 来执行该脚本。
数据集准备
数据结构
具有像素级二值标签的变化检测数据集;
├─A
├─B
├─label
└─list
A:t1 阶段的图像;
B:t2 阶段的图像;
label:标签图;
list:包含 train.txt、val.txt 和 test.txt,每个文件记录变化检测数据集中图像的名称(XXX.png)。
用于训练/验证/测试的处理后数据集链接
您可以通过以下 Dropbox 链接下载处理后的 LEVIR-CD 和 DSIFN-CD 数据集:
由于文件较大,建议使用命令行工具下载,例如在 Linux 系统中运行以下命令:
下载 LEVIR-CD 数据集:
wget https://www.dropbox.com/s/18fb5jo0npu5evm/LEVIR-CD256.zip
下载 DSIFN-CD 数据集:
wget https://www.dropbox.com/s/18fb5jo0npu5evm/LEVIR-CD256.zip
供参考,我还附上了原始 LEVIR-CD 和 DSIFN-CD 的链接:LEVIR-CD 和 DSIFN-CD。
其他有用提示
ChangeFormer 用于多类变化检测
如果您希望将 ChangeFormer 用于多类变化检测,需要对现有代码库进行一些修改,因为当前代码是为二分类变化检测设计的。相关讨论已在 Issues 中展开。所需修改如下(https://github.com/wgcban/ChangeFormer/issues/93#issuecomment-1918609871):
run_ChangeFormer_cd.sh:将n_class设置为 8,并将其作为超参数传递给python main.py。models/networks.py:修改网络定义为net = ChangeFormerV6(embed_dim=args.embed_dim, output_nc=args.n_class)。models/basic_model.py:注释掉pred_vis = pred * 255,即修改可视化处理部分。models/trainer.py:修改混淆矩阵计算模块,使其支持多类别:ConfuseMatrixMeter(n_class=self.n_class)。
许可协议
代码仅用于非商业和科研目的。如需商业用途,请联系作者。
引用
如果您在研究中使用此代码,请引用我们的论文:
@INPROCEEDINGS{9883686,
author={Bandara, Wele Gedara Chaminda and Patel, Vishal M.},
booktitle={IGARSS 2022 - 2022 IEEE International Geoscience and Remote Sensing Symposium},
title={基于 Transformer 的双分支网络用于变化检测},
year={2022},
volume={},
number={},
pages={207-210},
doi={10.1109/IGARSS46834.2022.9883686}}
免责声明
感谢以下仓库的工作:
- https://github.com/justchenhao/BIT_CD(我们的 ChangeFormer 是基于该仓库提供的代码实现的)
版本历史
v0.1.02022/02/20常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。