PaddleCD是基于PaddleSeg2.2修改的变化检测工具集,支持双时相并行输入/Siamese结构与变化标注,含OCR-CD等4种模型,曾用于昇腾杯(复赛TOP14)和PRCV2021(决赛TOP7)。现有训练中inf/nan的bug,原因不明。介绍了项目背景、数据集、方案及完整代码流程,后续将补充模型。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

之前对变化检测有过一些接触,今年下半年在参加PRCV2021遥感图像智能解译技术挑战赛时,为便于对代码进行调整,基于PaddleSeg2.2进行修改,实现了变化检测工具集——PaddleCD
变化检测的数据格式较多样(按标注类型大概分为变化标注、增加标注+减少标注、time1 gt+time2 gt+变化标注等,按网络结构的影像可以分双时相并行输入/Siamese结构、双时相叠加后输入/分割网络)
目前PaddleCD支持的是最简单的双时相并行输入/Siamese结构,标注类型——变化标注。其他结构可以在此项目基础上微调得到,后续如有接触相关内容也会更新。
现有网络OCR-CD——自己魔改结构,SNUNet——ppcd中网络的搬运、DSAMNet——DSAMNet的Paddle复现、CDNet——SenseEarth2020冠军方案Paddle复现
变化检测是从不同时期的遥感数据中定量分析和确定地表变化的特征与过程;遥感变化检测是一个确定和评价各种地表现象随时间发生变化的过程;遥感变化检测是遥感瞬时视场中地表特征随时间发生的变化引起两个时期影像像元光谱响应的变化。[ * ]
PRCV2021遥感图像智能解译技术挑战赛链接:https://captain-whu.github.io/PRCV2021_RS/index.html
昇腾杯-变化检测赛道链接:http://rsipac.whu.edu.cn/subject_two
本项目为昇腾杯-变化检测赛道复赛排名TOP14方案代码实现,PRCV2021项目方案也采用了同样网络结构
原始影像:影像格式为tif,包含R、G、B三个波段, 初赛数据集影像尺寸为512 * 512像素,共3194对样本
标签数据:标签格式为单通道的png,每个像素的标签值由一个数值表示, 使用‘uint8’数据类型存储,该数值表示是否为变化,“0”代表未变化,“1”代表变化。
OCR-CD根据OCRNet与Siamese结构设计得到,
OCR-CD设计有OCR、OCR_M、OCR_P共3种结构,3种结构精度无太大差异,OCR_M、OCR_P由于结构原因占用显存大,训练慢,因此常使用OCR结构
网络结构
OCR、OCR_M、OCR_P的config文件分别在PaddleCD-cd_config下的ocrnet.yml、ocrnet_m.yml、ocrnet_p.yml
# 清除cell输出结果def clear_output():
"""
clear output for both jupyter notebook and the console
"""
import os
os.system('cls' if os.name == 'nt' else 'clear') from IPython.display import clear_output as clear
clear()# 解压数据!unzip -oq /home/aistudio/data/data107059/train_png.zip -d /home/aistudio/data/src/ !unzip -oq /home/aistudio/data/data107059/test_AB_png.zip -d /home/aistudio/data/src/
# 安装依赖库!pip install -r /home/aistudio/PaddleCD/requirements.txt clear_output()
# 生成数据集train.txt val.txt# !python /home/aistudio/work/data_generate.py# 直接拷贝已有的数据集划分文件,保证每次训练评价指标相同!cp /home/aistudio/work/train.txt /home/aistudio/data/src/train.txt !cp /home/aistudio/work/val.txt /home/aistudio/data/src/val.txt
# 模型训练!python /home/aistudio/PaddleCD/train.py \
--config /home/aistudio/PaddleCD/cd_config/ocrnet.yml \
--do_eval \
--use_vdl \
--iters 8000 \
--save_interval 200 \
--save_dir /home/aistudio/data/output \
--batch_size=8 \
--log_iters 20 \
--fp16# 后台训练时,需要清空输出,保证notebook正常导入;notebook训练时,可以不用# clear_output()# 将最优模型拷贝到/home/aistudio/best_model路径下!mkdir /home/aistudio/best_model/
!cp /home/aistudio/data/output/best_model/model.pdparams /home/aistudio/best_model/model.pdparams
!find /home/aistudio/data/output -name '*.log' -exec cp -t /home/aistudio/best_model/ "{}" +# 普通测试!python /home/aistudio/PaddleCD/val.py \
--config /home/aistudio/PaddleCD/cd_config/ocrnet.yml \
--batch_size 16 \
--model_path /home/aistudio/best_model/model.pdparams# 增强测试!python /home/aistudio/PaddleCD/val.py \
--config /home/aistudio/PaddleCD/cd_config/ocrnet.yml \
--aug_eval \
--flip_vertical \
--batch_size 16 \
--model_path /home/aistudio/best_model/model.pdparams!python /home/aistudio/work/data_sta.py
# 增强推理, 推理结果保存在/home/aistudio/data/src/result下!python /home/aistudio/PaddleCD/predict.py \
--config /home/aistudio/PaddleCD/cd_config/ocrnet.yml \
--model_path /home/aistudio/best_model2/model.pdparams \
--image_path /home/aistudio/data/src/test_AB_png/A \
--image_path2 /home/aistudio/data/src/test_AB_png/B \
--aug_pred \
--flip_vertical \
--batch_size 32 \
--save_dir /home/aistudio/data/srcfrom PIL import Imagefrom collections import namedtupleimport matplotlib.pyplot as plt
Cls = namedtuple('cls', ['name', 'id', 'color'])
Clss = [
Cls('bg', 0, (0, 0, 0)),
Cls('change', 1, (255, 255, 255)),
]def get_putpalette(Clss, color_other=[0, 0, 0]):
'''
灰度图转8bit彩色图
:param Clss:颜色映射表
:param color_other:其余颜色设置
:return:
'''
putpalette = [] for cls in Clss:
putpalette += list(cls.color)
putpalette += color_other * (255 - len(Clss)) return putpalette
bin_colormap = get_putpalette(Clss)%matplotlib inline img1_path = r'/home/aistudio/data/src/test_AB_png/A/1.png'img2_path = r'/home/aistudio/data/src/test_AB_png/B/1.png'pred_path = r'/home/aistudio/data/src/result/1.png'img1 = Image.open(img1_path) plt.imshow(img1) plt.show() img2 = Image.open(img2_path) plt.imshow(img2) plt.show() pred = Image.open(pred_path) pred.putpalette(bin_colormap) plt.imshow(pred) plt.show
<Figure size 432x288 with 1 Axes>
<Figure size 432x288 with 1 Axes>
<function matplotlib.pyplot.show(*args, **kw)>
<Figure size 432x288 with 1 Axes>
以上就是昇腾杯-变化检测赛道复赛方案分享——PaddleCD的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号