0

0

昇腾杯-变化检测赛道复赛方案分享——PaddleCD

P粉084495128

P粉084495128

发布时间:2025-07-22 17:07:45

|

980人浏览过

|

来源于php中文网

原创

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

☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜

昇腾杯-变化检测赛道复赛方案分享——paddlecd - php中文网

简述

  • 基于PaddleSeg2.2,修改dataset、model、train、val等,实现变化检测功能,使用过程与PaddleSeg完全一致,便于快速进行网络训练、推理
  • 基于PaddleCD使用OCR-CD(魔改OCR-Net),在昇腾杯-变化检测赛道复赛排名TOP14,PRCV2021决赛排名TOP7
  • 目前仅实现了OCR-CD、SNUNet、DSAMNet、CDNet,后续会补充模型
  • 目前存在bug,训练一段时间后Found inf or nan, current scale is: 0.0, decrease to: 0.0 * 0.5,出现原因不详、出现时间不固定;且仅在前期收敛

更新

  • v2:更新部分表述
  • v3:更新项目背景、数据集说明

1.项目背景

1.1 PaddleCD

之前对变化检测有过一些接触,今年下半年在参加PRCV2021遥感图像智能解译技术挑战赛时,为便于对代码进行调整,基于PaddleSeg2.2进行修改,实现了变化检测工具集——PaddleCD

       

变化检测的数据格式较多样(按标注类型大概分为变化标注、增加标注+减少标注、time1 gt+time2 gt+变化标注等,按网络结构的影像可以分双时相并行输入/Siamese结构、双时相叠加后输入/分割网络)

       

目前PaddleCD支持的是最简单的双时相并行输入/Siamese结构,标注类型——变化标注。其他结构可以在此项目基础上微调得到,后续如有接触相关内容也会更新。

       

现有网络OCR-CD——自己魔改结构,SNUNet——ppcd中网络的搬运、DSAMNet——DSAMNet的Paddle复现、CDNet——SenseEarth2020冠军方案Paddle复现

       

1.2 比赛介绍

变化检测是从不同时期的遥感数据中定量分析和确定地表变化的特征与过程;遥感变化检测是一个确定和评价各种地表现象随时间发生变化的过程;遥感变化检测是遥感瞬时视场中地表特征随时间发生的变化引起两个时期影像像元光谱响应的变化。[ * ]

PRCV2021遥感图像智能解译技术挑战赛链接:https://captain-whu.github.io/PRCV2021_RS/index.html

昇腾杯-变化检测赛道链接:http://rsipac.whu.edu.cn/subject_two

       

1.3 本项目内容

本项目为昇腾杯-变化检测赛道复赛排名TOP14方案代码实现,PRCV2021项目方案也采用了同样网络结构

2.数据集介绍

  • 原始影像:影像格式为tif,包含R、G、B三个波段, 初赛数据集影像尺寸为512 * 512像素,共3194对样本

  • 标签数据:标签格式为单通道的png,每个像素的标签值由一个数值表示, 使用‘uint8’数据类型存储,该数值表示是否为变化,“0”代表未变化,“1”代表变化。

3.项目方案——OCR-CD

  • OCR-CD根据OCRNet与Siamese结构设计得到,

    Programming Helper
    Programming Helper

    AI代码自动生成器,在AI的帮助下更快地编程

    下载
  • OCR-CD设计有OCR、OCR_M、OCR_P共3种结构,3种结构精度无太大差异,OCR_M、OCR_P由于结构原因占用显存大,训练慢,因此常使用OCR结构

  • 网络结构

    • backbone——使用HRNet分别对双时相影像进行特征提取,得到f1、f2
    • 特征处理
      • OCR: 取f1、f2差值的绝对值fb
      • OCR_M: 将f1、f2在通道维度合并得到fb
      • OCR_P: 取f1、f2差值的绝对值fb,将f1、f2在通道维度合并得到fa
    • 输出头
      • OCR、OCR_M:1个OCRHead
      • OCR_P:2个OCRHead分别处理fb,fa
  • OCR、OCR_M、OCR_P的config文件分别在PaddleCD-cd_config下的ocrnet.yml、ocrnet_m.yml、ocrnet_p.yml

4.PaddleCD必要结构说明

  • cd_config:存放配置文件
  • paddleseg:核心代码
    • core:包含具体的train、val、infer、predict代码,seg与cd有所不同
    • transforms:数据预处理部分,seg与cd有所不同
    • models:模型存放路径,cd部分——ocrnet、snunet、dsamnet、cdnet_parallel、cdnet_fusion,其余部分未修改,仍是seg功能
    • datasets:存放数据集格式代码,本项目使用的是rscd中自定义的数据,可根据输入输出的不同进行修改
    • cvlibs: 相关代码库,未修改
    • utils: 相关代码库,未修改
  • train.py: 调用核心代码的train过程
  • val.py: 调用核心代码的val过程
  • predict.py: 调用核心代码的predict过程

5.项目完整代码

数据预处理

In [ ]
# 清除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()
   
In [ ]
# 解压数据!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/
   
In [ ]
# 安装依赖库!pip install -r /home/aistudio/PaddleCD/requirements.txt
clear_output()
   
In [ ]
# 生成数据集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
   

网络训练

In [9]
# 模型训练!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()
   
In [ ]
# 将最优模型拷贝到/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/ "{}" +
   

测试

In [7]
# 普通测试!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
   
In [8]
# 增强测试!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
   
In [ ]
!python /home/aistudio/work/data_sta.py
   

推理

In [ ]
# 增强推理, 推理结果保存在/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/src
   

推理展示

In [ ]
from 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)
   
In [ ]
%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>
               

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

WorkBuddy
WorkBuddy

腾讯云推出的AI原生桌面智能体工作台

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
C# ASP.NET Core微服务架构与API网关实践
C# ASP.NET Core微服务架构与API网关实践

本专题围绕 C# 在现代后端架构中的微服务实践展开,系统讲解基于 ASP.NET Core 构建可扩展服务体系的核心方法。内容涵盖服务拆分策略、RESTful API 设计、服务间通信、API 网关统一入口管理以及服务治理机制。通过真实项目案例,帮助开发者掌握构建高可用微服务系统的关键技术,提高系统的可扩展性与维护效率。

76

2026.03.11

Go高并发任务调度与Goroutine池化实践
Go高并发任务调度与Goroutine池化实践

本专题围绕 Go 语言在高并发任务处理场景中的实践展开,系统讲解 Goroutine 调度模型、Channel 通信机制以及并发控制策略。内容包括任务队列设计、Goroutine 池化管理、资源限制控制以及并发任务的性能优化方法。通过实际案例演示,帮助开发者构建稳定高效的 Go 并发任务处理系统,提高系统在高负载环境下的处理能力与稳定性。

38

2026.03.10

Kotlin Android模块化架构与组件化开发实践
Kotlin Android模块化架构与组件化开发实践

本专题围绕 Kotlin 在 Android 应用开发中的架构实践展开,重点讲解模块化设计与组件化开发的实现思路。内容包括项目模块拆分策略、公共组件封装、依赖管理优化、路由通信机制以及大型项目的工程化管理方法。通过真实项目案例分析,帮助开发者构建结构清晰、易扩展且维护成本低的 Android 应用架构体系,提升团队协作效率与项目迭代速度。

83

2026.03.09

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

97

2026.03.06

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

223

2026.03.05

PHP高性能API设计与Laravel服务架构实践
PHP高性能API设计与Laravel服务架构实践

本专题围绕 PHP 在现代 Web 后端开发中的高性能实践展开,重点讲解基于 Laravel 框架构建可扩展 API 服务的核心方法。内容涵盖路由与中间件机制、服务容器与依赖注入、接口版本管理、缓存策略设计以及队列异步处理方案。同时结合高并发场景,深入分析性能瓶颈定位与优化思路,帮助开发者构建稳定、高效、易维护的 PHP 后端服务体系。

458

2026.03.04

AI安装教程大全
AI安装教程大全

2026最全AI工具安装教程专题:包含各版本AI绘图、AI视频、智能办公软件的本地化部署手册。全篇零基础友好,附带最新模型下载地址、一键安装脚本及常见报错修复方案。每日更新,收藏这一篇就够了,让AI安装不再报错!

169

2026.03.04

Swift iOS架构设计与MVVM模式实战
Swift iOS架构设计与MVVM模式实战

本专题聚焦 Swift 在 iOS 应用架构设计中的实践,系统讲解 MVVM 模式的核心思想、数据绑定机制、模块拆分策略以及组件化开发方法。内容涵盖网络层封装、状态管理、依赖注入与性能优化技巧。通过完整项目案例,帮助开发者构建结构清晰、可维护性强的 iOS 应用架构体系。

246

2026.03.03

C++高性能网络编程与Reactor模型实践
C++高性能网络编程与Reactor模型实践

本专题围绕 C++ 在高性能网络服务开发中的应用展开,深入讲解 Socket 编程、多路复用机制、Reactor 模型设计原理以及线程池协作策略。内容涵盖 epoll 实现机制、内存管理优化、连接管理策略与高并发场景下的性能调优方法。通过构建高并发网络服务器实战案例,帮助开发者掌握 C++ 在底层系统与网络通信领域的核心技术。

34

2026.03.03

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号