DetNet: A Backbone network for Object Detection论文阅读记录

DetNet是旷视提出的一种专为物体检测设计的backbone网络,旨在解决物体分类与检测间的差距,特别是在定位精度和小物体检测方面。通过引入DilatedBottleneck结构,DetNet在深层保持高分辨率,同时扩大感受野,有效提升检测性能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概述:

DetNet: A Backbone network for Object Detection是ECCV2018收录的旷视的一篇物体检测的论文,其设计灵感源自图像分类与物体检测任务之间存在的落差。详细讲,DetNet 针对不同大小和尺度的物体而像 FPN 一样使用了更多的 stage;即便如此,在保留更大的特征图分辨率方面,它依然优于 ImageNet 预训练模型。但是,这会增加神经网络的计算和内存成本。为保证效率,旷视研究员又引入低复杂度的 Dilated Bottleneck,兼得较高的分辨率和较大的感受野。DetNet 不仅针对分类任务做了优化,对定位也很友好,并在 COCO 上的物体检测和实例分割任务中展现了出色的结果。

Motivation:

目前的目标检测网络,不论是one-stage的YOLO、SSD还是two-stage的Faster-RCNN、FPN等都是直接从ImageNet图像分类的预训练上进行finetune。物体分类和目标检测有一些差异,最重要的差异就是目标检测不仅不仅要识别物体的类别,还要确定物体在图像中精准的位置。较大的下采样会增大感受野的大小,这有利于物体的分类识别,但是降低了精准定位的能力。虽然有些技巧被应用,例如FPN和dilated convolution ,但是依然存在一些问题:

  1. 物体检测网络backbone network的stages数量不同一。如下图B所示,典型的物体分类网络包含5个阶段,实现32倍的下采样。而用于物体检测的网络,常常包含其他的阶段,比如FPN为处理更大的物体增加了P6,RetinaNet则增加了P6/P7连个阶段,然而这些新增加的阶段不能从pre-trained模型中进行finetune。
  2. 32X的下采样不利于物体定位,在deeper层预测的大物体的边界太模糊以至于不能准确定位。
  3. 小物体的漏检。FPN预测在浅层预测小物体,但是浅层包含的语义信息太少,不利于物体的识别。虽然FPN采用bottom-up的信息传递path去融合浅层位置信息和高层语义信息,但是如果在高层小物体消失,浅层的位置信息也就随之消失。

因此,作者特定地为物体检测设计一种新颖的特征提取的backbone,DetNet。一方面相对于物体分类网络包含了确定数量的额外的模块,可以在ImageNet上进行预训练;另一方面通过dilated bootleneck结构在更深的层也保持较大的feature map的resolution。

Net Design:

作者选用ResNet-50作为baseline设计检测网络的backbone,其中保留ResNet-50的前4个stages。DetNet的设计精髓从第5stage开始,如下图所示:

  1. 将用于检测模块的额外阶段如stage5和6,与stage4保持同样的分辨率‘;
  2. 在stage5和6的开始阶段,为增大网络的感受野和表达能力,使用带有dilated convolution的bottleneck以及1X1的卷积映射;
  3. 为降低计算量,stage5和6的通道数与stage4保持相同,而不是像分类网络double。

Training and Inference

首先在ImageNet上训练DetNet,按照ResNet的训练策略,在8块TITIAN XP上以256的batchsize进行,得到pre-trained。在FPN上使用DetNet,following Detecron的训练策略,8块TITIAN XP上batchsize为16,shorter 边800,longer 边限制在1333,lr为0.02,开始500次用0.02*0.3去warm-up,并固定stage1和所有BN层的参数。对比结果如下图所示:

从average precision和average recall两个角度分析,DetNet-FPN对于大物体的定位精度更高,因为下采样的程度小;其次对于小物体的recall提升明显,同样因为在deeper层保持较大的resolution。

白话总结:

说白了,本文就是设计了一个固定卷积阶段的的backbone,并根据物体检测的特殊性,降低下采样的程度,在deeper层保持较大的resolution,以提高大物体的定位精度和小物体的recall,并在ImageNet上进行训练得到pre-trained,之后再用到固定的目标检测框架下。

<think>好的,用户想复现RRPN(雷达区域提议网络)在自动驾驶车辆目标检测中的研究或实现。我需要先理解RRPN的基本原理,然后考虑如何分步骤指导复现。首先,RRPN结合了雷达数据和图像数据,可能涉及多模态融合,所以需要处理雷达点云和摄像头图像的融合。接下来,用户可能需要知道数据准备、网络架构、训练流程和评估方法。 首先,数据准备方面,可能需要用到像nuScenes这样的自动驾驶数据集,里面包含雷达和图像数据。需要将雷达点云投影到图像坐标系,并标注目标边界框。数据预处理可能包括坐标转换、数据增强等。 然后是网络架构部分。RRPN可能基于Faster R-CNN,但加入了雷达分支。需要构建两个分支:一个处理图像,另一个处理雷达点云。雷达数据可能需要转换为BEV(鸟瞰图)或前视图表示,再通过卷积层提取特征。接着是区域提议网络(RPN),生成候选区域,并结合雷达和图像特征进行目标检测。 训练流程方面,用户需要定义损失函数,包括分类损失和边界框回归损失。可能需要交替训练两个分支,或者设计联合训练策略。超参数调整也很重要,比如学习率、优化器选择等。 代码实现部分,可能需要使用深度学习框架如PyTorch或TensorFlow。可以建议用户参考已有的开源实现,比如GitHub上的RRPN项目,但需要检查是否适用于他们的数据集和任务。如果没有现成的代码,可能需要自己构建网络结构,处理数据输入,并实现训练循环。 潜在的问题可能包括多模态数据对齐困难,雷达数据稀疏性处理,以及计算资源限制。用户可能需要使用GPU加速训练,并确保数据预处理步骤正确无误。 另外,用户可能对如何评估模型性能感兴趣,比如mAP(平均精度)指标,以及在真实场景中的推理速度。还需要考虑实际部署到自动驾驶系统时的优化,比如模型压缩或硬件加速。 最后,我应该推荐相关的论文和开源项目,帮助用户深入理解RRPN的细节,并指导他们逐步复现。需要提醒用户注意代码实现的正确性和数据处理的准确性,以确保复现结果可靠。</think>### RRPN复现步骤与实现要点 RRPN(Radar Region Proposal Network)是用于多模态目标检测的关键技术,结合雷达与视觉数据提升自动驾驶系统的鲁棒性[^1]。以下是关键复现步骤: --- #### 一、数据准备与预处理 1. **数据集选择** - 使用nuScenes或RADIATE数据集,需包含同步的雷达点云(如$(\rho, \theta, v)$)与摄像头图像 - 标注格式转换:将3D边界框投影到2D图像坐标系$$x_{img}=K \cdot T_{radar}^{cam} \cdot x_{radar}$$ 2. **雷达数据编码** - 将稀疏点云转换为密集特征图: ```python def radar_to_bev(points, grid_size=0.1): # 将极坐标转换为笛卡尔坐标 x = points[:,0] * np.cos(points[:,1]) y = points[:,0] * np.sin(points[:,1]) # 生成BEV栅格 bev = np.histogram2d(x, y, bins=(int(100/grid_size), int(100/grid_size))) return bev ``` --- #### 二、网络架构实现 1. **双分支特征提取** ```python class RRPN(nn.Module): def __init__(self): super().__init__() # 视觉分支 self.visual_backbone = resnet50(pretrained=True) # 雷达分支 self.radar_conv = nn.Sequential( nn.Conv2d(1, 64, 5), nn.MaxPool2d(2), nn.Conv2d(64, 128, 3) ) def forward(self, img, radar): vis_feat = self.visual_backbone(img) radar_feat = self.radar_conv(radar) fused_feat = torch.cat([vis_feat, radar_feat], dim=1) return fused_feat ``` 2. **区域建议生成** - 使用RPN网络生成候选框: $$L_{reg} = \sum_i smooth_{L1}(t_i - v_i)$$ --- #### 三、训练流程 1. **损失函数设计** - 多任务损失:分类损失 + 回归损失 ```python def compute_loss(cls_pred, reg_pred, gt_labels, gt_boxes): cls_loss = F.cross_entropy(cls_pred, gt_labels) reg_loss = F.smooth_l1_loss(reg_pred, gt_boxes) return cls_loss + 0.5*reg_loss # 平衡系数参考原论文 ``` 2. **训练技巧** - 渐进式训练:先单独训练视觉分支,再联合训练 - 数据增强:雷达点云随机丢弃(模拟噪声)、图像颜色抖动 --- #### 四、代码实现建议 1. **参考资源** - 官方实现:https://github.com/kaist-avelab/K-Radar - 改进版本:https://github.com/TUMFTM/CameraRadarFusionNet 2. **部署优化** - 使用TensorRT加速推理: ```bash trtexec --onnx=rrpn.onnx --saveEngine=rrpn.engine --fp16 ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值