当前位置: 首页 > article >正文

精读双模态检测论文二十六|DefDeN(兰州大学)创新点拉满!门控融合+可变形去噪+对比学习,LiDAR-Camera 3D检测暴力涨点!!!

本文定位CSDN 原创干货 | 兰州大学/卧龙岗大学 LiDAR-Camera 3D目标检测 SOTA 方案 核心收益一次性解决注意力融合三大痛点——收敛慢、计算量大、误检率高基于门控多模态融合单元GMFU实现图像-点云双向增强搭配多尺度可变形注意力将计算复杂度从 O(n²) 降至 O(n)配合去噪对比学习加速收敛并压制重复框nuScenes mAP 高达 71.7%NDS 74.0%超 TransFusion 2.8% 核心创新矩阵IMFM 中间级多模态融合模块— GMFU 门控融合 交叉注意力编码器双向增强图像与点云特征多尺度可变形注意力机制— 稀疏采样 K/V 代替全局注意力同时保持全局感受野计算量大幅降低NDTM 噪声添加与去噪任务模块— 加噪去噪加速匈牙利匹配收敛对比学习压制重复检测框中心热图查询 端到端 3D 检测— 无需 anchor box直接输出 3D 检测框✅ 适配场景自动驾驶 3D 感知 | 多传感器融合检测 | 鸟瞰图目标检测 | 端到端 3D 检测 | 边缘智能感知 | 车路协同感知3D 目标检测是自动驾驶感知系统的核心技术。LiDAR 提供精确的深度信息但稀疏无序相机提供丰富的纹理颜色但缺乏深度——两者的融合一直是行业难题。当前基于注意力的融合方法虽然精度高但面临三大硬伤收敛速度慢DETR 类方法需要数百个 epoch 才能收敛匈牙利匹配在训练早期极不稳定query 在不同 epoch 匹配到不同目标优化方向来回摇摆。计算开销大标准自注意力/交叉注意力的复杂度为 O(n²)点云特征序列通常包含数万个 token全局注意力的计算量直接爆炸。误检率高大量 query如 400 个容易产生重叠检测框同一个目标被多个框框住NMS 都压不住。今天这篇 DefDeN 来自兰州大学周庆国团队联合卧龙岗大学发表在《Tsinghua Science and Technology》2026 年 4 月刊上用三个相互协同的创新模块一次性解决上述三大问题。其核心思路极其清晰门控融合做双向特征增强 → 可变形注意力砍计算量 → 加噪去噪对比学习提收敛压误检。三个模块各司其职、互相增强。本文全程论文 1:1 对齐 可运行完整代码复现 实验全解读CSDN 最细最干货版本直接拿去发论文、改毕设、打比赛、做工程都能暴力涨点 一、DefDeN 整体架构▲ 图1DefDeN 整体架构图。左上为特征提取模块图像走 ResNet-50FPN、点云走 SECOND右上为编码器模块GMFU 门控融合 交叉注意力编码器下方为解码器与输出模块中心热图查询 多尺度可变形注意力 NDTM 去噪对比学习。出处论文 Fig.1。DefDeN 的整体架构可以分为四大阶段双模态特征提取图像端采用 ResNet-50 FPN 三层多尺度输出最终得到 256 通道、200×112 的特征图 Fc点云端采用 SECOND 架构将点云体素化9cm×9cm×20cm经稀疏卷积处理后得到 150×150×512 的特征图 Fl。Z 轴被压缩到通道维度形成鸟瞰图BEV表示。IMFM 中间级多模态融合这是融合的核心。GMFU 用点云特征增强图像特征Hadamard 乘积 卷积门控交叉注意力编码器用图像特征引导点云的注意力计算形成双向交互。多尺度可变形注意力编解码编码器 2 层 解码器 5 层全部使用多尺度可变形注意力。与传统注意力不同每个 query 只采样固定数量 K 个周围点作为 K/V而非全部序列计算复杂度从 O(n²) 降为 O(n)。NDTM 去噪 对比学习 检测头输出中心热图生成 400 个 query加噪 GT 框辅助训练加速收敛对比学习 loss 压制重叠框最终 FFN 输出 3D 检测框。核心设计亮点DefDeN 的 IMFM 不只是一般的特征拼接再送注意力——它先通过 GMFU 用点云增强图像传统方法往往忽略这个方向再通过交叉注意力用图像引导点云。两个方向都做且计算量通过可变形注意力控制在可接受范围。 二、核心模块逐行拆解原理 公式 论文对齐2.1 GMFU — 门控多模态融合单元论文 Eq.1解决的 4 个核心问题传统方法只做图像增强点云忽略反向增强 → GMFU 用点云增强图像多传感器特征空间不对齐 → 通过标定信息将点云投影到图像域再做融合简单 concat 融合信息利用不充分 → Hadamard 乘积 门控机制精确控制融合强度计算资源耗费过大 → 仅使用轻量 CNN 操作部署友好核心设计投影 门控 双路融合GMFU 的操作流程对应论文Eq.(1)A T(Fl) ⊙ σ(Conv_v(T(Fl) ⊕ Fc)) # 点云引导的图像增强权重 B Fc ⊙ σ(Conv_i(T(Fl) ⊕ Fc)) # 图像自门控权重 Fc Conv_f(A ⊕ B) # 拼接卷积融合输出其中 T 是将点云特征 Fl 通过标定信息投影到图像域的变换⊙ 是 Hadamard 乘积逐元素乘σ 是 Sigmoid 门控⊕ 是特征拼接。 理解 GMFU 的最佳视角A 是点云觉得图像中哪里重要的注意力图点云特征和图像特征拼接后卷积Sigmoid再乘回点云投影B 是图像自认为哪里重要的注意力图。两个门控信号分别调控两个模态的贡献最后 concat 融合。2.2 交叉注意力编码器论文 Eq.2解决的 4 个核心问题点云特征缺乏纹理和颜色信息 → 用图像 K/V 注入视觉语义图像特征缺乏深度感知 → 用点云 Q 引导视觉注意力方向串行化的多模态序列难以直接融合 → 交叉注意力天然支持不同序列间的信息交互多视角图像的视角差异 → 每个点云体素只与相邻两个视角的图像做注意力核心设计Q 来自点云K/V 来自图像交叉注意力的计算遵循标准公式Eq.(2)但交互对象是点云序列和图像序列Q X_lidar · W_Q # 查询点云特征 K V X_image · W_K # 键值图像特征 CrossAttn Softmax(Q·K^T / √d) · V # 图像引导的点云注意力关键设计细节每个点云体素 fli 只与相邻两个视角的图像特征 Fcm 和 Fcn 做交叉注意力而非全部 6 个视角这大幅减少了计算量同时相邻视角已覆盖足够的相关信息。编码器共堆叠M2 层多尺度可变形注意力。先做自注意力点云自己 refine 自己→ 再做交叉注意力图像引导点云→ 残差连接 → 输出融合特征 Flf。2.3 多尺度可变形注意力论文 Eq.3解决的 4 个核心问题标准注意力 O(n²) 复杂度太高 → 每个 query 只采样 K 个周围点复杂度降至 O(n)全局注意力中大量不相关 token 干扰 → 稀疏采样聚焦局部关键区域固定感受野不适应多尺度目标 → 多尺度特征图上同时采样注意力权重计算也耗资源 → 用线性映射直接生成注意力权重省去 Q·K 点积核心设计稀疏采样 可学习偏移对应论文Eq.(3)DeformAttn(z_q, p_q, x) Σ_m Σ_k W_m · A_mqk · W_m(x(p_q Δp_mqk))其中 z_q 是 query 特征p_q 是 query 的参考位置Δp_mqk 是通过 query 线性映射学到的可变形偏移量。每个 query 的采样位置是 p_q Δp_mqk而非整个特征图。注意力权重 A_mqk 也通过线性映射直接生成省去了 Q·K^T 的计算。性能对比论文 Table 52 层可变形注意力耗时 7.1ms而 2 层标准注意力耗时 22.3ms——仅 1/3 的时间mAP 几乎相同65.0 vs 65.1。5 层可变形注意力 15.3ms比 2 层标准注意力还快 31%而 mAP 从 65.1 提升到 67.1。2.4 NDTM — 噪声添加与去噪任务模块论文 Eq.4-5解决的 4 个核心问题DETR 训练早期匈牙利匹配不稳定 → 加噪 GT 框提供稳定训练信号模型收敛慢DETR 通病 → 去噪任务迫使模型学习相对偏移而非绝对位置400 个 query 产生大量重复框 → 对比学习惩罚重叠预测误检率高假阳性多 → InfoNCE 损失引导正样本聚集、负样本远离核心设计 1三种加噪方式论文设计了三种不同的噪声添加策略# 噪声1中心点偏移Eq.4 Δx, Δy, Δz 满足: |Δx| λ1·w/2, |Δy| λ1·h/2, |Δz| λ1·l/2 # 噪声2缩放旋转Eq.5 w, h, l 在 [(1-λ2)w, (1λ2)w] 范围内随机缩放 θ 在 [(1-λ2)θ, (1λ2)θ] 范围内随机旋转 # 噪声3类别标签随机替换 以概率 0.5 随机替换类别标签其中 λ1λ20.4。每种噪声各生成一组加噪 GT 框共三组与 query 一起送入 Decoder。核心设计 2对比学习压制重复框论文 Eq.6▲ 图2DefDeN 去噪模块结构左与对比学习模块结构右。出处论文 Fig.2 Fig.4。对比学习使用InfoNCE 损失Eq.6L_q -log( exp(cos(q·k⁺)/τ) / Σ_i exp(cos(q·k_i)/τ) )这里的正负样本对构建得很巧妙加噪 GT 框与匈牙利匹配后的检测框组成正样本对k⁺与未匹配的检测框组成负样本对k_i。τ0.7 是温度系数。直观理解InfoNCE 让匹配上的检测框靠近 GT 框拉近正样本让没匹配上的检测框远离 GT 框推远负样本。这本质上是在惩罚同一目标周围产生多个检测框的行为从而降低误检率。 三、论文 1:1 对齐完整可运行 PyTorch 复现代码3.1 环境依赖# 核心依赖 pip install torch1.10.0 torchvision0.11.0 pip install mmdet3d1.0.0 mmcv-full1.7.0 pip install mmdet2.25.0 mmengine0.8.0 pip install numpy1.21.0 opencv-python4.6.03.2 完整代码实现3.2.1 GMFU — 门控多模态融合单元论文 Eq.1import torch import torch.nn as nn import torch.nn.functional as F class GMFU(nn.Module): Gated Multimodal Fusion Unit (GMFU) 论文 Section 3.2.1, Eq.(1) 用点云特征增强图像特征点云→投影到图像域→门控信号调控→输出增强的图像特征 input: Fc [B, C_img, H, W] 图像特征 Fl [B, C_lidar, H_l, W_l] 点云 BEV 特征 output: Fc [B, C_out, H, W] 增强后的图像特征 def __init__(self, img_channels256, lidar_channels512, hidden_channels128, out_channels256): super().__init__() # 点云投影到图像域通过 1×1 卷积对齐维度 上采样匹配分辨率 # 实际使用时需传入标定矩阵进行投影变换此处简化为维度对齐 self.proj_lidar nn.Sequential( nn.Conv2d(lidar_channels, img_channels, kernel_size1), nn.BatchNorm2d(img_channels), nn.ReLU(inplaceTrue), ) # 门控卷积两个独立的 CNN 生成门控权重 self.conv_v nn.Sequential( # 点云侧门控 nn.Conv2d(img_channels * 2, hidden_channels, kernel_size3, padding1), nn.BatchNorm2d(hidden_channels), nn.ReLU(inplaceTrue), nn.Conv2d(hidden_channels, img_channels, kernel_size3, padding1), nn.Sigmoid(), # 输出 [0, 1] 门控值 ) self.conv_i nn.Sequential( # 图像侧门控 nn.Conv2d(img_channels * 2, hidden_channels, kernel_size3, padding1), nn.BatchNorm2d(hidden_channels), nn.ReLU(inplaceTrue), nn.Conv2d(hidden_channels, img_channels, kernel_size3, padding1), nn.Sigmoid(), ) # 最终融合卷积 self.conv_f nn.Sequential( nn.Conv2d(img_channels * 2, out_channels, kernel_size3, padding1), nn.BatchNorm2d(out_channels), nn.ReLU(inplaceTrue), ) def forward(self, Fc, Fl): Fc: [B, 256, H, W] 图像特征 Fl: [B, 512, H_l, W_l] 点云 BEV 特征 实际部署时T(Fl) 需要使用传感器标定矩阵进行精确的 point-to-pixel 投影这里用双线性插值上采样近似 # Step 1: 点云投影到图像域对齐维度 分辨率 T_Fl self.proj_lidar(Fl) # [B, 256, H_l, W_l] if T_Fl.shape[-2:] ! Fc.shape[-2:]: T_Fl F.interpolate(T_Fl, sizeFc.shape[-2:], modebilinear, align_cornersFalse) # Step 2: 拼接特征用于门控计算 concat_feat torch.cat([T_Fl, Fc], dim1) # [B, 512, H, W] # Step 3: Eq.(1) — 双路门控 # A T(Fl) ⊙ σ(Conv_v(T(Fl) ⊕ Fc)) gate_v self.conv_v(concat_feat) # [B, 256, H, W] A T_Fl * gate_v # 点云引导的增强 # B Fc ⊙ σ(Conv_i(T(Fl) ⊕ Fc)) gate_i self.conv_i(concat_feat) # [B, 256, H, W] B Fc * gate_i # 图像自门控 # Step 4: Fc Conv_f(A ⊕ B) Fc_enhanced self.conv_f(torch.cat([A, B], dim1)) return Fc_enhanced3.2.2 多尺度可变形注意力论文 Eq.3class MultiScaleDeformableAttention(nn.Module): 多尺度可变形注意力 论文 Section 3.3, Eq.(3) 与标准注意力的核心区别 1. 只采样 K 个周围点作为 K/V而非全部序列 2. 采样位置由可学习的偏移量 Δp 决定 3. 注意力权重通过线性映射直接生成省去 QK^T 点积 input: query [B, N_q, C], reference_points [B, N_q, N_levels, 2] output: [B, N_q, C] def __init__(self, dim256, num_heads8, num_levels4, num_points4, dropout0.1): super().__init__() self.dim dim self.num_heads num_heads self.num_levels num_levels # 多尺度特征图层数 self.num_points num_points # 每个 query 每层采样的 K 点数 self.head_dim dim // num_heads # 采样偏移量的线性映射每个 head 对每层每个采样点生成 xy 偏移 self.sampling_offsets nn.Linear( dim, num_heads * num_levels * num_points * 2) # 注意力权重的线性映射替代 QK^T self.attention_weights nn.Linear( dim, num_heads * num_levels * num_points) # Value 投影 self.value_proj nn.Linear(dim, dim) # 输出投影 self.output_proj nn.Linear(dim, dim) self.dropout nn.Dropout(dropout) def forward(self, query, reference_points, multi_scale_features, spatial_shapes, level_start_index): query: [B, N_q, C] reference_points: [B, N_q, N_levels, 2] — 归一化坐标 [0,1] multi_scale_features: [B, sum(H_l*W_l), C] — 多尺度特征串联 B, N_q, _ query.shape B, N_features, C multi_scale_features.shape # Step 1: Value 投影 value self.value_proj(multi_scale_features) value value.view(B, N_features, self.num_heads, self.head_dim) # Step 2: 生成采样偏移量 Δp (Eq.3 中的 pmqk) sampling_offsets self.sampling_offsets(query) sampling_offsets sampling_offsets.view( B, N_q, self.num_heads, self.num_levels, self.num_points, 2) # Step 3: 生成注意力权重 A (Eq.3 中的 Amqk) — 直接用线性映射 attention_weights self.attention_weights(query) attention_weights attention_weights.view( B, N_q, self.num_heads, self.num_levels * self.num_points) attention_weights F.softmax(attention_weights, dim-1) attention_weights attention_weights.view( B, N_q, self.num_heads, self.num_levels, self.num_points) # Step 4: 计算采样位置 p_q Δp_mqk (Eq.3) sampling_locations reference_points[:, :, :, None, :] \ sampling_offsets / torch.tensor( [s[1], s[0] for s in spatial_shapes], devicequery.device).view(1, 1, 1, -1, 1, 1) # Step 5: 对多尺度特征图进行双线性插值采样 # 实际实现需要 cuda 扩展或使用 torch.grid_sample # 此处以伪代码展示核心逻辑 sampled_features self._bilinear_sample( multi_scale_features, sampling_locations, spatial_shapes, level_start_index) # Step 6: 加权求和 — Σ_m Σ_k W_m · A_mqk · x(p_q Δp_mqk) output torch.einsum(bqhnlp,bqhnlpd-bqhnd, attention_weights, sampled_features) output output.reshape(B, N_q, self.dim) output self.output_proj(output) return self.dropout(output) def _bilinear_sample(self, features, locations, spatial_shapes, level_start_index): 双线性插值采样简化实现 # 生产环境使用 CUDA 实现的 deformable_attn 算子 B, N_q, H, L, P, _ locations.shape sampled [] for l in range(L): H_l, W_l spatial_shapes[l] start level_start_index[l] feat_l features[:, start:startH_l*W_l, :] feat_l feat_l.view(B, H_l, W_l, H, -1) # 对采样位置双线性插值此处简化为最近邻 loc_l locations[:, :, :, l, :, :].clamp(0, 1) loc_l loc_l * torch.tensor( [W_l-1, H_l-1], deviceloc_l.device).float() loc_l loc_l.long() sampled_l feat_l[:, :, loc_l[..., 1], loc_l[..., 0], :, :] sampled.append(sampled_l) return torch.stack(sampled, dim3)3.2.3 NDTM — 去噪模块 对比学习论文 Eq.4-6class NoiseAdditionModule(nn.Module): 噪声添加模块 论文 Section 3.4.1, Eq.(4)-(5) 训练时生成三组加噪 GT 框辅助模型学习检测框偏移 def __init__(self, lambda10.4, lambda20.4, label_noise_prob0.5): super().__init__() self.lambda1 lambda1 self.lambda2 lambda2 self.label_noise_prob label_noise_prob def add_center_noise(self, gt_boxes): Eq.(4): 中心点偏移噪声 w, h, l gt_boxes[:, 3], gt_boxes[:, 4], gt_boxes[:, 5] # |Δx| λ1·w/2 范围内随机采样 dx (torch.rand_like(gt_boxes[:, 0]) * 2 - 1) * self.lambda1 * w / 2 dy (torch.rand_like(gt_boxes[:, 1]) * 2 - 1) * self.lambda1 * h / 2 dz (torch.rand_like(gt_boxes[:, 2]) * 2 - 1) * self.lambda1 * l / 2 noisy_boxes gt_boxes.clone() noisy_boxes[:, 0] dx noisy_boxes[:, 1] dy noisy_boxes[:, 2] dz return noisy_boxes def add_scale_rotate_noise(self, gt_boxes): Eq.(5): 缩放旋转噪声 w, h, l gt_boxes[:, 3], gt_boxes[:, 4], gt_boxes[:, 5] theta gt_boxes[:, 6] # 随机缩放 [(1-λ2), (1λ2)] scale (torch.rand_like(w) * 2 * self.lambda2 (1 - self.lambda2)) noisy_boxes gt_boxes.clone() noisy_boxes[:, 3] w * scale noisy_boxes[:, 4] h * scale noisy_boxes[:, 5] l * scale # 随机旋转 rot (torch.rand_like(theta) * 2 - 1) * self.lambda2 * torch.pi noisy_boxes[:, 6] theta rot return noisy_boxes def add_label_noise(self, gt_labels, num_classes10): 类别标签噪声随机替换 mask torch.rand_like(gt_labels.float()) self.label_noise_prob random_labels torch.randint(0, num_classes, gt_labels.shape, devicegt_labels.device) noisy_labels gt_labels.clone() noisy_labels[mask] random_labels[mask] return noisy_labels def forward(self, gt_boxes, gt_labels): 生成三组加噪 GT 框 # Group 1: 中心点偏移 noise1_boxes self.add_center_noise(gt_boxes) # Group 2: 缩放旋转 noise2_boxes self.add_scale_rotate_noise(gt_boxes) noise2_labels self.add_label_noise(gt_labels) # Group 3: 仅类别噪声 noise3_labels self.add_label_noise(gt_labels) return [ (noise1_boxes, gt_labels), (noise2_boxes, noise2_labels), (gt_boxes, noise3_labels), ] class ContrastiveLearningLoss(nn.Module): 对比学习损失 — 论文 Section 3.4.2, Eq.(6) 利用 InfoNCE 损失压制重复检测框 - 正样本匈牙利匹配上的 (query, GT) 对 - 负样本未匹配上的 query def __init__(self, temperature0.7): super().__init__() self.temperature temperature def forward(self, query_features, gt_features, matched_indices): query_features: [N_q, C] 所有 query 的特征编码 gt_features: [N_gt, C] 所有加噪 GT 框的特征编码 matched_indices: [(q_idx, gt_idx), ...] 匈牙利匹配结果 N_q query_features.shape[0] device query_features.device total_loss 0.0 for q_idx, gt_idx in matched_indices: q query_features[q_idx] # query 特征 k_pos gt_features[gt_idx] # 正样本匹配的 GT # 负样本所有其他 GT 框未被此 query 匹配的 neg_mask torch.ones(len(gt_features), dtypetorch.bool, devicedevice) neg_mask[gt_idx] False k_neg gt_features[neg_mask] # [K, C] # Eq.(6): InfoNCE 损失 pos_sim torch.exp( F.cosine_similarity(q.unsqueeze(0), k_pos.unsqueeze(0), dim-1) / self.temperature) all_k torch.cat([k_pos.unsqueeze(0), k_neg], dim0) all_sim torch.exp( F.cosine_similarity(q.unsqueeze(0), all_k, dim-1) / self.temperature) L_q -torch.log(pos_sim / all_sim.sum()) total_loss L_q return total_loss / len(matched_indices) if matched_indices else 0.03.2.4 DefDeN 完整模型集成class DefDeN(nn.Module): DefDeN 完整模型 论文 Section 3, Fig.1 四大阶段 1. 特征提取ResNet-50 SECOND 2. IMFM 多模态融合GMFU 交叉注意力编码器 3. 可变形注意力解码器5 层 400 query 4. NDTM 去噪对比学习 检测头 def __init__(self, num_classes10, img_backboneresnet50, num_encoder_layers2, num_decoder_layers5, num_queries400, dim256, num_heads8): super().__init__() self.num_queries num_queries # Step 1: 特征提取模块 self.img_backbone self._build_img_backbone(img_backbone) # ResNet-50 self.img_fpn FeaturePyramid(in_channels[512, 1024, 2048], out_channelsdim) self.lidar_backbone SECONDBackbone() # SECOND self.lidar_fpn SECOND_FPN(in_channels[128, 256, 512], out_channels512) # Step 2: IMFM 融合模块 self.gmfu GMFU(img_channelsdim, lidar_channels512, out_channelsdim) self.encoder_cross_attn nn.ModuleList([ EncoderCrossAttentionLayer(dimdim, num_headsnum_heads) for _ in range(num_encoder_layers) ]) # Step 3: 解码器 self.query_embed nn.Embedding(num_queries, dim) self.decoder_layers nn.ModuleList([ DeformableDecoderLayer(dimdim, num_headsnum_heads) for _ in range(num_decoder_layers) ]) # Step 4: 检测头 self.class_head nn.Linear(dim, num_classes) self.bbox_head nn.Sequential( nn.Linear(dim, dim), nn.ReLU(), nn.Linear(dim, 9), # (x, y, z, w, h, l, θ, vx, vy) ) # NDTM self.noise_module NoiseAdditionModule() self.contrastive_loss ContrastiveLearningLoss() def forward(self, images, point_clouds, gt_boxesNone, gt_labelsNone): images: [B, 6, 3, H, W] — 6 视角图像 point_clouds: [B, N, 4] — 点云 (x, y, z, intensity) B images.shape[0] # Step 1: 特征提取 Fc self.img_backbone(images) # 图像特征 Fc self.img_fpn(Fc) # [B, 256, 200, 112] Fl self.lidar_backbone(point_clouds) # 点云特征 Fl self.lidar_fpn(Fl) # [B, 512, 150, 150] # Step 2: IMFM — GMFU 增强图像 Fc_enhanced self.gmfu(Fc, Fl) # 交叉注意力编码器 Fle self._positional_encode(Fl) # 点云位置编码 Fce self._positional_encode(Fc_enhanced) # 图像位置编码 for enc_layer in self.encoder_cross_attn: Fle enc_layer(Fle, Fce) # 交叉注意力迭代 Flf Fle # 融合后点云特征 # Step 3: 解码器 — 多尺度可变形注意力 query self.query_embed.weight.unsqueeze(0).expand(B, -1, -1) ref_pts self._generate_heatmap_queries(Flf) # 中心热图查询 for dec_layer in self.decoder_layers: query dec_layer(query, Flf, ref_pts) # Step 4: 检测头 class_logits self.class_head(query) # [B, 400, num_classes] bboxes self.bbox_head(query) # [B, 400, 9] output {class_logits: class_logits, bboxes: bboxes} # 训练时添加 NDTM if self.training and gt_boxes is not None: noise_groups self.noise_module(gt_boxes, gt_labels) # ... 加噪 GT 框辅助训练 对比学习 Loss output[noise_groups] noise_groups return output def _build_img_backbone(self, name): # 实际使用时替换为 torchvision.models.resnet50(pretrainedTrue) return nn.Identity() # placeholder def _positional_encode(self, x): # 实际使用正弦位置编码 return x # placeholder def _generate_heatmap_queries(self, Flf): # 实际使用 CenterPoint 风格的 heatmap head 生成 top-400 查询点 B, C, H, W Flf.shape return torch.rand(B, self.num_queries, 2, deviceFlf.device) 四、YOLO 一键迁移适配教程即插即用直接训练DefDeN 基于 MMDetection3D 框架向 2D YOLO 的直接迁移适用性有限3D 检测与 2D 检测有本质区别。但核心模块GMFU 和可变形注意力可以跨框架复用。Step 1将核心模块放入项目将上述GMFU、MultiScaleDeformableAttention两个类的代码保存为ultralytics/nn/modules/defden_modules.py。Step 2注册 __init__.py在ultralytics/nn/modules/__init__.py中添加# DefDeN 核心模块 from .defden_modules import GMFU, MultiScaleDeformableAttention __all__.extend([GMFU, MultiScaleDeformableAttention])Step 3注册 parse_model在ultralytics/nn/tasks.py的parse_model函数中添加# DefDeN 模块注册 elif m is GMFU: c1, c2 ch[f], args[0] if c2 ! nc: c2 make_divisible(min(c2, max_channels) * width, 8) args [c1, c2, *args[1:]] elif m is MultiScaleDeformableAttention: c1, c2 ch[f], args[0] args [c1, c2, *args[1:]] 注意GMFU 需要双输入图像特征 点云/深度特征在纯 2D YOLO 中可改为RGB 特征 深度估计特征或主干特征 注意力特征的双路输入模式。 五、实验结果全解析论文 1:1 还原5.1 nuScenes 数据集 SOTA 对比nuScenes 是自动驾驶领域最权威的 3D 检测数据集之一包含 10 个类别、1000 个场景、6 视角相机 LiDAR 数据。下表为 DefDeN 与 SOTA 模型的全面对比模型模态mAPNDSCarTruckC.V.BusTrailerBarrierMotorBikePedT.C.PointPillarL30.545.368.423.04.128.223.438.927.41.159.730.8CBGSL52.863.381.148.510.554.942.965.751.522.380.170.9CenterPointL60.367.385.253.520.063.656.071.159.530.784.678.4TransFusion-LL65.570.286.256.728.266.358.878.268.344.286.182.0DefDeN-LL68.472.486.758.632.568.261.878.674.848.290.184.2PointPaintingLC46.458.177.935.815.836.237.360.241.524.173.362.4MVPLC66.470.586.858.526.167.457.374.870.049.389.185.0TransFusionLC68.971.787.160.033.168.360.878.173.652.988.486.7DefDeNLC71.774.088.162.136.871.464.280.077.958.790.987.2✅ 核心亮点纯点云模式DefDeN-LmAP 68.4% 超 TransFusion-L 2.9%NDS 72.4% 超 2.4%。小目标类别尤甚——Motor 6.5%、Bike 4.0%、Ped 4.0%。多模态模式DefDeNmAP 71.7% 超 TransFusion 2.8%NDS 74.0% 超 2.3%。Bike 5.8%、Motor 4.3%、C.V. 3.7%。加图后对比纯点云mAP 从 68.4→71.73.3%Bike 涨幅最大10.5%充分证明图像信息对小目标的增益。5.2 消融实验 — 各模块贡献论文 Table 2 展示了逐一移除核心模块后的性能变化IMFMNDTMmAPNDS分析✗✗67.171.3移除全部新模块仍超 TransFusion-LmAP 65.51.6%✗✓68.472.4仅保留 NDTM提升 1.3%/1.1%去噪对比学习贡献✓✗70.573.1仅保留 IMFM提升 2.1%/0.7%融合模块贡献更大✓✓71.774.0全模块联合达到最优5.3 IMFM 子模块消融论文 Table 3 进一步拆解 IMFM 中 GMFU 和交叉注意力的贡献GMFU交叉注意力mAPNDS✗✗70.873.4✓✗71.3 (0.5)73.7 (0.3)✗✓71.0 (0.2)73.6 (0.2)✓✓71.7 (0.9)74.0 (0.6)关键发现GMFU 单独贡献0.5%大于交叉注意力0.2%但两者联合0.9%超过各自贡献之和说明GMFU 增强后的图像特征让交叉注意力的效果更好——二者存在协同效应。5.4 NDTM 子模块消融论文 Table 4 展示了对比学习和加噪 GT 的作用对比学习加噪 GTmAPNDS✗✗70.573.0✓✗71.1 (0.6)73.7 (0.7)✓✓71.7 (1.2)74.0 (1.0)加噪 GT 框提供了更多的训练样本正负样本对让对比学习的效果放大了一倍0.6% → 1.2%。✅ 六、总结DefDeN 为 LiDAR-Camera 3D 目标检测提供了一个高度模块化、各模块各司其职的优秀方案。以下是核心贡献总结提出 IMFM 中间级多模态融合模块GMFU 门控融合用点云增强图像弥补传统方法忽略的反向增强交叉注意力编码器用图像引导点云注意力两者协同实现双向深度融合。引入多尺度可变形注意力稀疏采样 可学习偏移 线性注意力权重将计算复杂度从 O(n²) 降至 O(n)同时保持甚至提升精度。5 层可变形注意力比 2 层标准注意力还快 31%。设计 NDTM 去噪对比学习三种加噪策略丰富训练样本去噪任务加速收敛 4-5 个 epochInfoNCE 对比学习损失有效压制重复检测框降低误检率。nuScenes 全面 SOTA纯点云 mAP 68.4%/NDS 72.4%多模态 mAP 71.7%/NDS 74.0%10 个类别所有指标均优于 TransFusion 基线。DefDeN 的设计哲学值得学习不为创新而堆模块而是每个模块精准对应一个具体痛点——GMFU 解决图像侧融合被忽略、可变形注意力解决计算量爆炸、NDTM 解决收敛慢重复框。三个模块各自独立、协同作战最终在 nuScenes 上暴力涨点。学术研究和工程落地都能直接用。 收藏本文3D 检测直接起飞 标签#DefDeN #LiDAR-Camera融合 #3D目标检测 #可变形注意力 #去噪训练 #对比学习 #nuScenes #自动驾驶

相关文章:

精读双模态检测论文二十六|DefDeN(兰州大学)创新点拉满!门控融合+可变形去噪+对比学习,LiDAR-Camera 3D检测暴力涨点!!!

🔥 本文定位:CSDN 原创干货 | 兰州大学/卧龙岗大学 LiDAR-Camera 3D目标检测 SOTA 方案 🎯 核心收益:一次性解决注意力融合三大痛点——收敛慢、计算量大、误检率高!基于门控多模态融合单元(GMFU&#xff0…...

基于h2oGPT构建本地私有化知识库:从RAG原理到实战部署

1. 项目概述:一个真正私密的本地文档智能助手 如果你和我一样,对把敏感的工作文档、个人笔记或者内部资料上传到云端总有些提心吊胆,但又眼馋ChatGPT那种强大的文档理解和对话能力,那么h2oGPT的出现,可以说是解了我们…...

Godot 4中构建真实水体渲染:从PBR原理到性能优化实践

1. 项目概述:从像素到波光,在Godot中构建真实水体如果你正在用Godot引擎开发一款开放世界游戏、一个宁静的模拟场景,或者任何需要水体表现的项目,那么“水”的质量几乎直接决定了场景的沉浸感上限。静态的、像果冻一样的平面贴图早…...

前端工程化:持续集成实战指南

前端工程化:持续集成实战指南 前言 持续集成(CI)是现代软件开发的核心实践之一。它能帮助团队快速发现问题、减少集成风险、提高开发效率。今天我就来给大家讲讲如何搭建一套完整的前端持续集成流程。 什么是持续集成 持续集成是一种软件开发…...

前端工程化:代码审查最佳实践

前端工程化:代码审查最佳实践 前言 代码审查是保障代码质量的第一道防线。一个好的代码审查流程不仅能发现潜在的bug,还能促进团队知识共享,提升整体代码水平。今天我就来给大家讲讲如何建立一套高效的代码审查流程。 什么是代码审查 代码审查…...

前端工程化:依赖管理最佳实践

前端工程化:依赖管理最佳实践 前言 依赖管理是前端工程化的基础!如果你的项目依赖管理混乱,那你的项目就像一个堆满杂物的仓库,难以维护。今天我就来给大家讲讲前端依赖管理的最佳实践。 为什么需要依赖管理 版本控制:…...

AI助手配置同步工具:解决多工具MCP服务器与指令文件统一管理难题

1. 项目概述与核心痛点如果你和我一样,日常开发中同时使用多个AI编程助手——比如主力用Claude Code,但偶尔也会切到Gemini CLI、Codex CLI、Cursor、Kimi CLI这些工具,去蹭蹭它们的免费额度或者体验下不同的模型能力——那你一定深有体会&am…...

AI编码助手安全护栏:Claude代码生成规则引擎实战指南

1. 项目概述:为AI编码助手装上“护栏”最近在折腾AI辅助编程,特别是用Claude这类大模型来写代码,效率提升确实明显。但用久了就会发现一个问题:模型生成的代码,有时候会“放飞自我”。比如,它可能会引入一些…...

【2026实测】论文AI率居高不下?3大手改技巧与4款工具红黑榜

写文章现在最怕什么?查重?不,现在的风向变了——最怕的是AI率太高。 现在越来越多学校开始严查aigc报告,只要被判定AI率过重,直接打回重写甚至影响答辩资格。很多同学为了降低ai率,四处寻找各种免费降ai率…...

留学生避坑指南:我实测了4种方法,成功将英文论文AI率从97%降到8%

大家最近都在为英文降aigc率发愁吧,作为研三党,我太懂这种痛了,之前我自己写英文初稿,写完直接拿去查重,结果turnitin检测ai率飙到了89%,当时看着报告整个人都懵了。 怎么给英文降ai?对于非母语…...

嵌入式系统硬件/软件集成挑战与Xilinx优化实践

1. 硬件/软件集成的本质挑战 在嵌入式系统和SoC开发领域,硬件/软件集成(HSI)就像两个说不同方言的技术团队试图共同建造一座桥梁。作为Xilinx设计服务部门的工程经理,我经历过数十个因集成问题导致项目延期的案例。最典型的场景是…...

英文论文降AI教程:从97%到8%,2026实测的4种文本结构级优化方法

大家最近都在为英文降aigc率发愁吧,作为研三党,我太懂这种痛了,之前我自己写英文初稿,写完直接拿去查重,结果turnitin检测ai率飙到了89%,当时看着报告整个人都懵了。 怎么给英文降ai?对于非母语…...

应对海外AIGC检测:初稿AI率飙到97%怎么救?4个结构级优化实测指南

大家最近都在为英文降aigc率发愁吧,作为研三党,我太懂这种痛了,之前我自己写英文初稿,写完直接拿去查重,结果turnitin检测ai率飙到了89%,当时看着报告整个人都懵了。 怎么给英文降ai?对于非母语…...

医疗建筑粘滞阻尼器减震性能遗传算法优化设计【附模型】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅如需沟通交流,点击《获取方式》 (1)多目标优化模型与非线性阻尼参数化: 针对…...

低功耗CPLD技术演进与便携设备应用解析

1. 低功耗CPLD的技术演进与市场定位在数字电路设计领域,可编程逻辑器件(CPLD)已经走过了三十多年的发展历程。早期的CPLD主要应用于工业控制和通信设备,其高功耗特性使得消费电子领域的设计师们望而却步。2000年前后,随着半导体工艺的进步&am…...

这下,很多大学老师要睡不着了!

这两年,很多人都在说大学老师“稳定、体面、假期多”,可真把话筒递给高校老师本人,听到的往往不是轻松,而是另一种很闷的疲惫:睡不好,心里总悬着,白天上课,晚上改材料、写本子、赶论…...

RTLSeek:强化学习驱动的Verilog代码多样性生成技术

1. RTLSeek:当强化学习遇上硬件设计自动化在芯片设计领域,Verilog作为主流的硬件描述语言(HDL),其代码质量直接影响着芯片的性能、功耗和面积。传统RTL设计高度依赖工程师经验,一个资深工程师可能需要5-7年才能熟练掌握复杂芯片的…...

Keil5 C51与MDK合并安装避坑全记录:从下载、配置到成功破解

Keil5 C51与MDK合并安装实战指南:从零开始到完美运行 作为一名长期从事嵌入式开发的工程师,我深知Keil在单片机开发领域的地位。无论是经典的51单片机还是功能强大的STM32,Keil都能提供专业的开发环境。但官方将C51和MDK版本分开的做法确实给…...

国内主流AI开发框架横向性能评测

​一、引言:从“能用”到“好用”的框架选型挑战随着大模型与生成式AI从实验室走向产业落地,AI开发框架的选择已从单纯的“能否跑通模型”演变为一套复杂的多维度权衡。开发者普遍面临以下痛点:框架与模型的兼容性、训练与推理的端到端效率、…...

主流AI培训课程对比:五大选型维度实务评测

1. 引言:从技术焦虑到价值落地的“最后一公里”随着生成式AI技术,特别是Sora2、Runway等视频生成模型,以及GPT-4o、文心一言等多模态大模型的快速迭代,企业数字化转型与个人技能升级的迫切需求从未如此强烈。然而,市场…...

【Linux】权限相关指令

1.将命令翻译后交给核心执行2.将核心执行的结果翻译并返回给我们形象理解shell:假如小y过年回家打算相亲了,打算小y并不擅长与异性交流,这时候就拜托了媒人王姨作为中间人,帮忙小y和异性之前传话。这时候王姨就是“外壳程序”shel…...

写了三年CRUD我觉得自己废了,直到产品经理说了一句话

2024年秋天,我在工位上改一个按钮的颜色。从#1890FF改成#4096FF,产品经理说原来的颜色「太老气了」。改完之后,我盯着屏幕发了十分钟的呆。不是因为这个需求有多难,而是我突然意识到,这是我今天写的第四个CSS微调了。上…...

大量全新惠普AM4准系统迷你主机涌入咸鱼,支持桌面端5700G处理器,双M2+SATA三盘位,还可选配GTX 1660 Ti 6GB显卡!

众所周知英特尔12代处理器以及AMD锐龙 5000系处理器都是如今极为坚挺的一代平台,两者注定是未来很长一段时间的传家宝平台。而且你敢信,如今依旧还是主流,横跨多年还没有过时和淘汰的迹象,令无数垃圾佬们蠢蠢欲动。其实咸鱼上早就…...

全中文编程:豆包 AI居然会写单片机程序

AI时代,我写了一段全中文的程序:请写一个STC8H8K单片机的程序,要求连接在P0端口的八个LED灯左边四个与右边四个交替闪烁然后豆包AI 给了我下面的结果。我想问大家三个问题:(1)上面那段话算不算是一个全中文…...

协作边缘AI与联邦学习如何重塑去中心化能源系统

1. 项目概述:当边缘智能遇见分布式能源如果你和我一样,在能源或者物联网行业摸爬滚打多年,就会深刻感受到一个趋势:能源系统的“大脑”正在从云端下沉,从中心走向边缘。过去,我们习惯于将海量的传感器数据—…...

VSIPL:嵌入式信号处理的跨平台解决方案

1. VSIPL:嵌入式信号处理的工业级解决方案在实时嵌入式多计算机系统的开发中,代码的可移植性一直是困扰工程师的难题。1990年代末,来自政府、学术界和工业界的专家们共同创建了VSIPL(Vector Scalar Image Processing Library&…...

Redis分布式锁进阶第五十七篇

Redis分布式锁进阶第二十五篇:联锁深度拆解 多资源交叉死锁根治 复杂业务多级加锁绝对有序方案一、本篇前置衔接 第二十四篇我们完成了全系列终局复盘,整理了故障排查SOP与企业级落地铁律。常规单资源锁、热点分片锁、隔离锁全部讲透,但真实…...

DeepSeek V4的突破:探索未来AI意识的可能性

引言 DeepSeek V4的发布,再次刷新了人们对大语言模型的认知:更强的代码生成、更复杂的逻辑推理、更精准的长文本理解……几乎所有技术评测都在告诉我们:AI又向前迈进了一大步。社交媒体上,关于“AI是否快要拥有意识”的讨论也随之…...

EMC预合规测试:传导与辐射发射的实战指南

1. 预合规EMC测试的核心价值与挑战在电子设备开发领域,电磁兼容性(EMC)问题如同无形的暗礁,往往在产品开发后期才突然显现,导致昂贵的重新设计和上市延迟。我曾参与过一个工业控制设备的项目,团队在功能验证…...

通过环境变量统一管理Taotoken密钥提升项目安全与便捷性

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 通过环境变量统一管理Taotoken密钥提升项目安全与便捷性 在开发基于大模型的应用时,API密钥的管理是一个基础但至关重要…...