本节主要介绍PointNet语义分割,其中主干网络和代码环境等PointNet详细介绍请参考三维目标检测 — PointNet详解(一)_Coding的叶子的博客-CSDN博客,这里不再进行重复介绍。 PointNet文章作者关于三维物体检测的讲解请参考3D物体检测的发展与未来 - 深蓝学院 - 专注人工智能与自动驾驶的学习平台。

1 代码环境部署

请参考三维目标检测 — PointNet详解(一)_Coding的叶子的博客-CSDN博客。

2 数据介绍

2.1 原始数据

S3DIS(Stanford Large-Scale 3D Indoor Spaces Dataset )数据集是斯坦福大学开发的室内点云数据集,含有像素级语义标注信息。官方下载地址为http://buildingparser.stanford.edu/dataset.html,需要简单填一下信息,填完即可出现下载链接,不需要进行邮箱验证确认。

这里下载的数据集为Stanford3dDataset_v1.2_Aligned_Version.zip,解压之后有Area_1(44个场景)、Area_2(40个场景)、Area_3(23个场景)、Area_4(49个场景)、Area_5(68个场景)、Area_6(48个场景)六个文件夹,即6个不同区域。S3DIS在6个区域的271个房间中共采集了272个场景。每个场景包含一个txt点云文件和一个Annotations文件夹。这个txt文件是该场景的全部点云,每个点云含xyzrgb六个维度数据。Annotations文件夹下为各个类别的txt点云文件,同样存储了xyzrgb六个维度的数据。显然。各个类别的点云应该是总的场景点云的一部分。场景和语义类别共分为:

11种场景:Office(办公室)、conference room(会议室)、hallway(走廊)、auditorium(礼堂)、(open space开放空间)、 lobby(大堂)、lounge(休息室)、pantry(储藏室)、(复印室)、copy room(储藏室)和storage and WC(卫生间)。

13个语义元素: ceiling(天花板)、floor(地板)、wall(墙壁)、beam(梁)、column(柱)、window(窗)、door(门)、table(桌子)、chair(椅子)、sofa(沙发)、bookcase(书柜)、board(板)、clutter (其他)。

2.2 数据预处理

数据预处理脚本如下:

cd data_utils
python collect_indoor3d_data.py

/data_utils/meta/anno_paths.txt存储了全部272个场景下的Annotations文件夹路径。/data_utils/meta/class_names.txt列举了上面13个语义元素的标签名称。将Annotations文件夹下的每个txt文件与语义标签类别进行合并,这样每一个点的数据组成为xyzrgbl,l表示标签序号labelid。将合并的文件再次合并到一起,例如Area_1/Conference_room_1/Annotations/文件夹下的33个文件内容加上标签后全部合并到一起,得到Nx7维度的点云数据,N表示该场景中的点云数量。

每个Annotations合并后的文件以numpy形式保存到data/stanford_indoor3d文件夹下,名称为区域_场景.npy,共271个文件,这说明其中1个场景未采集数据。这里并不去细究是哪一个场景没有数据。

2.3 模型输入数据

样本选取:区域Area_5中数据用作评估测试,其他区域数据用于训练。预处理会对每个房间采样4096个点,并且采样后所有样本的点的总数量与原始271个场景房间中点的总数量相等。在总数量保持不变的情况下,采样点的数量下降导致需要增加样本数量,因而同一个场景会多次采样,并且同个场景被采样的概率大小其点云占总数量的比例成正比。经过采样后,训练样本数量为47623,测试样本数量为18923。

4096个点的采样过程:随机选择点云中的一个点作为样本中心点,选取该点xy方圆1米内的点,z方向上不做限制。算法中限制这一步必须至少采样到1024个点。接着对采样出来的点随机选择4096个点,如果前一步点的数量大于等于4096则无重复选择,否则可重复选择出4096个点。

   归一化:

(1)将采样出来的4096个点坐标减去上述采样的样本中心点坐标,得到Point[:3],并且输入模型前会进行旋转增强。

(2)将rgb颜色信息除以255,得到Point[3:6]。

(3)将采样出来的4096个点坐标除以房间中坐标的最大值,得到Point[6:9]。

最终模型的输入为的归一化点信息(4096x9)和类别标签(4096)。

3 模型结构

PointNet结构如下图所示,图中上半部分为分类网络并已经在三维目标检测 — PointNet详解(一)_Coding的叶子的博客-CSDN博客详细介绍。下半部分为分割网络,也是本节重点介绍的内容。

(1)分类部分的模型基本不变,部分变化包括:1)输入点的数量由1024变为4096。2)获取空间坐标变化矩阵的第一个卷积输入通道数量由3变为9。3)空间变换矩阵仅与输入点前3个坐标相乘,后6个维度不变;变换完成后经过卷积conv1d(9, 64)得到64x4096维特征。4)得到的1024维特征属于全局特征,重复拼接到上一步的特征得到1088x4096维度特征。

(2)中输出特征经过卷积conv1d(1088, 512)、conv1d(512, 256)、conv1d(256, 128)、conv1d(128, 13)、log_softmaxt得到13维度的输出,即13个类别log softmax(4096x13),即图中下方的output scores

4 损失函数

损失函数由两部分组成,一部分是交叉熵损失函数,另一部分是64维特征的变换矩阵的损失。这里考虑到类别的均衡性,交叉熵损失函数会为每个类别分配一个权重。在全部原始点云中,同一类别的空间点数量最多的权重最小,取值为1。其他,类别的权重是最大点数量与该类别数量的比值的三分之一次方,显然其他类别的权重大于1。

矩阵变换相当于是在空间内坐标系的变换。因此,训练出的变换矩阵最好是正交矩阵,这样每个维度的特征尽可能保持相对独立。因此,第二部分的损失是矩阵相对于正交矩阵的差值,然后乘以损失系数0.001。

5 训练评估程序

首先运行2.2中的数据预处理脚本,data文件夹需要新建,默认是没有的。然后直接运行train_semseg.py和test_semseg.py即可完成训练和测试,默认的配置就是基础的PointNet。

python三维点云从基础到深度学习_Coding的叶子的博客-CSDN博客_3d点云 python从三维基础知识到深度学习,将按照以下目录持续进行更新。https://blog.csdn.net/suiyingy/article/details/124017716更多三维、二维感知算法和金融量化分析算法请关注“乐乐感知学堂”微信公众号,并将持续进行更新。

【三维语义分割】PointNet详解(一)相关推荐

  1. Fast-SCNN语义分割网络详解

    文章目录 一.简要介绍 二.主要贡献 三.相关背景 (1)编码器-解码器架构 (2)多分支结构 (3)Fast-SCNN 四.网络架构 (1)学习下采样模块 (2)全局特征提取器 (3)特征融合模块 ...

  2. 【三维语义分割】三维点云语义分割可视化

    本文为博主原创文章,未经博主允许不得转载. 本文为专栏<python三维点云从基础到深度学习>系列文章,地址为"https://blog.csdn.net/suiyingy/ar ...

  3. 【三维目标分类】PointNet++详解(一)

    上一节主要介绍了PointNet分类,本节将进一步介绍PointNet++点云分类.本节仍然参考Github上的源码进行介绍,PointNet采用全局最大值池化的方式对全体点云进行了特征抽取,这导致了 ...

  4. CVPR2020:点云弱监督三维语义分割的多路径区域挖掘

    CVPR2020:点云弱监督三维语义分割的多路径区域挖掘 Multi-Path Region Mining for Weakly Supervised 3D Semantic Segmentation ...

  5. CVPR2020论文解读:三维语义分割3D Semantic Segmentation

    CVPR2020论文解读:三维语义分割3D Semantic Segmentation xMUDA: Cross-Modal Unsupervised Domain Adaptation for 3D ...

  6. 【视频课】图像分割最新内容来了(言有三新录制4部分实例分割算法详解)

    课程介绍 图像分割在直播,电商,自动驾驶等行业中有着广泛的应用,有三AI此前推出了<深度学习之图像分割-理论实践篇>课程,让你以最短的时间掌握深度学习图像分割的基础知识并进行代码实践. 我 ...

  7. Open3D 区域生长分割:详解Python实现过程

    Open3D 区域生长分割:详解Python实现过程 Open3D是一个专业的开源三维计算机视觉库,支持针对点云数据进行多种类型算法处理及可视化.其中包括基于区域生长分割的算法,可以对点云数据进行自动 ...

  8. SAFNet 基于相似性感知的三维语义分割融合网络

    SAFNet 基于相似性感知的三维语义分割融合网络 论文 Similarity-Aware Fusion Network for 3D Semantic Segmentation IROS 2021 ...

  9. 跨模态学习在三维语义分割领域适应中的应用

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 小白导读 论文是学术研究的精华和未来发展的明灯.小白决心每天为大家 ...

最新文章

  1. OpenCV | OpenCV彩色图像直方图算法实现
  2. Jsoup:用Java也可以爬虫,怎么使用Java进行爬虫,用Java爬取网页数据,使用Jsoup爬取数据,爬虫举例:京东搜索
  3. python调用ansysworkbench_Workbench通过Python设定材料参数
  4. 手环升级鸿蒙设备名单,定档6月2日!鸿蒙“首批”升级名单公布,共计11款华为机型!...
  5. 史上最全!计算机科学领域顶会最佳论文大合集:微软研究院最多,清华排24...
  6. java 访问网络驱动器_尝试通过GitLab Runner脚本访问网络驱动器但收到错误
  7. [转]mysql慢查询日志
  8. lamp php的ssl,ssh支持
  9. 维基百科 双线性插值
  10. Top20網頁爬蟲工具—5分鐘獲取網站數據
  11. Google PAI资料整理及实现
  12. 仿微信 即时聊天工具 - SignalR (一)
  13. ad域推送软件_ManageEngine ADManager Plus(AD域管理工具) V7.0.1 官方中文版
  14. 【图像分类数据集】非常全面实用的垃圾分类图片数据集共享
  15. jQuery日常记录
  16. 信息检索平台Terrier的使用
  17. QT将10进制转换为2进制与16进制
  18. ubuntu18.04 网络配置 ipv4ipv6DNS路由
  19. ffmpeg rtmp推流代码示例
  20. 高效能屌丝创业者的七项习惯

热门文章

  1. Qt [GC9-18]:液晶仪表素材准备及转速表和速度表实现 Qlabel绘制图形
  2. Unity2D武器——炸弹的投放与碰撞检测
  3. CPU散片与盒装的区别
  4. 了解redis队列原理
  5. 教你如何使用Flutter和原生App混合开发
  6. 查看网络端口连通性,查看网略策略是否开通
  7. 阿里云平台的人脸识别接口测试
  8. Java内存溢出的几个区域,注意避坑
  9. Java实现敏感词过滤双向词库完美跳过24口交换机
  10. linux pureftpd 无法上传文件,实现了在pure-ftpd下限制上传文件类型的功能