【论文】DARDet: A Dense Anchor-free Rotated Object Detector in Aerial Images

DARDet是一种新型的无锚点旋转目标检测算法,它直接预测每个前景像素的旋转边界框参数,采用对齐卷积模块(ACM)提取对齐特征,并引入PIoU损失解决边界不连续问题。实验表明,DARDet在DOTA、HRSC2016和UCAS-AOD数据集上表现出色,提升了检测精度和效率。
部署运行你感兴趣的模型镜像

目录

摘要

一、引言

二、算法

​1.总体结构

(1) 特征提取模块

(2)DarDet head

2.对齐卷积模块

3.PIoU损失

三、实验部分

1. 数据集

2. 环境设置

3. 消融试验

4. 与SOTA的对比

 


摘要

 DARDet:Dense anchor-free rotated object detector

  • 直接在特征图的每个前景像素上预测出旋转边界框的五个参数;
  • 使用新的对齐卷积模块提取对齐特征;
  • 引入PIoU损失

一、引言

(1) 当航空影像的目标具有不同的尺度和长宽比,并且方向任意且密集分布,导致检测任务存在巨大挑战。

(2) 现存的anchor-based方法都是在矩形边界框的基础上引入了额外的角度维度的信息,并使用距离损失进行优化。这种anchor-based模型对anchor超参数敏感,并且容易产生因边界不连续而导致性能退化的问题。

(3)现存的anchor-free算法都是基于关键点的检测器,每个OBB值对应一个训练样本,导致训练时间很长,且难以解决边界不连续的问题。此外,这类方法的特征与旋转边界框往往是不对齐的。

(4)本研究在VarifocalNet的基础上提出了一个密集的anchor-free的旋转目标检测器:

  • 直接预测一个用于OBB编码的五维向量(x', y', w', h',\theta ')
DARDet直接预测的五维向量
  •  使用对齐卷积模块(ACM)将特征与OBB对齐
  • 引入PIoU损失解决边界不连续问题

二、算法



1.总体结构

(1) 特征提取模块

  • 由Backbone和FPN组成

(2)DarDet head

  定位子网络:

  • 输入特征金字塔的每一层特征图,使用1个3×3的卷积生成一个256通道的特征图;
  • 在初始化和优化阶段分别进行OBB的回归和精炼
  • 在初始化阶段,使用一个卷积层在每个空间位置上生成一个5D向量(x', y', w', h',\theta '),并利用ACM模块提取对齐特征
  • 在优化阶段,利用对齐特征图生成一个5D的偏差向量(\Delta x, \Delta y, \Delta w, \Delta h,\Delta \theta),然后与初始的OBB位置向量相加,得到优化后的OBB(x, y, w, h,\theta)
  • PIoU损失用来优化OBB

  分类子网络

  • 与定位子网络的优化阶段结构相似,用于估计IACS(IoU-aware classification scores)
  • 输出的IACS是一个具有C(类别数)通道的向量,代表分类置信度和定位精度
  • 使用Varifocal loss对密集旋转目标检测器进行训练,输出预测的IACS

2.对齐卷积模块

主要用于捕捉OBB的几何信息和背景上下文信息,有利于预测OBB与真实目标框的对齐。

该模块使用可变性卷积(deformable convolution)来对齐OBB和特征,具体来说:

  • 给定特征图的一个采样位置(i,j),首先回归得到初始的OBB向量(x', y', w', h',\theta ')
  • 根据初始的OBB,选择九个采样点(OBB的4个顶点和4个边的中点,以及采样位置),如图1所示;
  • 将这9个定位点映射到特征图上,通过可变形卷积对投影点上的特征进行卷积,以提取对齐特征,如图3所示;
  • 这些定位点是手动选择的,计算量可以忽略不计

对齐卷积模块

3.PIoU损失

边界不连续是指由于边缘的角度周期性和边的可交换性,边界处的损失急剧增加。

角度的定义是长边和y轴的夹角

PIoU (Pixels-IoU loss)联合OBB的5个参数,检查每个像元的位置,解决边界不连续问题。

角度周期性和边可交换性导致的边界不连续问题
PIoU的计算方式

 

如上图5所示,给定OBB b(蓝色编码为(x, y, w, h,\theta)的旋转边界框)和影像中的像元p_{i,j},使用定义的二值函数来判断二者的相对位置:

 公式(1)是不连续不可微分的,可以通过两个核函数相乘近似表示这个二值函数:

核函数K(d,s)定义为 :

 b{b}'面积的交集和并集可以近似计算为:

 PIoU的计算方式为:

三、实验部分

1. 数据集

(1) DOTA:15个类别,随机翻转和数据增广,单尺度训练和测试

(2) HRSC2016:航空影像的舰船检测

(3) UCAS-AOD:飞机和汽车的检测

2. 环境设置

(1) 超参数

  • 迭代次数:12epoches
  • batch-size:6
  • backbone:ResNet50
  • 优化器:SGD
  • 初始学习率:0.01
  • momentum:0.9
  • weight decay:0.0001

(2) 在backbone的最后阶段,使用可变形卷积替代普通卷积层,以扩大感受野,并训练模型24epoches

3. 消融试验(DOTA数据集)

(1) 将修改后的VarifocalNet作为基准:mAP为63.19%

(2) 对齐卷积模块ACM的有效性:与基准模型相比,mAP提高了3.8%

(3) PIoU 损失函数的有效性:mAP从66.98%提升到了72.44%

4. 与SOTA的对比

(1) DOTA数据集上的结果:单尺度ResNet50的DARDet能够获得77.61%的mAP,旋转增强后能够获得所有单尺度算法里最优的检测精度,检测速度仅次于S2A-Net

(2) HRSC2016数据集上的结果:DARDet表现最好,精度90.37%

(3) UCAS-AOD数据集上的结果:DARDet表现最好,mAP为90.37%


您可能感兴趣的与本文相关的镜像

Yolo-v8.3

Yolo-v8.3

Yolo

YOLO(You Only Look Once)是一种流行的物体检测和图像分割模型,由华盛顿大学的Joseph Redmon 和Ali Farhadi 开发。 YOLO 于2015 年推出,因其高速和高精度而广受欢迎

Epoch 1/20 98/98 ━━━━━━━━━━━━━━━━━━━━ 0s 552ms/step - dense_3_accuracy: 0.0282 - dense_3_loss: 3.5552 - dense_4_accuracy: 0.0313 - dense_4_loss: 3.5419 - dense_5_accuracy: 0.0259 - dense_5_loss: 3.5605 - dense_6_accuracy: 0.0296 - dense_6_loss: 3.5452 - loss: 14.2645 Epoch 0 - 验证集全匹配准确率: 0.0000 98/98 ━━━━━━━━━━━━━━━━━━━━ 62s 575ms/step - dense_3_accuracy: 0.0283 - dense_3_loss: 3.5550 - dense_4_accuracy: 0.0314 - dense_4_loss: 3.5417 - dense_5_accuracy: 0.0259 - dense_5_loss: 3.5602 - dense_6_accuracy: 0.0296 - dense_6_loss: 3.5450 - loss: 14.2641 - val_dense_3_accuracy: 0.0333 - val_dense_3_loss: 3.5351 - val_dense_4_accuracy: 0.0333 - val_dense_4_loss: 3.5258 - val_dense_5_accuracy: 0.0400 - val_dense_5_loss: 3.5363 - val_dense_6_accuracy: 0.0333 - val_dense_6_loss: 3.5032 - val_loss: 14.2117 - learning_rate: 0.0010 - val_full_match_accuracy: 0.0000e+00 Epoch 2/20 98/98 ━━━━━━━━━━━━━━━━━━━━ 0s 547ms/step - dense_3_accuracy: 0.0283 - dense_3_loss: 3.5009 - dense_4_accuracy: 0.0306 - dense_4_loss: 3.4942 - dense_5_accuracy: 0.0378 - dense_5_loss: 3.4964 - dense_6_accuracy: 0.0378 - dense_6_loss: 3.4986 - loss: 14.0956 Epoch 1 - 验证集全匹配准确率: 0.0000 98/98 ━━━━━━━━━━━━━━━━━━━━ 54s 552ms/step - dense_3_accuracy: 0.0283 - dense_3_loss: 3.5009 - dense_4_accuracy: 0.0306 - dense_4_loss: 3.4942 - dense_5_accuracy: 0.0377 - dense_5_loss: 3.4964 - dense_6_accuracy: 0.0378 - dense_6_loss: 3.4986 - loss: 14.0954 - val_dense_3_accuracy: 0.0267 - val_dense_3_loss: 3.5849 - val_dense_4_accuracy: 0.0133 - val_dense_4_loss: 3.5698 - val_dense_5_accuracy: 0.0067 - val_dense_5_loss: 3.6506 - val_dense_6_accuracy: 0.0267 - val_dense_6_loss: 3.5626 - val_loss: 14.4254 - learning_rate: 0.0010 - val_full_match_accuracy: 0.0000e+00 Epoch 3/20 98/98 ━━━━━━━━━━━━━━━━━━━━ 0s 554ms/step - dense_3_accuracy: 0.0324 - dense_3_loss: 3.4974 - dense_4_accuracy: 0.0315 - dense_4_loss: 3.4956 - dense_5_accuracy: 0.0398 - dense_5_loss: 3.4950 - dense_6_accuracy: 0.0274 - dense_6_loss: 3.4961 - loss: 14.0531 Epoch 2 - 验证集全匹配准确率: 0.0000 98/98 ━━━━━━━━━━━━━━━━━━━━ 55s 559ms/step - dense_3_accuracy: 0.0324 - dense_3_loss: 3.4974 - dense_4_accuracy: 0.0315 - dense_4_loss: 3.4956 - dense_5_accuracy: 0.0398 - dense_5_loss: 3.4950 - dense_6_accuracy: 0.0274 - dense_6_loss: 3.4961 - loss: 14.0530 - val_dense_3_accuracy: 0.0067 - val_dense_3_loss: 3.5379 - val_dense_4_accuracy: 0.0400 - val_dense_4_loss: 3.5454 - val_dense_5_accuracy: 0.0067 - val_dense_5_loss: 3.6164 - val_dense_6_accuracy: 0.0400 - val_dense_6_loss: 3.5071 - val_loss: 14.2812 - learning_rate: 0.0010 - val_full_match_accuracy: 0.0000e+00
最新发布
05-29
<think>嗯,用户想分析深度学习模型训练过程中Dense层的准确率和损失值变化。首先,我需要回忆一下Dense层的作用。Dense层是全连接层,负责整合前面层的特征,进行非线性变换,所以它的参数变化会影响整个模型的性能。接下来,用户可能想知道准确率和损失值在训练过程中如何变化,以及Dense层的设计如何影响这些指标。 我得先考虑训练初期的情况。这时候,模型参数是随机初始化的,准确率低,损失值高。可能用户会想知道为什么一开始准确率不高,是不是初始化的问题。然后,随着训练的进行,参数逐渐调整,准确率上升,损失下降。这时候可能需要解释梯度下降和反向传播的作用,尤其是Dense层如何通过优化算法更新权重。然后,用户可能关心过拟合的情况。比如,训练准确率继续上升,但验证准确率停滞或下降,这时候损失值可能开始上升。这时候需要提到正则化方法,比如Dropout或L2正则化,以及如何调整Dense层的节点数或层数来防止过拟合。另外,激活函数的选择也很重要。比如使用ReLU可能比Sigmoid更好,避免梯度消失,尤其是在深层网络中。还要考虑批量归一化(BatchNorm)对训练稳定性的影响,可能用户想知道为什么在Dense层后面加BN层会加速收敛。 用户提供的引用中有提到优化算法、损失函数、准确率评估等,可能需要结合这些信息。比如引用[2]提到损失函数计算预测和真实值的差异,反向传播更新参数。引用[4]中的history对象记录了训练过程中的loss和准确率,可以用来画图分析。还有引用[5]提到DenseNet的特征重用,可能和Dense层的设计有关联。用户可能还希望知道如何具体分析这些变化,比如通过TensorBoard或matplotlib绘制训练曲线。需要给出代码示例,展示如何从history中提取数据并可视化。此外,可能需要解释为什么有时候损失值下降但准确率停滞,比如在分类任务中,模型可能还在调整决策边界,而准确率需要一段时间才会反映出来。 还要考虑不同超参数的影响,比如学习率过大可能导致损失值震荡,过小则收敛慢。Dense层的节点数过多可能增加过拟合风险,节点数太少则模型容量不足。这些因素都会影响准确率和损失值的变化趋势。 最后,用户可能需要优化建议,比如调整层数、节点数,使用正则化,选择合适的学习率和优化器。需要结合引用中的内容,如引用[3]提到的优化器和损失函数选择,引用[5]中的DenseNet结构设计,来给出具体的建议。</think>### 深度学习模型训练中Dense层对准确率和损失值的影响分析 #### 1. Dense层的作用与训练动态 Dense层(全连接层)是深度学习模型中负责特征整合和非线性变换的核心组件。其参数更新过程直接影响损失值和准确率的变化: - **训练初期**:随机初始化的权重会导致输出不稳定,此时准确率较低(例如$50\%$以下),损失值较高(例如分类任务中交叉熵损失$>1.0$)[^2] - **中期优化**:通过反向传播算法Dense层权重逐步调整,损失值呈现稳定下降趋势,准确率开始快速提升 - **后期收敛**:当模型接近最优解时,损失值下降速度减缓,准确率趋于稳定(可能伴随验证集过拟合现象) #### 2. 典型变化曲线分析 使用TensorFlow/Keras的`history`对象可获取训练过程数据: ```python import matplotlib.pyplot as plt plt.figure(figsize=(12,4)) plt.subplot(1,2,1) plt.plot(history.history['accuracy'], label='Train Acc') plt.plot(history.history['val_accuracy'], label='Val Acc') plt.title('Accuracy Curves') plt.subplot(1,2,2) plt.plot(history.history['loss'], label='Train Loss') plt.plot(history.history['val_loss'], label='Val Loss') plt.title('Loss Curves') ``` ##### 健康训练状态特征: - 训练/验证准确率同步上升 - 训练/验证损失同步下降 - 最终验证准确率接近训练准确率(差距$<5\%$) ##### 异常情况分析: | 现象 | 可能原因 | 解决方案 | |-------|---------|---------| | 训练准确率高但验证准确率低 | Dense层过拟合 | 增加Dropout层/L2正则化 | | 损失值震荡不收敛 | 学习率过大 | 降低学习率或使用自适应优化器 | | 准确率长期停滞 | 层数不足/激活函数失效 | 增加Dense层数/改用ReLU | #### 3. Dense层设计优化建议 1. **激活函数选择**: - 中间层推荐使用ReLU:$f(x) = \max(0,x)$,缓解梯度消失问题 - 输出层根据任务选择Softmax(分类)或Linear(回归) 2. **参数初始化**: - He初始化:$W \sim \mathcal{N}(0, \sqrt{2/n_{in}})$,适合ReLU激活函数 - Xavier初始化:$W \sim \mathcal{N}(0, \sqrt{1/n_{in}})$,适合Sigmoid/Tanh 3. **批量归一化实践**: 在Dense层后添加BatchNorm层可加速收敛: ```python model.add(Dense(256)) model.add(BatchNormalization()) model.add(Activation('relu')) ``` #### 4. 案例分析:CIFAR10数据集上的DenseNet表现 引用[^5]中DenseNet在CIFAR10上达到$90.07\%$测试准确率,其成功原因包括: - 密集连接结构增强梯度流动 - 特征重用机制提升参数效率 - Transition层控制特征图尺寸 $$ \text{DenseBlock输出} = \bigoplus_{i=0}^{L}H_l([x_0,x_1,...,x_{l-1}]) $$ 其中$H_l(\cdot)$表示第$l$层的非线性变换,$\oplus$表示通道拼接。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小李AI飞刀^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值