《4DenoiseNet: Adverse Weather Denoising from Adjacent Point Clouds》
一、引言:(阐述研究的动机,说明研究的目的)
问题:恶劣天气下导致激光雷达点云会丢失并离散。
影响:对下游的感知算法的影响(建图缺损,漏检误检…)。
//进行研究的动机或背景
这项研究的意义或目的:为下游的算法(建图,定位,目标检测,导航)提供干净、鲁棒的激光雷达数据。
//研究工作的目的
研究工作的简介:区别于之前的研究,以及数据流在整个框架处理的流程,研究成果效果与之前比较的突出点,是否有实验支撑。
难点:传感器特性,点云稀疏,噪声遮挡,噪声密度变化(个人胡思乱想:卡尔曼滤波是否可以预测密度变化),为什么是难点,因为无法有效区分有效点和噪声点。
针对难点的工作:(创新点吧)深度学习架构学习均方差函数。解决的关键是高效利用时空信息。我们的体系结构通过k近邻卷积核捕捉时空信息以及运动引导的注意机制来研究这些现象。
//主要的研究工作
1、第一个利用时空信息对恶劣天气激光雷达去噪的神经网络方法。
2、提供标注的半模拟数据集,将成为户外激光雷达传感器应用的重要组成,为所有下游任务提供干净的感知数据。
//研究工作的在该邻域的地位和贡献
二、相关研究
传统的方法(ROR,SOR,DROR,DSOR,LIOR,DDIOR)
Dsor: A scalable statistical filter forremoving falling snow from lidar point clouds in severe winter weather.
学习的方法( Cylinder3D/Searching efficient 3d architectures with sparse point-voxel convolution/Panoptic-polarnet:Proposal-free lidar point cloud panoptic segmentation/Squeezeseg:Convolutional neural nets with recurrent crf for real-time road-object segmentation from 3d lidar point cloud/Squeezesegv2: Improved model structure and unsupervised domain adaptation for road-object segmentation from a lidar point cloud/Squeezesegv3:Spatially-adaptive convolution for efficient point-cloud segmentation/Lite-hdseg: Lidar semantic segmentation using lite harmonic dense convolutions/Pointnet:Deep learning on point sets for 3d classification and segmentation/Point-net++: Deep hierarchical feature learning on point sets in a metric space/Large-scale point cloud semantic segmentation with superpoint graphs/Splatnet: Sparse lattice networks for point cloud processing/Tangent convolutions for dense prediction in 3d/Randla-net: Efficient semantic segmentation of large-scale point clouds/Latticenet: fast spatio-temporal point cloud segmentation using permutohedral lattices/Sparse single sweep lidar point cloud segmentation via learning contextual shape priors from scene completion/Rangenet++: Fast and accurate lidar semantic segmentation/Rpvnet: A deep and efficient range-point-voxel fusion network for lidar point cloud segmentation)
三、实现方法
1、点云球面投影
fvup是从水平面到垂直视角的角度
sh是整个图像的高度,sw是整个图像的宽度。xyz代表点云的坐标值,额外加一个强度值通道。u行,v列。
2、空间信息使用
空间点密度对判断点是否是噪声点是帮助的,噪声点的密度往往更小,但不是决定性的。
第一个卷积层获取每个点的k邻域(KNN卷积)
为何经过relu函数会变为32维?锚点和邻域点与权重相乘。所有点经过该操作放入relu函数后,空间纬度由HW5变为HW32,应该有填充。
w是训练权重。ps:什么是卷积,系统某一时刻的输出是由多个输入共同作用(叠加)的结果。
∂p不太明白是什么意思。看公式理解为p点k个邻域点。
整个公式:邻域点对应的权重值乘以邻域点对应的投影后的点//将该查询点所有邻域点乘以相应权重求和
图4的值作为ReLu函数(其实就是个取最大值的函数)的输入。ps:ReLu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。相关的特征并不是很多,因此稀疏化能够更好地挖掘相关特征,拟合训练数据。
3、时间信息的使用
噪声比有效点更加混乱,由于气流其轨迹无法预测。
由雪引起的噪声两次出现在相同位置的概率极低。
用当前点云的坐标系以及锚点对上一帧的点云搜寻KNN点集,获取时间信息。
卷积之前将笛卡尔坐标系转为球坐标系
时间-KNN-卷积:
4、神经网络的设计与训练
假设前提:拥有时间空间特征的函数,其效果优于同类函数。
通过下图神经网络近似估计该函数
Residual block:解决梯度消失和梯度爆炸问题,在训练更深网络的同时,又能保证良好的性能。K是卷积核大小,D卷积核膨胀(dilation 是对 kernel 进行膨胀,多出来的空隙用 0 padding,用于克服 stride卷积步长 中造成的失真问题,引入 dilation 的目的是 既想利用已经训练好的模型进行fine-tuning,又想改变网络结构得到更加dense的score map),BN:让激活函数的输入分布保持在一个稳定状态来尽可能避免它们陷入梯度饱和区,又引入了两个可学习(learnable)的参数一定程度上保证了输入数据的表达能力。
Dropout: dropout是指在深度学习网络的训练过程中,对于神经网络单元,按照一定的概率将其暂时从网络中丢弃。注意是暂时,对于随机梯度下降来说,由于是随机丢弃,故而每一个mini-batch都在训练不同的网络,是CNN中防止过拟合提高效果的一个大杀器.
Pixel Shuffle:是一种上采样方法,可以对缩小后的特征图进行有效的放大。可以替代插值或解卷积的方法实现upscale。主要功能是将低分辨的特征图,通过卷积和多通道间的重组得到高分辨率的特征图。
Motion guided attention:《Motion Guided Attention for Video Salient Object Detection》2019港大 MGA 运动引导的注意力机制,为了建模显著运动如何结合外观信息来影响物体显著性的。
Softmax:分成soft和max两个部分,核心在于soft,Softmax的含义就在于不再唯一的确定某一个最大值,而是为每个输出分类的结果都赋予一个概率值,表示属于每个类别的可能性。
Jaccard index:用于比较有限样本集之间的相似性与差异性。 Jaccard系数值越大,样本相似度越高。也被称为IOU score。
Lovász-Softmax loss:神经网络中联合损失平均交集的直接优化方法。《The lovász-softmax loss: A tractable surrogate for the optimization of the intersection-over-union measure in neural networks》
mi©:使用softmax将模型输出映射为概率分布,类别概率xi©,第c个类的 pixel errors 为 m©,c=yi(x)输出的结果与真值一样。
优化公式如下:
如下图就是K3D3的情况
跳跃连接:跳过一层或者好几层,从而将信息传递到神经网络的更深层。
四、实验复现
1、数据集
训练数据集:暂未开源。
测试数据集:/media/pf/Elements/MY_PROJECT/lidar_desnow/cadcd/2018_03_06/0005/raw/lidar_points
测试命令:cd networks/train/tasks/semantic
激活虚拟环境 AI :conda activate AI
python3 infer.py -d /media/pf/Elements/MY_PROJECT/lidar_desnow/cadcd/2018_03_06/0005/raw/lidar_points/ -m /home/pf/open_source_code/4DenoiseNet-main/logs/2022-9-22-20:56/ -l /home/pf/open_source_code/4DenoiseNet_predict/ -s test
2、数据测试
使用源码提供的数据集测试
python3 infer.py -d /home/pf/open_source_code/4DenoiseNet-main/toy_snowyKITTI/dataset/ -m /home/pf/open_source_code/4DenoiseNet-main/logs/2022-9-22-20:56/ -l /home/pf/open_source_code/4DenoiseNet_predict/ -s test
ModuleNotFoundError: No module named ‘yaml’。
pip install pyyaml
ModuleNotFoundError: No module named ‘cv2’
pip install opencv-python
No such file or directory: 'root/logs/2022-9-22-20:56/arch_cfg.yaml
/home/pf/open_source_code/4DenoiseNet-main/logs/2022-9-22-20:56/
ModuleNotFoundError: No module named ‘scipy.spatial.transform’
scipy版本太低
pip uninstall scipy
pip install scipy
AssertionError//assert len(self.testloader) > 0,当len < 0会引发异常
modified the /4DenoiseNet/logs/2022-9-22-20:56/data_cfg.yaml file to infer sequence 22
RuntimeError: version_ <= kMaxSupportedFileFormatVersion INTERNAL ASSERT FAILED at /opt/conda/conda-bld/pytorch_1579022119164/work/caffe2/serialize/inline_container.cc:132, please report a bug to PyTorch. Attempted to read a PyTorch file with version 3, but the maximum supported version for reading is 2. Your PyTorch installation may be old
原因是:在高版本上训练模型,在低版本上加载模型带来的版本冲突问题。
尝试了很多方法,只有更新版本才能解决问题
conda update pytorch torchvision
AttributeError: module ‘torch’ has no attribute ‘arctan2’
pytorch 1.10版本没有arctan2 官网搜索该版本也没有搜索到arctan2
只有arctan.且只有一个参数//卸载PYTORCH
重新创建虚拟空间-python-3.9 pytorch-1.12.0
成功测试该算法。
使用自己下载的数据集测试
暂未实现
3、结果可视
可视化数据
python3 snow_visualize.py -d /home/pf/open_source_code/4DenoiseNet-main/toy_snowyKITTI/dataset/ -c /home/pf/open_source_code/4DenoiseNet-main/networks/train/tasks/semantic/config/labels/snowy-kitti.yaml -p /home/pf/open_source_code/4DenoiseNet_predict/ -s 22
ModuleNotFoundError: No module named ‘vispy’
pip install vispy
ModuleNotFoundError: No module named ‘matplotlib’
conda install matplotlib
ModuleNotFoundError: No module named ‘auxiliary’
将utils 下的laserscanvis.py 中from auxiliary.laserscan 修改为 from laserscan
ModuleNotFoundError: No module named ‘imageio’
pip install imageio
将可视化命令中的 -dc 改为-c