SqueezeSeg系列
文章目录
- SqueezeSeg系列
- 1 squeezeSeg v1
- 2. SqueezeSeg v2 (20180922)
- 3. squeezeSeg V3
- 4. pointSeg
- 5. RIU-Net: Embarrassingly simple semantic Segmentation of 3D lidar point cloud (arxiv 20190606)
- 6. RGB and LiDAR fusion based 3D Semantic Segmentation for Autonomous Driving (arxiv-20190717)
- 7. LU-Net: An Efficient Network for 3D LiDAR Point Cloud Semantic Segmentation Based on End-to-End-Learned 3D Features and U-Net
- 8. rangeNet++
- 9. lightningNet
- 10. MINet
1 squeezeSeg v1
1. introduction
当下问题的分析:
- 不能很好的一般化应用
- pipline的方式可能导致每个阶段误差累计,从而效果差
- 许多地面消除方法依赖于RANSAC, GP-INSAC,agglomerative clustering. 这些方法都不稳定。
所以作者提出了本文的算法
基本思想:将3D点云投射到前视图上,然后再利用深度学习分割方法获取点的类别。
2 数据处理
1. 映射方式: 将点的坐标系表示成球坐标的方式,用垂直角度
θ
\theta
θ和水平角度
Φ
\Phi
Φ. 如下图公式:
效果图:
- 计算水平角度和垂直角度,垂直方向等于激光线数;水平角度范围90度,根据投射平面宽度等分。
- 通道数[x,y,z,i,r], 其中r为 ( x 2 + y 2 + z 2 ) \sqrt(x^2+y^2+z^2) (x2+y2+z2)深度信息
- v2版本添加了一个mask通道,用来表示该像素中是否含有点。
2. 实际的映射
- 激光的每个水平线束应该投射为一行,但是实际上每一水平线束实际的垂直角度是不一致的(由于车的抖动导致的),所以一束水平线束不能被投影到一行里,所以作者实际根据每一个点是那个线束发出的来进行投影的,而不是根据公式计算垂直角度进行投射的, 而KITTI数据集的排列是按照线束进行排列的,一个线束的点挨在一起。所以可以很好滴实现这个操作,(而我们的点云录制过程每个点没有线束标记,所以不能很好的投射)
3.利用3D场景构建扩增数据集
作者采用DeepGTAV(用Script Hook V as plugin),构建3D场景下的点云扫描数据。
https://github.com/ai-tor/DeepGTAV
http://www.dev-c.com/gtav/scripthook
- 为了使得模拟场景切合KITTI,作者添加了一些噪声,使得和KITTI数据接近
3 网络架构
1. 整体网络结构
2. 主要firelayer模块
使用的主干网络是squeezeNet,主要模块是FireModule
3. CRF模块
该模块使用CRF进行分割校准
关键点
- 使用SqueezeNet网络进行特征提取时,只进行横向的卷积采样; 也就是下采样的时候在宽度上进行下采样,而不在高度上。因为输入图片高度和宽度比太小,所以不在高度上采样。
- CRF使用的是RNN方式进行模拟的, (未了解)。
- fire module结构可以学习一下。
4. 效果对比
性能对比:
- instance-level是采用传统方法DBSCAN
速度对比:
通过虚拟场景点云数据的增广效果:
5. 一些启示(from experiment/ other aspects)
模型设计方面
- 根据数据特性,只下采样宽度
应用方面:
- 可用于障碍物检测(可能只能针对实体障碍物), 可能先对投影数据进行膨胀,将护栏这种障碍物变成密集障碍物,然后再分割。将空隙中的障碍物变成护栏的时候消除其像素特征。
- 采用前视图识别路沿如何 (不会遮挡地面),可以达到快速的识别
2. SqueezeSeg v2 (20180922)
采用了无监督方式进行优化,
作者 | 年份 | 学校 | 会议 | 数据集 | 性能mIOU | 速度 |
---|---|---|---|---|---|---|
Bichen Wu | 20180922 | UC Berkeley | arxiv | KITTI | 73.2 (car) 27.8(ped) 33.6(cyclist) 44.9(avg) | - |
1. introduction
1. 问题
针对SqueezeSegv1的一些不足,提出的改进,不足如下:
- 由于drop noise (噪点)带来的性能不高问题; 而noise的原因是硬件设备有limiting Sensing range, mirror diffusion of the sensing laser, jitter in incident angles. 这个noise 会导致网络早些层的输出被破坏。 后面会有实验进行验证
- 训练模型需要大量的数据,而数据的采集是一个很大的问题,所以本文利用GTA的模拟器,进行场景模拟构造。
2. 基本思想
- 本文针对drop noise 问题设计了一个CAM(Context Aggregation Module)模块
- 为了使得GTA模拟器获取的数据能更好地符合真实数据,则采用domain adaption training; 并且针对domain adaption的问题进行了一些改进
- 为了解决样本不平衡问题,使用了focal loss
2 网络模型
CAM (context aggregation module)
由于squeezeSeg v1版本的网络卷积核很小,这样的话,如果点云有任何丢失都会极大地破坏fmap, 作者为了测试这个猜想做了一个模拟实验:
注意点:
- 这个模块主要在前面几层使用
- 这个设计值得参考,因为pooling就有对小视野局部变化不太敏感的特性,所以使用该层能避免dropnoise
focal loss
F L ( p t ) = − ( 1 − p t ) γ l o g ( p t ) , γ = 2 FL(p_t) = -(1 - p_t)^\gamma log(p_t), \gamma=2 FL(pt)=−(1−pt)γlog(pt),γ=2
其他改进
- 添加mask 通道, 表示该像素位置有没有点对应; 这个通道还是比较有作用的
- 在每个conv后添加BN层
3 Domain Adaptation方面的改进
learning intensity rendering
一些特殊设计:
- 由于可能存在同样的x,y,z的反射强度不同,存在multi-model distribution; 而使用L2损失计算的话,不能捕捉这样的多分布特性,所以采用hybrid loss, 也就是采用分类+回归, 将反射强度分成10份,作为分类region,然后在分类基础上再采用回归进行详细的预测。
可以发现,这种Hybrid方式更加接近真实情况
Geodesic Correlation Alignment
然后又由于合成数据和真实数据存在分布差异,通常合成数据训练的模型在真实数据下不具有一般性,所以作者提出了Geodesic Correlation Alignment(大地线相关对齐), 如下图所示结构,进行联合训练,每次喂给网络两个batch,一个合成数据的,一个真实数据的;这个训练会有两个loss考虑:
- 合成数据的正常训练,用focal loss; 学习点云分割任务
- 合成数据与真实数据之间的geodesic distance loss, 也就是两个batch之间分布的geodesic 距离。学习惩罚两种数据之间的分布差异
最后的损失:
F
L
(
X
s
i
m
,
Y
s
i
m
)
+
λ
×
G
L
(
X
s
i
m
,
X
r
e
a
l
)
FL(X_{sim}, Y_{sim}) + \lambda\times{GL(X_{sim}, X_{real})}
FL(Xsim,Ysim)+λ×GL(Xsim,Xreal)
Progressive Domain Calibration (存在疑问)
具体算法过程如下图所示, 这个方法用于解决网络在真实数据上产生的分布逐层偏移的问题, 作者说Meanwhile, we update the batch normalization parameters (mean and variance) of the layer with the new statistics. 怎么更新?仅需要unlabeled 数据, 所以不是个训练过程。
也就是: 通过带标签的合成数据训练,然后用真实数据unlabeled的数据 统计BN;
4. 效果
5. 一些启示(from experiment/ other aspects)
- 本文的CAM设计很有启发性(通道注意力)
- 本文的GCA设计和PDC设计值得学习 – 不同分布的迁移思想
- geodisic loss 值得学习
- 对于PDC如何更新BN参数,还存在疑问 (暂时理解: 可能BN层的均值和方差都是用来将fmap进行归一化到标准正态分布的,只是 γ , β \gamma, \beta γ,β不同,所以我们只需要将新的真实数据,模拟BN操作,重新累计一下BN的均值方差的期望,可以将合成数据的模型向真实数据迁移一下。)
3. squeezeSeg V3
1. introduction
要解决的问题
尽管规则的RGB和激光雷达图像之间存在相似性,但我们发现激光雷达图像的特征分布在不同的图像位置会发生显著的变化。使用标准卷积来处理这样的激光雷达图像是有问题的,因为卷积滤波器拾取仅在图像的特定区域中活跃的局部特征。因此,网络容量未得到充分利用,分割性能下降。
如何解决
利用提出的空间自适应卷积进行:
标准卷积使用相同的权重来处理所有空间位置的输入要素,而不考虑输入。自适应卷积可以根据输入和图像中的位置来改变权重。
具体怎么做?
- SAC的过程是核心:SAC有四种变形,这里只记录其中一种 SAC-SK 如上图结构中所示的那样
- unfold操作就是 im2col操作;也就是将每个像素周围的kk的值铺平展开,展开成Ik*k 通道数;
- 其实就是对周围k*k个点进行注意力操作,然后再提取特征,再进行后续的分割预测;
- 所以是Spatially-Adaptive Convolution (SAC): 空间自适应的;
def SAC_SK(input_feature, coordi_map):
# Note: Pseudo code for SAC-SK.
unfold_feature = unfold(input_feature, kernel_size=K,
padding=K//2) # (N, C*K*K, H, W)
attention_map = Conv_attention7x7(coordin_map) # (N, K*K, H, W)
attention_map = attention_map.repeat(1, C, 1, 1) # (N, C*K*K, H, W)
input_feature = unfold_feature * attention_map # (N, C*K*K, H, W)
feature = Conv_feature1x1(input_feature) # (N, C, H, W)
feature = Conv_feature3x3(feature) # (N, C, H, W)
output_feature = feature+input_feature # (N, C, H, W)
return output_feature # (N, C, H, W)
2. 总结
- 本文的空间(周边)自适应卷积模块的设计很值得学习,通过注意力方式实现自适应;而不是设计真正的自适应卷积;
- 多种自适应设计也值得借鉴
- 整体思路就是最大程度地提取点的临近特征,而且让网络自己学如何提取—自适应;
4. pointSeg
Pointseg (20180925)
作者 | 年份 | 学校 | 会议 | 数据集 | 性能mIOU | 速度 |
---|---|---|---|---|---|---|
Yuan Wang | 20180925 | - | arxiv | KITTI | 67.4 (car) 19.2(ped) 32.7(cyclist) | 90 fps/GPU |
1. introduction
在SqueezeSeg的基础上,利用PSPNet思想进行网络结构的创新,使得即快有准。
2 数据投影
和SqueezeSeg一样
3 网络结构
1. FireLayer
包括卷积和反卷积,和SqueezeSeg中的一样
2. Enlargement Layer
为了减小赤化层导致的位置信息损失, 用空洞卷积组成类似ASPP进行卷积操作;
- 使用 1x1卷积和global average layer 作为concatenate后面的层,将fmaps进行压缩
3. squeeze reweighting layer
该模块的一些说明-也就是个通道注意力机制:
-
X是前层输出,要进行sigmoid激活
-
Y是X激活后,与通道注意力机制的输出进行融合的结果,Y作为模块输出
-
此外论文的下采样仍然在宽度上,
-
这些模块的使用位置解释如下:
4.效果对比
速度对比:
5. 一些启示(from experiment/ other aspects)
- squeeze reweighting layer模块设计
- 采用了空洞卷积
5. RIU-Net: Embarrassingly simple semantic Segmentation of 3D lidar point cloud (arxiv 20190606)
作者 | 年份 | 学校 | 会议 | 数据集 | 性能 |
---|---|---|---|---|---|
Pierre Biasutti | 20190521 | 波尔多大学 | arxiv | KITTI | 68.5(car) 22.7(ped) 24.4(cyclist) 37.8(avg) |
1. 基本思想
采用Unet这种2D任务中通用的模型,预测前视图投影的range-image点云数据。
2 数据处理
和SqueezeSeg的处理一样,并且添加了一个mask通道,用于表示像素位置是否用点云投射。
3 网络结构
损失函数:
4. 效果对比
- Finally, we advocate that the proposed model can operate
with a frame-rate of 90 frames per second on a single GPU,
5. 一些启示(from experiment/ other aspects)
- Unet损失权重函数的使用很值得学习; 也就是对于边界点的学习添加权重;
6. RGB and LiDAR fusion based 3D Semantic Segmentation for Autonomous Driving (arxiv-20190717)
作者 | 年份 | 学校 | 会议 | 数据集 | 性能 |
---|---|---|---|---|---|
Khaled El Madawi | 20190717 | 开罗大学Valeo R&D | arxiv | KITTI | 68.5(car) 22.7(ped) 24.4(cyclist) 37.8(avg) |
1. 基本思想
就是将图像与雷达融合,然后在SqueezeSeg的基础上在数据通道上添加三个颜色通道,并且结构上采用分离特征融合的方式(【XYZDI】+ [DIRGB]).
注意是将图像的大小向lidar投影后的(64,512,5)大小上看齐; 因为如果要lidar向图像看齐,雷达点太过稀疏([13]论文采用这种方式)
2 数据投射方式:
激光水平投射:
投射后,RGB和原来的5个通道组成8通道,他们分别为如下所示:
3 模型结构
如下图所示:
需要注意模型结构在融合方面有个创新
- early-fusion: 就是只用上图中b中的上面的网络分支,而且输入是XYZDIRGB通道;
- mid-fusion: 是two-branch方式中,在上面模型输入[XYZDI], 在下面模型输入是[DIRGB]; 这样参数多了一倍,但是作者分析到: the separate encoders can be leveraged for other tasks in the respective modalities. This model typically provides better performance compared to early fusion [17] [16]. 这个思想可以学一下, 鸟瞰图自己编的特征是否要分离学习
4. 实现效果
对比:
分析了为什么一些小目标效果差的固有原因:
可视化效果分析, 如下图:
5. 一些启示(from experiment/ other aspects)
- 作者分析了自己预测会有一些边界预测多余,可能是卷积具有平滑特性的原因, 这个我们在训练数据的时候,可以注意卷积的这个特性。
- mid-fusion结构值得学习
- 对小目标效果差的分析也值得学习, 4.小节中有说。
7. LU-Net: An Efficient Network for 3D LiDAR Point Cloud Semantic Segmentation Based on End-to-End-Learned 3D Features and U-Net
作者 | 年份 | 学校 | 会议 | 数据集 | 性能 |
---|---|---|---|---|---|
Pierre Biasutti | 20190830 | 法国波尔多大学 | arxiv | KITTI | LU-Net 72.7(car) 46.9(ped) 46.5(cyclist) 55(avg) |
1. 基本思想
前人分析只有两个通道也可以进行分割预测: However, the analysis presented in [2] showed that feeding a 2-channel range-image with only the reflectance and depth information to a U-Net architecture achieves comparable results to the state of the art.
本文用UNet对前视图投影进行分割预测,但是本文主要的改进是添加了一个分支,这个分支是用过计算前视图的每个像素周围8个点与该像素点的关系,并且用MLP进行编码,然后在与instensity, range通道相加,再用MLP进行编码,得到N个通道,然后进行Unet卷积操作。
2. 基本原理
问题:
- 在进行前视图映射时, 人为地定义特征(x,y,z,r,i)可能不能很好地表征局部信息;
- 对比其他映射方式, range-image方式(也就是前视图方式),提供了轻量的结构性的以及密集地表示点云.
- RIU-Net论文表示了 仅仅用depth和reflectance(也就是距离和反射率)信息既可以得到与最佳效果相近的结果.
- 作者受到Local Point Embedder【11】论文的启发,提出了一个提取局部信息的模块;
- 这个提取局部特征模块,在网络输入Unet之前,也就是数据预处理的时候进行的
整体框架结构
提取局部信息模块
-
- 将该点附近8个点的值与该点作差,如果空的点,差=0
-
- 将得到的差值,用MLP进行编码,再用maxpooling下采样,在于depth和reflectance融合; 注意对于每个cell进行统一的MLP,则就是conv1x1.
- 将得到的差值,用MLP进行编码,再用maxpooling下采样,在于depth和reflectance融合; 注意对于每个cell进行统一的MLP,则就是conv1x1.
Unet结构
3. 实验效果
4. 一些启示
- 利用了点云的周边信息的, 并且让网络学习特征编码
- 我们可以在这个周边信息上做文章,如:采集附近一定范围的信息,对于远处的信息可以不做考虑等
- 前视图方式具有密集,轻量的好处;可以考虑用作物体检测; (专利想法)利用很强的周边信息编码点云检测。
8. rangeNet++
1. 主要的问题
在前视图结构化点云的时候,会引入信息丢失等问题;本文主要解决这类问题;
2. 主要步骤
- 将点云按照球坐标投影到range图(距离图)上,同squeezeSeg方式
- 在range 图上进行2D语义分割
- 将2D语义分割结果转到3D
- 通过后处理方式,对转换结果进行修正,将点云从不需要的离散化和推断工件中清除; 主要解决标签“流血”和“阴影”的情况;
网络结构可以参考squeezeSeg的;也是只对w维度进行卷积;
3. 从range图像重建点云
主要用于解决多个点映射到一个range图的像素上的问题;two or more points which were stored into
the same range image pixel will get the same semantic label;
本文对初始渲染过程中获得的所有数据使用所有 (u, v) 对,并使用与每个点对应的图像坐标对距离图像进行索引 ;
4. 如何通过knn查找label
大体过程是怎样的,怎么实现了GPU的加速计算呢?
- 通过torch的张量的并行操作实现;
- 通过保存(1,N)长度映射索引projx,projy; 以及unproj-range; proj-range来计算knn;这其中用到了unfold也就是im2col的操作;
9. lightningNet
待补充
10. MINet
MINet:嵌入式平台上的实时Lidar点云数据分割算法
待补充