3D点云
PointNet
1、3D数据应用领域:self-Driving cars、Augmented Reality
如何获取3D数据:传感器扫描后得到的就是点云数据,Lidar、Depth camera
常见的点云数据集:
打开txt点云文件的3Dview软件:CloudCompare
6维数据:X Y Z Nx Ny Nz前三维是位置,后三维是法向量
2、通用网络架构:
分类任务Classification;部件分割Part Segmentation;场景分割Semantic Segmentation等
如何处理三维数据?
方法一:全角度拍摄物体照片,然后将图片通过CNN提取特征出来
方法二:直接3D点云数据输入
点云数据特性:
• 无序性:只是点而已,排序顺序不影响
• 近密远疏的特性:扫描与视角不同导致
• 非结构化数据,直接CNN有点难
• 要解决的任务就是如何对点云数据进行特征提取
Yolo为什么好用,因为Yolo是End2End的一种结构,所以在目标检测界非常受欢迎
而PointNet也是这么一种,它省去了那些预处理而直接利用点云,当下深度学习的核心思想就是一条龙服务(End2End),输入点云数据通过PointNet就能输出下列的对应数据
PointNet:Object Classification、Object Part Segmentation、Semantic Scene Parsing
3、PointNet基本出发点:
由于点的无序性导致,需要模型具有置换不变性;
直接利用Max函数(简单粗暴);
能不能先升维然后再作Max操作(其实就是神经网络的隐层);
4、基本模型架构:
分别对每个点进行特征提取(卷积或者全链接),再MAX得到全局进行输出
整体网络架构:
分类就是得到整体特征再输出;分割就是各个点特征输出结果
5、点云应用领域与发展趋势
3D点云应用:
• 点云分割
• 点云化工场景
• 点云配准
• 点云世界
• 点云应用
• 激光雷达
• 物体检测
一个推荐的数据集:
Urban-Scale Point Clouds in SenseUrban Dataset(Cambridge、Birmingham)
6、点云数据毕竟是扫描出来的,有些数据会不完整,因此需要去点云补全
点云补全:
整体来说类似GAN和Unet那种感觉(编码解码网络)
点云生成:
算法和软件都用,很多都是基于深度学习算法将无人机图像做成3D点云。
点云物体检测:
其实传统图像中能做的都可以在点云中实现。
点云配准:
医学与地图构建中经常会使用到,可以当作是怎么项目的基础支撑。
三维重建基础
1、应用领域概述
把一系列的2D图像信息提取出3D图像信息
• 人物设定
• 虚拟现实
• 机器人手臂
• 辅助驾驶
• 定位与追踪
如何三维重建?
人工,软件等方法慢慢磨(那时相当地慢),目前可以通过激光雷达等获取深度与三维信息(这个贼鬼),可以采用适用的方法:使用各个视角图像进行三维重建(这个便宜还容易)
相机成像:小孔成像
相机坐标系、像素坐标系、世界坐标系
2、
TSDF(Truncated Signed Distance Function)截断有向距离场融合算法
先看咱们手里有啥东西:
1、原始图片;
2、对应的深度信息
3、每张图的相机位姿
4、相机内参
整体概述:
这个也就是TSDF的更新和组合的过程,一步步计算各个体素(位置的)TSDF值再把他们拼接起来
流程分析:
• 首先需要构建一大块空区域(不能太大,GPU放不下)
• 一般咱们把这个大区域叫做Volume
• 它由很多个小区域组成,每个叫voxel(体素)
• 需要计算每个voxel的TSDF值及其权重
初始化操作:
• 一个三维的大区域(TSDF图)由LWH个三维小方块组成
• 其中每个小方块的大小也是自己定义的,例如0.05m0.05m0.05m
• 5m5m5m的真实三维场景中有10^6个体素,计算量还是很大的
• 一般都用GPU来算,CPU也可以,但是会很慢
要对每一个体素计算什么呢?(一个体素的SDF值,是它到最近的表面的距离,T表示截断的意思,太近太远的设为定值)
如何计算TSDF呢?
转换操作(ds,其实就是我们的深度图中的数值,深度图上的每一个点坐标是对应像素坐标系而言的)
• 遍历每一个体素,计算其在世界坐标系中的位置
• 根据初始化“大块”时设置的极点位置和体素大小决定
• 再将其在世界坐标中的值转换成其在相机坐标系中的位置(位姿RT已知)(其到相机坐标原点的距离就是dv)
• 再根据相机内参,转换到像素坐标(因为我们由深度图,得到像素坐标能得到其深度值)
Pytorch深度学习框架
1、创建一个矩阵:所有的结果都是tensor,它是底层
x = torch.empty(5, 3)
x
来个随机值试水:
x = torch.rand(5, 3)
x
初始化一个全零的矩阵:
x = torch.zeros(5, 3, dtype=torch.long)
x
2、Tensor常见的形式有哪些?
0:scalar, 通常是一个数值
1:vector,例如:[-5., 2., 0.],在深度学习中通常指代特征,例如词向量特征,某一维度特征等等v = [v1,v2,……,vn]
2:matrix, 一般计算的都是矩阵,通常都是多维度的
3:n-dimensional tensor