ST3D++: Denoised Self-training for Unsupervised Domain Adaptation on 3D Object Detection

ST3D++: Denoised Self-training for Unsupervised Domain Adaptation on 3D Object Detection


如题,本文是ST3D的改进版。没看过ST3D的可以先去阅读一下: ST3D
主要介绍与ST3D的区别(改进之处):
1.添加了伪标签的分类信息
2.考虑了源域和目标域之间的数据分布问题设计了特定域的归一化和联合优化方式。

首先给出文章的总结:

  1. 在Waymo, nuScenes, KITTI, Lyft 四个流行的3D检测数据集上进行首次尝试域迁移。
  2. 兼顾定位质量和分类精度 提出source-assisted 训练策略:特定域的归一化和联合优化
  3. 对三维物体检测中的伪标签质量进行了研究,提出五个定量指标
  4. 探索利用时间信息通过融合的顺序点帧来进一步改进ST3D++

Method

Hybrid Quality-aware Criterion for Scoring

IoU和Cls在不同类别有着不同的效果:
在这里插入图片描述
为了同时评估定位和分类的质量,提出了一种基于IOU的标准,该标准进一步与基于置信度的标准相结合来评估预测质量,将ST3D中的u评分替换为o:
在这里插入图片描述
p,u分别为分类分数和IoU分数,作加权相加。

Source-assisted Self-denoised Training(SASD)

采用了特定领域的归一化(Domain Specific Normalization)方法和通过对源数据和伪标记的目标数据进行联合优化(Optimization Objective)来减少误差累积
Domain Specific Normalization:用一个非常简单的特定于域的归一化(DSNorm)层来替换每个BN层,它在归一化层分离了不同域的统计估计
在这里插入图片描述
d ∈ {s, t}

在这里插入图片描述
在这里插入图片描述
Optimization Objective:综合考虑这两个领域的联合
在这里插入图片描述

EXPERIMENTS

在这里插入图片描述
在Waymo->KITTI的结果最好,各个类别均超过了Oracle,其中改进在Pedestrian和Cyclist上效果明显:远高于ST3D
在Nusense->KITTI的多帧信息实验:
在这里插入图片描述
消融实验:
在这里插入图片描述
可以看到MEV、HQAC、SASD三个模块的提升较大

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SAR(Synthetic Aperture Radar)图像去噪是一个重要的问题,BM3D算法是一种常用的SAR图像去噪算法。下面是SAR+BM3D算法的步骤: 1. 对SAR图像进行小波变换,得到各个尺度的小波系数。 ```python import pywt coeffs = pywt.wavedec2(sar_image, 'db4', level=3) ``` 2. 对每个小波系数进行分组,每组大小为$N_1 \times N_1$,并计算每组的3D块。 ```python import numpy as np N1 = 8 N2 = 8 N3 = 8 blocks = [] for coeff in coeffs: for i in range(0, coeff.shape[0]-N1+1, N1): for j in range(0, coeff.shape[1]-N2+1, N2): for k in range(0, coeff.shape[2]-N3+1, N3): block = coeff[i:i+N1, j:j+N2, k:k+N3] blocks.append(block) blocks = np.array(blocks) ``` 3. 对每个3D块进行相似性匹配,得到每个块的相似块集合。 ```python from sklearn.neighbors import NearestNeighbors k = 16 neigh = NearestNeighbors(n_neighbors=k) neigh.fit(blocks.reshape(blocks.shape[0], -1)) similarity_matrix = neigh.kneighbors_graph(mode='distance') similarity_matrix = similarity_matrix.toarray() ``` 4. 对每个块的相似块集合进行3D变换,得到每个块的3D变换系数。 ```python from sklearn.decomposition import PCA pca = PCA(n_components=3) transformed_blocks = [] for i in range(blocks.shape[0]): similar_blocks = blocks[similarity_matrix[i] > 0] transformed_block = pca.fit_transform(similar_blocks.reshape(similar_blocks.shape[0], -1)) transformed_blocks.append(transformed_block) transformed_blocks = np.array(transformed_blocks) ``` 5. 对每个块的3D变换系数进行硬阈值处理,得到每个块的去噪系数。 ```python sigma = 0.1 threshold = sigma * np.sqrt(2 * np.log(blocks.shape[0] * transformed_blocks.shape[1])) denoised_transformed_blocks = np.where(np.abs(transformed_blocks) < threshold, 0, transformed_blocks) ``` 6. 对每个块的去噪系数进行3D逆变换,得到每个块的去噪结果。 ```python denoised_blocks = [] for i in range(blocks.shape[0]): denoised_transformed_block = denoised_transformed_blocks[i] denoised_block = pca.inverse_transform(denoised_transformed_block) denoised_blocks.append(denoised_block) denoised_blocks = np.array(denoised_blocks) ``` 7. 对每个块的去噪结果进行加权平均,得到SAR图像的去噪结果。 ```python weights = np.ones((N1, N2, N3)) denoised_image = np.zeros_like(sar_image) count = np.zeros_like(sar_image) index = 0 for coeff in coeffs: for i in range(0, coeff.shape[0]-N1+1, N1): for j in range(0, coeff.shape[1]-N2+1, N2): for k in range(0, coeff.shape[2]-N3+1, N3): denoised_block = denoised_blocks[index] denoised_image[i:i+N1, j:j+N2, k:k+N3] += denoised_block * weights count[i:i+N1, j:j+N2, k:k+N3] += weights index += 1 denoised_image /= count ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值