读论文《SNUNet-CD: A Densely Connected Siamese Network for Change Detection of VHR Images》

SNUNet-CD: A Densely Connected Siamese Network for Change Detection of VHR Images论文介绍 该论文受DenseNet and NestedUNet启发,设计了一个类似于DenseNet的结构。因为在利用神经网络提取图片特征时,往往提取到的高阶特征有着较为丰富的语义信息,但是提取高阶特征往往伴随着下采样(尺寸缩小)导致位置信息丢失或者误差较大,简单的上采样方式无法恢复位置信息,而浅层特征往往能够保留较为精准的位置信息。...... 阅读详情

SNUNet-CD: A Densely Connected Siamese Network for Change Detection of VHR Images

SNUNet-CD:稠密连接孪生网络——超高分辨率影像变化检测

链接:SNUNet-CD: A Densely Connected Siamese Network for Change Detection of VHR Images | IEEE Journals & Magazine | IEEE Xplore

Abstract(摘要)

        变化检测是遥感影像分析中的一项重要任务,它广泛应用于自然灾害监测与评估、土地资源规划和其他领域。作为一个“像素到像素”的预测任务,变化检测对原始位置信息的利用很敏感。常用的变化检测方法总是注重提取深层的语义特征变化,忽视了浅层的高分辨率、细粒度特征的重要性,这导致了目标边界像素的判断缺失和细小变化的遗漏。

        本文提出了一个用于变化监测的稠密连接孪生网络,命名为SNUNet-CD(联合孪生网络与Nested-UNet)。SNUNet-CD通过编码器与解码器之间紧密的信息传输减少了深层网络训练中位置信息的丢失,同时还提出了一种集成通道注意力机制(ECAM)进行深层监督。通过ECAM可将不同语义级别的最具代表性的特征进行细化,并用于最终的分类。实验结果表明,本文所用方法极大地改进了许多评估标准,与其他先进的变化检测算法相比,本文所用方法在精度和计算量上有更好的权衡。

        关键词:变化检测、深度学习、全连接孪生网络、遥感影像

I. INTRODUCTION(介绍)

        变化检测是检测同一地区不同时间的多时态遥感影像发生语义变化的像素。许多因素可以导致“语义变化”,例如要素的变形、相对运动、新增或消失。变化检测的难点在于最终的变化图不应包含“非语义变化”,例如相机的运动、传感器的噪声、光线的变化等。另一个难点是,“变化”的定义可能因为应用方向和人的主观意识而各有不同。例如,在许多案例中,双时相影像来源于不同的季节,如图1。

图1 CDD数据集中的不同季节的双时相遥感影像

         注:(a)与(b)为原始影像;(c)为变化情况;(d)为FC-Siam-diff(一种常用的变化检测方法)的结果;(e)为本文方法的结果。

        这里“变化”指的是人工设施的变化,如建筑物和汽车,季节性的变化被视为干扰因素。因此,许多传统的变化检测方法(如差分、CVA和PCA&K-means)可以在简单的场景中取得有效的结果,但在复杂场景下表现不佳。

        近年来,许多场景分割的神经网络模型已经应用于变化检测任务来提取更深层次的特征。首先,U-Net创建了基准模型,然后,孪生网络嵌入成为变化检测的标准模型。为了提升变化检测的性能,许多功夫用在深层特征的提取和细化上。论文[10]中使用金字塔模型提取多尺度特征,论文[9]和论文[12]中使用深层监督来增强浅层特征的表现力和识别能力,引入注意力机制来细化特征,获得更好的特征表示,例如论文[9]中的空间和通道注意力、论文[10]的自注意力、论文[11]的双层注意力等。

        尽管这些方法在实际应用中取得了成功,但一个共同的问题是:连续下采样过程丢失了准确的空间位置信息,这往往导致像素边缘检测不准确和细小目标的遗漏,如图1d所示。许多研究表明,神经网络的浅层包含了细粒度的位置信息,深层则包含了粗粒度的语义信息。受到DenseNet和NestedUNet的启发,我们设计了变化检测的稠密连接孪生网络,通过编码器与解码器之间的稠密跳跃连接,可以保留高分辨率、细粒度的特征表示。由于最终的骨干网络是孪生网络与嵌套U-Net网络结构的联合,我们将其命名为SNUNet-CD。

        SNUNet-CD的骨干有不同层次的多组输出。为了实现最终的浅层特征、深层特征和语义信息的自然融合并抑制深层监督的语义差距,我们在深层监督中引入了通道注意力机制(CAM),提出了集成通道注意力机制(ECAM)。实验结果表明,ECAM可以对多层次的语义特征进行融合和细化,并取得更好的结果。

        本文的贡献如下:

        1)我们提出了基于NestedUNet的稠密连接SNUNet-CD模型用于遥感变化检测,SNUNet-CD模型降低了深层神经网络中定位信息的丢失。

        2)提出了ECAM模块用于融合和细化多层次语义特征,一定程度上抑制了语义错误和位置错误。

        3)通过一系列实验比较,我们的方法在F1评分和计算复杂度上优于其他最先进的(SOTA)方法,我们的源码发布在GitHub上。 http

遥感影像变化检测实战:手把手教你用SNUNet-CD识别城市建筑变化(附PyTorch代码) 本文提供了基于SNUNet-CD模型进行遥感影像变化检测的完整实战教程。通过详解其Siamese Network与Densely Connected架构,并手把手指导环境配置、数据处理、模型训练及可视化分析,帮助开发者快速掌握利用深度学习精准识别城市建筑变化的核心技术。 阅读详情

相关推荐

论文笔记:基于深度学习的遥感影像变化检测综述

论文主要信息 标题:Deep learning for change detection in remote sensing images: comprehensive review and meta-analysis 原文地址:https://arxiv.org/abs/2006.05612v1 文章组织架构 文章主要分成以下几个部分: 首先介绍了常用的深度学习的变化检测方法及其技术基础; 其次展示了对于变化检测方法的元分析的细节; 再次概述了已有的基于深度学习的遥感影像变化检测方法; 在

ZergWang's Blog 1万+

CDD诊断数据库的简单介绍

数据库是以结构化方式组织的一个数据集合。比如DBC数据库:Display通过结构化的方式把网络节点Display里Rx报文EngineState(0x123)层层展开。这种方层次清晰,结构分明,易于查找。CDD的全称为CANdelaStudio Diagnostic Description,它是由Vector公司制定的一个以结构化方式组织的诊断命令集。介绍信息和ECU所支持的通讯接口(CAN、LIN等)支持的DTC列表(诊断错误代码)支持的通用诊断服务支持的变种分类。

jasonj333 2197

变化检测最常用数据集之一的CDD数据集

用于深度学习变化检测,包含同一地区不同时间的影像和标签文件。可用于神经网络的模型训练、验证、和测试等。适用于变化检测初学者,包含jpg文件和png文件,如需要转换格式脚本可与作者联系获取。希望该资源能够对您的研究提供帮助。

从晶体管到触发器:为什么芯片设计必须区分同步/异步复位?

本文深入探讨了芯片设计中同步复位与异步复位的物理本质与工程权衡。从晶体管级的CMOS结构出发,剖析了两种复位方式在物理实现、时序可靠性(如建立/保持时间、恢复/移除时间)上的根本差异,并分析了在不同应用场景下的选择策略。文章强调,理解复位信号的底层机制对于确保芯片时序收敛、系统上电确定性及整体鲁棒性至关重要。

time3的博客 215

Cursor 使用教程(2025年更新版)

官方Cursor详细使用教程在“扩展学习”

我是赛博AI Lewis 7065

微信支付V2,jsapi支付拉起收银台报错:调用支付JSAPI缺少参数:total_fee

拉起收银台报错

m0_54355172的博客 3857

三大主流交易接口实战指南:XTP、CTP与数字货币API的实盘接入解析

本文深入解析了量化交易系统实现实盘交易的关键环节,聚焦于三大主流交易接口的实战接入。详细介绍了证券领域的XTP、期货领域的CTP以及数字货币交易所API的核心特性、代码封装要点与风控实践,并提供了多市场接口整合的统一架构方案,为开发者打通量化交易的“最后一公里”提供了一份接地气的实战指南。

win55的博客 1368

从ADRV9002到ADRV9003:手把手教你移植FPGA驱动,避开那些官方没说的坑

本文详细介绍了从ADRV9002到ADRV9003的FPGA驱动移植实战指南,重点解析了两者在硬件架构上的关键差异,如通道配置和DPD功能的移除。通过提供完整的移植步骤、调试技巧和性能优化建议,帮助工程师避开官方文档未提及的常见陷阱,实现高效驱动开发。

weixin_28738397的博客 168

【论文阅读】2021-(Pidinet)Pixel Difference Networks for Efficient Edge Detection

文章目录摘要1. Introduction 摘要 motivations: 基于CNN的边缘检测的高性能是通过一个大的预训练CNN主干来实现的,该主干占用大量内存和能量。传统边缘检测器(如Canny、Sobel和LBP)很少被研究。 contributions: 提出了一种简单、轻量级但有效的架构,称为像素差分网络(PiDiNet),用于有效的边缘检测。PiDiNet采用了新颖的像素差卷积,将传统的边缘检测算子集成到现代CNN中流行的卷积运算中,以增强任务性能。 experiments: 在BSDS500

轻舟的万重重山 1万+

C3 模块与普通 Bottleneck 堆叠区别

维度普通 Bottleneck 堆叠C3 模块设计理念残差学习CSP + 特征分治信息路径单一路径双路径(主干 + bypass)融合方式相加(Add)拼接(Concat)+ 卷积计算效率较低高(通道减半)特征保留弱(多次非线性)强(直连保留原始信息)梯度传播单一主路径多样化、更稳定任务适配通用(分类为主)专为目标检测优化可扩展性有限极强(即插即用各种模块)实际性能基准线显著优于(尤其在小目标和效率方面)

浩瀚之水的专栏 105

基于综合阻抗特征的配电架空线路单相断线故障区段定位研究

本文提出了一种基于综合阻抗特征的配电架空线路单相断线故障区段定位方法。通过分析故障后正序、负序阻抗变化,构造综合阻抗判据实现精准定位。仿真结果表明:该方法能有效识别故障区段,差异度判据显著(故障区段达0.508,非故障区段<0.016);对过渡电阻(1-200Ω)和负荷变化具有强鲁棒性,定位准确率不受影响。相比传统方法,综合阻抗法放大了断线故障特征,解决了弱故障信号检测难题,为配电网安全运行提供了可靠的技术手段。

AI的内部世界的博客 75

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

上一篇: Python计算图像纹理-灰度共生矩阵
下一篇: 读论文《Learning to Measure Changes: Fully Convolutional Siamese Metric Networks for Scene Change Detec》
一只大笨猪
博客等级 码龄11年 216粉丝 31原创
评论 9
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值