遥感目标检测(2)--SCRDet

目录

一、概述

二、三个挑战 

三、网络结构

1、SF-Net

 2、MDA-Net(Multi-Dimensional Attention Network)

3、Rotation Branch

四、损失函数

五、实验


一、概述

        SCRDet(Towards More Robust Detection for Small,Cluttered and Rotated Objects)来自ICCV2019,two-stage 网络,在对于小尺寸、任意方向、密集分布下的物体提出多类别旋转检测器,设计了一种将多层特征与有效锚定采样相结合的采样融合网络SF-Net,以提高对小物体的灵敏度。

        本文为了抑制噪声和突出目标特征,引入了通道注意力网络和像素点注意力机制网络MDA-Net(这里包含了SE-Net)。

        为了准确的目标估计,在SmoothL1Loss中加入IoU常数因子,解决旋转边界框回归问题。

二、三个挑战 

        由于大多数场景下没有关注鲁棒性目标检测中的小物体,杂乱排列,任意方向的问题,在现实中由于相机分辨率问题,很多场景下的对象可能是非常小的尺寸,可能以密集形式排列且方向不一,例如商店中的商品和高分辨率图片中街道上的人脸。所以本文提出目标检测中的三个挑战:

(1)小物体:遥感图像中的小物体经常被复杂的环境所覆盖。本文设计一种采样融合网络,将多层特征融合到有效anchor采样中,以提高对于小型目标的检测灵敏度。

(2)杂乱排列:由于被检测物体经常是紧密排列的。本文使用有监督的像素注意力网络和通道注意力网络,来抑制噪声和突出物体的特征,提高对于小而杂乱的目标检测。

(3)任意方向:由于遥感图片中的物体以不同方向出现。本文为保证准确进行旋转估计,提出将IoU常数因子引入Smooth L1 Loss中,来解决旋转边界框回归问题。

三、网络结构

         本文SCRDet以ResNet作为bacebone,由SF-Net,MDA-Net,Rotation Branch组成。

SF-Net:用于多层特征融合和有效锚框采样,解决目标信息不足和锚框样本不足问题。

MDA-Net:通过生成权重的方法对目标进行强化,背景进行弱化,增强错误检测和减少漏检的问题。

Rotation Branch:对于新的特征图feature map进行检测,进行RPN提取候选框,候选框映射到特征图后进行ROI Align,对目标进行分类和回归,对每个方案进行改进的单元参数回归和旋转非最大抑制(R-NMS)操作。

1、SF-Net

        首先本文提出检测小物体的主要障碍:物体特征信息不足和锚框采样不足。

        原因:

(1)使用了池化层,使得小对象在深层网络下丢失了大部分特征信息。(池化操作会使区域内的特征值聚合,减少特征图大小,减少区域内特征点的数量,而对于小目标而言,本身特征点就较少,池化后会进一步减少特征点数量,另外池化操作也会使特征图分辨率降低,限制对小目标特征信息的提取)

(2) 高阶特征图的采样步幅较大,容易跳过小的目标,导致采样不足。如下图所示,步长大的a图,效果非常不好,但不可否认采样点增多也会带来参数量增大的问题。

        本文提出了两个解决方案:

(1)特征融合:低阶特征图可以保存目标较小的特征信息,而高阶特征图可以包含更高层次的语义线索(这也忽视了小目标的特征),常见的特征融合方法有FPN、TDM、ROM,本文只是进行列举,没有使用。

(2)更好的抽样,训练样本不足和不平衡会导致影响检测性能,所以引入期望最大重叠(EMO)分数,通过计算锚框与对象之间的期望最大交集(IoU),发现步幅越小,EMO得分越高。(类似上图的数学解释)

        SF-Net网络结构如下:

        输入一张图片,根据缩放因子S_A不同,提取不同尺寸C2、C3、C4的特征图,将C3、C4在SF-Net中进行特征融合得到特征图F3。

 2、MDA-Net(Multi-Dimensional Attention Network)

        由于航拍图像等真实数据的复杂性,RPN提供的方案会引入大量的噪声信息。过多的噪声会淹没目标信息,使目标信息边界模糊,导致漏检,如下图(a)。下面其余各图为(b)输入注意力网络的特征图(c)输出注意力网络的特征图(d)显著性图(e)二值化图(f)真实图

        由于当前的解决噪声、遮挡的注意力网络都是无监督的,本文提出一个有监督多维注意力网络(MDA-Net),由通道注意力网络(SE-Net)和像素注意力网络(Pixel Attention)组成。

像素注意力网络

        流程:F3经过Inception(具有不同比值的卷积核的模块),用于对不同尺度的特征进行提取,然后经过两个卷积得到双通道的显著性映射(上图(d)),使用softmax对显著性映射(范围处理为[0,1],降低噪声,增强目标特征信息)进行处理,将其中一个通道与F3融合(论文就用了其中一个)。

        注意力损失:将双通道的显著性映射进行二值化处理,得到含有目标区域的二值化图,显著性高和显著性低的区域分别赋值0和1,进行二值交叉熵损失作为注意力损失。

通道注意力网络

        流程:将F3使用GAP输出C个特征通道的数值分布,全连接将特征维度降低到输入的1/r,进入ReLU激活后,再经过全连接层变回原维度,再用Sigmoid进行激活,获得[0,1]之间的归一化权重,最后将输出与F3融合。

3、Rotation Branch

        从旋转框的参数计算来看,还是与R3Det相同的,可以参考上一个博文。

        本文提出了一个R-NMS(旋转非最大抑制)的算法,对于集中数据的方向的多样,设定不同的阈值。避免出现使用水平NMS而导致破坏bounding box的预测。

四、损失函数

        SCR-Det的多任务损失如下,分为边界框回归损失、注意力损失、分类损失三个部分。

         

边界框回归损失

        N:候选框数量,\lambda_1:控制权重的超参数,t_n':二进制数,表示背景和前景,v_{nj}真实框偏移向量(对于x,y,w,h,θ五个参数),v'_{nj}预测框偏移向量。

        边界框回归损失使用Smooth  L1损失。

        添加IoU常数因子:文中提出,由于旋转框角度存在周期性,在大角度下,存在较大的损失,增大了回归的多样性,所以提出引入IoU常数因子,避免|-log(IoU)|骤降为0,|-log(IoU)|作为梯度下降的大小。

        \frac{L_{reg}(v'_{nj},v_{nj})}{|L_{reg}(v'_{nj},v_{nj})|}:控制梯度方向。

        下图为Smooth L1损失和使用IoU的Smooth IoU损失的预测框。

注意力损失

        h*w:表示GT框的高和宽,\lambda_2:控制权重的超参数,u'_{ij},u_{ij}代表mask后的标记值和预测值。

        注意力损失使用softmax交叉熵。

分类损失

        N:候选框数量,\lambda_3:控制权重的超参数,p_n:用softmax函数计算的各类别对应的概率分布,t_n:各类别的标签

        分类损失使用softmax交叉熵。

五、实验

        对于不同的缩放因子S_A在DOTA的OBB(任意四边形)和HBB(一般水平四边形)两种标注的数据集下进行测试,可以看到缩放因子S_A在6的时候mAP最高,用时也是最高。(感觉也是考虑了DOTA数据集的物体的分布,最后选择了6)

        HBB:horizontal bounding box,通常为(x,y,w,h)

        OBB:oriented bounding box,通常为(x,y,w,θ)或者(x1,y1,x2,y2,x3,y3,x4,y4)的四个角点坐标的形式。

        对于使用SCRDet的不同模块做了对比,backbone貌似是RetinaNet做的,可以看到SCR-Det的每一个分支都是不可替代的,还是相对还好的,但是最后一行添加的P不是很懂什么意思。

        对于OBB和HBB类型数据集下的主流模型进行对比,backbone也是RetinaNet,可以看到mAP提升还是很可观的,但是速度方面就不太清楚了,感觉RoI-Transformer这种trick极度倾向简化方向和YOLOV2这类one-stage的应该会快于SCRDet。

         下图是对于不同数据集上,与其他two-stage的模型进行对比。另外进行MDA-Net的有监督和无监督模块的对比,有监督学习的mAP仍要高于无监督学习。

        下面对于COCO、VOC2007、ICDAR2015的通用数据集使用MDA-Net、IoU-Smooth模块测试模块的通用性,在密集对象和小目标上性能具有显著提升。 

<think>好的,用户想要了解遥感变化检测论文的复现方法和代码实现。首先,我需要回忆一下相关的知识。遥感变化检测主要是通过分析不同时间段的遥感图像,识别出地表的变化,比如建筑物、植被等的变化。复现这类论文通常需要处理数据、搭建模型、训练和验证等步骤。 根据用户提供的引用,有三个相关的项目:ChangeMamba、LSNet和STANet。我需要结合这些引用的内容来给出具体的建议。例如,引用[2]提到了LSNet的数据加载器代码,这可能涉及如何读取和处理图像对及其标签。用户可能需要调整数据路径和预处理步骤,这部分需要注意文件目录的结构和图像格式的转换,比如将.tif转换为.png。 另外,引用[3]讨论了STANet复现中的问题,特别是特征距离的计算和维度调整。这说明在复现过程中可能会遇到张量维度不匹配的问题,需要仔细检查模型的每一层输入输出,并正确使用permute等函数调整维度顺序。 接下来,我应该分步骤来指导用户如何复现论文。首先是数据准备,需要确保数据集的格式与代码要求一致,可能需要调整数据加载器中的路径和图像处理方式。然后是模型搭建,根据论文的架构选择合适的框架,比如PyTorch,并注意模型组件的实现细节,比如特征提取和差异检测模块。 在训练过程中,超参数设置和损失函数的选择也很重要,可能需要参考论文中的优化器和学习率策略。同时,数据增强可以提高模型的泛化能力,需要根据代码中的train_transforms和test_transforms进行调整。 验证阶段,用户需要加载预训练模型,使用测试集评估性能,并生成变化检测结果图。可视化结果有助于直观检查模型效果,可能需要使用matplotlib等库。 最后,常见问题如张量维度错误、数据路径错误、梯度爆炸等,需要给出解决方案,比如检查数据路径、调整维度、使用梯度裁剪等。此外,推荐相关的论文和开源项目可以帮助用户进一步深入研究。 需要确保回答结构清晰,步骤明确,并且结合用户提供的引用内容,给出具体的代码示例和调整建议。同时,生成的相关问题要围绕用户的需求展开,比如数据准备、模型选择、调参技巧等,帮助用户全面了解复现过程中可能遇到的挑战和解决方法。</think>针对遥感变化检测论文复现的实现方法,结合提供的引用内容和实践经验,整理步骤如下: ### 一、数据准备与预处理 1. **数据集结构**需按论文要求组织: ```python # 引用[2]的目录结构示例 dataset/ ├── A/ # 时相1影像 ├── B/ # 时相2影像 └── label/ # 变化标签 ``` 需注意图像格式转换(如.tif转.png)[^2] 2. **数据加载器实现**参考: ```python # 引用[2]的dataloader核心代码 def cdd_loader(img_path, label_path, aug): img1 = Image.open(dir + 'A/' + name) img2 = Image.open(dir + 'B/' + name) label = Image.open(label_path.replace('.tif','.png')) sample = {'image': (img1, img2), 'label': label} # 应用数据增强 return sample['image'][0], sample['image'][1], sample['label'], name ``` ### 二、模型搭建要点 1. **双时相特征提取**: - 使用孪生网络结构处理两时相影像 - 推荐使用ResNet、ViT等作为backbone 2. **特征差异计算**: ```python # 引用[3]的特征距离计算实现 self.feat_A = feat_A.permute(0, 2, 3, 1) # 调整维度顺序 self.feat_B = feat_B.permute(0, 2, 3, 1) self.dist = F.pairwise_distance(feat_A, feat_B, keepdim=True) self.dist = dist.permute(0, 3, 1, 2) # 恢复原始维度[^3] ``` ### 三、训练配置 1. **损失函数选择**: - 常用交叉熵损失:`nn.CrossEntropyLoss()` - 针对类别不平衡可添加Dice Loss 2. **训练参数设置**: ```python optimizer = torch.optim.Adam(model.parameters(), lr=1e-4) scheduler = torch.optim.lr_scheduler.ReduceLROnPlateau(optimizer, 'min') ``` ### 四、结果验证 1. **性能评估指标**: - 总体精度(OA) - Kappa系数 - F1-score(针对变化类) 2. **可视化实现**: ```python plt.imshow(pred_mask, cmap='jet') plt.title('Change Detection Result') ``` ### 五、常见问题解决 1. **张量维度错误**: - 检查特征图通道顺序(NCHW vs NHWC) - 使用`permute()`调整维度 2. **梯度爆炸**: - 添加梯度裁剪:`torch.nn.utils.clip_grad_norm_()` - 调整学习率至1e-5量级
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值