之前在中提到,会考虑用深度学习来对3D点云进行处理,接下来迈出脚步,先整几个例子来熟悉它。例子原型来源于官网,博主在其基础上做了一些代码修改。
1. Keras中的资源
Code examples
2.openvinotoolkit
open_model_zoo/demos at master · openvinotoolkit/open_model_zoo · GitHub
主要参考官网Point cloud classification with PointNet
当前环境是python3.6,所以按照中方法创建一个使用python3.8的虚拟环境,并进入虚拟环境下完成一些预库的安装。
安装下trimesh库
所安装的tensorflow库是tensorflow-gpu 2.4, cuda版本是11.2, matplotlib3.1.3。若pip安装超时失败,可以手动去网址上下载。比如要下载matplotlib,则可在上述网址基础上跟/matplotlib,即全网址links for matplotlib
运行如下脚本时报错
800
可参考stackflow上的回答error using trimesh library on python - " no graph engine available " - Stack Overflow
完毕后能正常运行,结果如下
第一次modelnet.zip下载完毕后,可以修改下代码,避免每次运行都要重新下载
这里博主改写下官网示例代码,让其训练的时候可以保存下来模型,供后面的预测阶段来用。代码如下:
训练结果如下:
迭代损失率曲线如下:
预测结果如下:
后续还需要再优化下参数。这个例子只是拿pointNet网络做点云的分类,并没有展示语义分割的功能。
PointNet的相关理论知识可参考论文https://openaccess.thecvf.com/content_cvpr_2017/papers/Qi_PointNet_Deep_Learning_CVPR_2017_paper.pdf
也可以参考一些博客的详解
Pointnet以及Pointnet++论文笔记_慢下去、静下来的博客-CSDN博客
搞懂PointNet++,这篇文章就够了! - 知乎
【3D视觉】PointNet和PointNet++ - 知乎
深度学习3D网络---PointNet++ - 知乎
可参考open_model_zoo/demos/3d_segmentation_demo/python at master · openvinotoolkit/open_model_zoo · GitHub
Openvino的详细配置可参考博主之前,这边不细说了,只会贴上一些记录过程。
下载过程中,opencv_python库会因为超时而报错,可从如下链接处下载
links for opencv-python
完毕后,下载demo示例到本地磁盘上
使用如下命令语句下载模型
会看到模型已经下载到如下位置了
再使用 如下命令语句进行转换
转换后的模型如下
这里用pycharm社区版来打开工程
模型有了,那还差测试数据,可从如下官网上下载
关于数据集的介绍,也可以从这里获取
3-D Brain Tumor Segmentation Using Deep Learning- MATLAB & Simulink Example
下载完毕后,拿训练集中的BRATS_001.nii单个文件来做测试,同时也一张张保存了对应CT图像的每层的标注图。工程目录结构如下:
3d_segmentation_demo.py文件中代码如下:
CT每层的预测结果都有保存到磁盘上,可和标注图做对比。
这个示例不涉及模型的训练,只是拿官方的模型来跑跑效果而已,到此就结束了,后续博主会尝试训练自己的点云数据。
3DCNN的一些理论知识可参考论文https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.169.4046&rep=rep1&type=pdf
其它博客帖子可参考如下:
3D-CNN_3dcnn_qinxin_ni的博客-CSDN博客
3DCNN概述及3DCNN与2DCNN的区别_wwz_20的博客-CSDN博客
深度学习笔记----三维卷积及其应用(3DCNN,PointNet,3D U-Net)_YOULANSHENGMENG的博客-CSDN博客
博主自2017年开始接触到3D点云处理,近几年应用范围越来越广,也越来越火热了。主要是在工业检测、自动驾驶、整形医疗等领域应用越来越广泛了。当年一并接触了深度学习技术和点云处理技术,身边从事该方面工作的童鞋还不多,如今已是火遍整个AI领域了。如下是对三维点云扫描技术的一些整理和一些参考资料的整理。
3D成像方法 汇总(原理解析)--- 双目视觉、激光三角、结构光、ToF、光场、全息 - 知乎
论文《基于数字散斑的双目视觉三维重建方法研究》
【自动驾驶】【快速入门】3D点云与PointNet - 知乎
3D成像技术介绍 - 知乎
自动驾驶(八)---------基于视觉的SLAM_一实相印的博客-CSDN博客
自动驾驶基础知识(一)-什么是自动驾驶 - 知乎
它是利用投影设备将事先设计好的特定模式的结构光图案投影到物体表面,然后使用相机拍摄变形图案,通过分析投影图案在物体表面产生的畸变,再利用投射的特定的编码方案,利用相机针孔成像模式的三角测量原理,得到待测物体上的点的立体坐标。可参考如下博客内容
1. 点结构光
使用半导体激光器将光点投射到被测梧桐表面,通过摄像机获取图像,根据相机成像模型分析光点在相机敏感面和物体表面的位置获得物体的深度信息。需要借助三维位移平台逐点采集和逐次拍照。可参考论文《结构光三维重建技术研究与应用》
2. 线结构光
目前市面上一种很常见的采集技术了,若要形成面,则需要借助于运动平台。主要由线结构光发射器和相机组成,根据激光三角测量原理,由线结构光发射器发射处激光,投射在物体表面上并发生漫反射,反射光进入相机,生成二维图像,通过相机成像之间的关系及预先计算的结构光标定参数,将图像坐标转换为三维点云坐标,同时配合运动平台的移动,可得到被测物体的三维点云数据。详细的一些公式原理推导可以参看论文《基于结构光的软包电池三维重构及表面缺陷检测技术研究》。
3.多线结构光
该方法可以同时处理一幅结构光图像钟的多个特征条纹。这里面提到最多的就是光栅结构光法,可以利用投影装置将光栅条投影到被测物体的表面。
4.编码结构光
编码结构光是为了便于空间中的物点到图像点的映射,将结构光图案按照特定的模式进行设计而来的。编码方法由时间编码方法,空间编码方法,直接编码方法和混合编码方法。通过计算机根据解码原理求出被测对物体表面变形编码图案的解码值,然后利用结构光的基本原理,求出目标上相应的三维坐标。详细的一些公式原理推导可以参看论文《基于编码结构光的三维重建及图像处理研究》
三维重建之结构光编码方案研究_线结构光_少杰很帅的博客-CSDN博客
《基于数字光栅投影结构光的三维重建技术研究》
可参考如下一些资料
TOF技术全解读 - 知乎