留个笔记自用
SESS: Self-Ensembling Semi-Supervised 3D Object Detection
做什么
3D object detection。3维目标检测
对于输入的3D点云,像2D一样使用一个bounding box去将相应的物体包围起来,不过这里使用的bounding box也同样变成了3维的
做了什么
3D物体检测对数据集的要求都懂,是很昂贵的,这里采用的是一个半监督的结构。
怎么做
首先是定义一下任务,就像其他的3D检测任务一样,输入是一个点云,输出是3D对象分类和边界框定位。
在这里采用的是半监督的方式,使用了N个点云作为训练集,包含了Nt个带标签的点云和Nu个不带标签的点云,分别用PL和PU来表示它们
这里的xi就是n×3的点云输入,yi是GT的对象,每个对象用中心点坐标
和包围框也就是bounding box大小
和它对应的对象类来表示
就像前面定义的方法,这里采用的输入是标签数据和未标签数据的混合即
然后从这每个sample出来的点云里sample出M个点作为一个新的集合,比如这里从训练集中sample两个标号为xL和xU。对第一个sample出来的集合xs附加一个随机变换T,使其变换成xs’
这里就变成了xL’和xU’的并,这两个集合输入student网络
然后重复这个操作,对第二个sample出来的xt直接下分支输入teacher网络(未作随机变换)
然后得到student网络和teacher网络的结果,对teacher网络的结果
使用一个前面student网络输出输入时的随机变换T,得到变换后的yt~
对于这两个输出,即ys(学生网络的输出)和yt~(老师网络输出的随机变换后)根据欧几里得距离找到最接近的输出建议。然后根据三个一致性损失计算每个对齐建议之间的误差。
除此之外,输入中含有的GT label也就是YL刚开始也经过这个随机变换T得到YL~
使用这个yL~与学生网络得到的结果用一个LOSS来约束
使用这些LOSS的梯度首先更新学生网络,然后使用一个叫EMA的算法去更新教师网络的参数
这里的α是一个平滑参数,表示教师网络能从学生网络中获取多少信息
这就是整体结构设计的解释,然后是具体部分
首先是采样方法,也就是训练集中的采样
Stochastic Transform随机子抽样
对学生网络和教师网络的输入点云都采用随机子抽样,简单来说就是子采样点云中的全局几何关系比如对象的3D框位置应该保持相同,这样适得网络学习的结果就是强制二者通过随机输出的一致性来利用全局几何关系。
然后是用了N次的随机变换T,这也是这里的核心,是数据增强和半监督的核心,这篇文章针对3D点云提出了变换方式
常见的随机变换就是啥flip、rotate、scale这种,同样这里也是
这里Fx表示x轴的随机flip也就是翻转,Fy也同样
简单来说,这里的ε是随机数,用来判断它这个点云是否在x轴反转。
R是旋转,使用的常见的3×3旋转矩阵
这里的w是一个角度范围 [ ϑ, +ϑ]的随机数
S是[a, b]范围内随机出来的一个scale数
这三种方法都是在图像增强和随机扰动中很常见的了,得到的T就是前面一直在说的随机变换,而变换方式就是简单的相乘
然后就是模型训练的LOSS,这里的LOSS就是前面所说的一致性损失,三个一致性损失的目的是加强对象位置、类别、大小的一致性,也就是学生网络和教师网络预测的提议一致性
首先设置Cs为学生网络预测的3D包围框的中心坐标,Ct则是教师网络预测的中心坐标经过转换T后的结果,对于ct∈Ct即其中的某一个结果都寻找它在Cs中最接近的(就类似是前面的最近的欧式距离的),然后重新用一个符号来标号这个最近的为CsA
这里的意思就是对Ct中每一个预测框结果都寻找一个Cs中的最近邻
然后就可以开始定义三个LOSS了,这里有中心坐标LOSS Lcenter和语义类别坐标Lclass和包围框LOSS Lsize
首先是center损失
这里就很好理解了,就是两个欧式距离之间的LOSS限制
然后是类别损失
这里还需要定义
作为两个网络预测框的语义类别的预测概率
然后就可以同理寻找它类别概率的最近邻
于是LOSS就可以定义了
就是两者最近邻的cross-entropy
然后是最后一个LOSS,包围框大小LOSS,就同理了
最后将所有LOSS相加
总结
1.据说是第一个将半监督代入3D检测的论文,这一方向的做法非常值得借鉴,采用的是随机变换的方式来做一致性检测,我在想的是能不能使用上下文语义来进行同样的sample方式