# Pointnet_Pointnet2_pytorch **Repository Path**: guoxiao123456/pointnet_-pointnet2_pytorch ## Basic Information - **Project Name**: Pointnet_Pointnet2_pytorch - **Description**: 05_Plant_point_cloud_segmentation - 可以对数据集进行合适的预处理并标记 - 建立深度学习模型并进行训练(可以对植物结构进行准确识别和分割) - 通过不同模型对数据集进行处理得到的多个指标来验证有效性 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-07-02 - **Last Updated**: 2024-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README 1000 任务规划 [x] 打开点云数据的软件 [x] 数据集 [x] 点云软件使用 [] 点云数据预处理 [x] 准备服务器 [x] 算法 [x] 数据集 [x] 点云数据比较 [x] 格式转化要求 [x] 训练 [] 推理 [x] 划分为什么任务 [x] 分类任务数据集准备 [] 训练分类任务 [] 分割数据集准备 [] 训练分割任务 [] 类别依旧是飞机、包 [] 分割效果 项目需求 - 可以对数据集进行合适的预处理并标记 - 建立深度学习模型并进行训练(可以对植物结构进行准确识别和分割) - 通过不同模型对数据集进行处理得到的多个指标来验证有效性 备注:开发之前请先告知采用什么方法 https://data.mendeley.com/datasets/9k7zctdyhs/1 相关项目 - ✔源码 - 【论文解读+代码复现】PointNet++是点云深度学习处理方法的里程碑工作,对pytorch版的PointNet++进行原理讲解和论文复现 - 唐宇迪:【深度学习】三维点云数据集 -pointnet算法解读与应用领域分析-目标检测、分类、匹配(点云标注/点云分割/点云配准数据集/点云可视化) - 快速上手PaddleSeg的医疗3D分割套件MedicalSeg - aistudio案例 - github - 有requirements - 3D分割任何物体 - 制作自己的数据集训练--预测 - 详细教程:windows下运行pointnet(全) - 基于pointNet++模型的个性化数据集训练测试及可视化[附源码]_cloudcompare pointnet - PointNet++训练自己的数据集(附源码) - 制作PointNet以及PointNet++点云训练样本 - Pointnet++分类和分割数据集准备和实验复现 - pointnet语义分割_训练并预测自己的数据 - ✔Pytorch1.7复现PointNet++点云分割(含Open3D可视化) - ✔PointNet++分割预测结果可视化 - 服务器配置 [图片] [图片] ssh -p 56853 root@region-42.seetacloud.com xshell指令比较特殊:ssh root@region-42.seetacloud.com 56853 一、植物点云数据处理 数据较多,大概5G左右。且包含的格式为:Mtl obj(通用的建模格式,通缩SW进行编辑) txt(不同于一般的x,y,z,nx,ny,nz数据格式)文件。 植物数据集一共四个物种: - 南芥 - 番茄 - 烟草 - 高粱 - 559个3D植物枝条结构 3d分割算法无法处理该数据集,因此需要进行数据预处理和数据的格式转换,本研究采用cloudcompare查看3d数据并进行处理。cloudcompare下载连接:https://www.cloudcompare.org/ 采用模型: - pointnet - pointnet++ - pointnet2_cls_ssg - pointnet2_cls_msg - pointnet2_part_seg_msg - pointnet2_part_seg_ssg 二、Cloudcompare使用 3D预览 1.打开软件 [图片] 2.打开obj模型 - mtl处理不了 - obj:通用格式 - txt:无具体模型识别不了,仅表示连接关系 [图片] 3.左键:旋转 右键:移动 滚轮:放大缩小 [图片] 格式转换 - 上面的obj格式是无法编辑的:预处理,需要格式转换 - 使用CloudCompare对obj网格模型转换为pcd/ply点云模型 1. 测试打开的obj网格模型如下图: [图片] 2. 选中obj文件,点击网格上 样本点的图标,输入预生成的点云数量(本研究:100000个点),点击ok [图片] 3. 取消obj网格模型的显示,选中点云模型,就能看到生成的点云模型。 [图片] [图片] 4. 保存成txt格式 [图片] - 100000个点 - 无颜色信息标签 去噪 - 点云数据预处理&特征计算方法(全面总结整理) - 利用CloudCompare进行点云过滤去噪(统计滤波) 点云数据下采样的目的是:将全部点云的操作转换到下采样所得到的关键点上,从而降低计算量的目的。 包括:1.体素下采样2.均匀下采样3.几何采样4.随机采样 点云滤波:去除离群点。点云数据在采集过程中可能会引入噪声和离群点,这些异常值会对后续的点云处理流程如特征提取、配准、曲面重建等造成干扰。因此,滤除这些离群点是点云预处理的重要步骤。 1. 使用的数据为苹果树点云,原数据共3,459,230个点,大小为105 MB,文件格式为ply。 [图片] 2. 按如下操作进行统计滤波: [图片] 3. 由于树点云较密,所以邻近点设置了邻近点为50,执行后,结果点数变为3,139,034。 效果图:点云滤波前后对比 [图片] [图片] 标注 - Cloud Compare点云标注 主要针对部件分割,将某一个物体分为几个部件,采用标注软件分割开来 本研究可不采用,但可以采用部件分割方案:一类别四部件 或者四类别四部件 1. 打开文件后可用鼠标滑轮调整大小,按住鼠标左键翻转,按住鼠标右键可平移 [图片] 2. 然后将需要标注的物体旋转至合适的角度(标注是二维下,实际结果为三维矩形框),点击要标注的文件 选中待标注文件后,点击剪刀状按钮 [图片] 3. 然后点击鼠标左键对待标注物体进行框选,框选完成后点击红心五边形,最后点击√,标注物体就被矩形框框选出 [图片] [图片] 4. 然后点击菜单栏中的+号 [图片] 5. 设置标签名 [图片] 6. 设置value值,(自己设定,比如我要标注两棵树,那这一颗设置1,另一颗设置2,自己明白是哪一棵就行) [图片] 7. 点击确定 [图片] 8. 如果还行对其他物体标注,记得选中文件中的remaining部分 [图片] 9. 标注方法同上,最后将得到的文件合并,首先选中文件栏里的所有文件,然后点击合并 [图片] [图片] 10. 左侧属性栏也可以修改一些参数。最后,点击工具栏中的文件——> 保存,选择需要保存的格式类型然后点击确定。支持pcd、ply、txt、las等格式。 三、训练开源数据-分类:ModelNet40 数据集分析 开源分类 植物点云 数据个数 6 9 每一行内容 x,y,z, nx,ny,nz x,y,z, r,g,b, nx,ny,nz 54.79183197 35.31519699 362.55621338 204 204 204 -0.715286 0.698423 0.023890 代表含义 - x,y,z点云的空间坐标 - nx,ny,nz点云的法向量 数据txt说明 数据集txt配置文件 - 文件路径 - 类别 - 划分测试集 - 划分训练集 [图片] [图片] 类别 四个物种: - 南芥 - 番茄 - 烟草 - 高粱 - 559个3D植物枝条结构 20-30个发育时间点扫描 数据集类型及配置文件: [图片] [图片] 放置路径: 暂时无法在飞书文档外展示此内容 训练 暂时无法在飞书文档外展示此内容 - 训练时可选择不同的model - 训练完会自动生成log文件夹,里面保存了日志文件和网络参数 - 如有显存溢出情况,如: RuntimeError: CUDA out of memory. Tried to allocate 1.41 GiB (GPU 0; 11.91 GiB total capacity; 9.99 GiB already allocated; 999.81 MiB free; 104.72 MiB cached) 训练命令改为: 暂时无法在飞书文档外展示此内容 预测 暂时无法在飞书文档外展示此内容 测试结果 [图片] 四、训练开源数据-部件分割:ShapeNet 数据集分析 开源分类 植物点云 数据个数 6 9 每一行内容 x,y,z, nx,ny,nz,1.00000 x,y,z, r,g,b, nx,ny,nz 54.79183197 35.31519699 362.55621338 204 204 204 -0.715286 0.698423 0.023890 代表含义 - x,y,z点云的空间坐标 - nx,ny,nz点云的法向量 - 1.00000 0.00000类别数 数据txt说明 数据集txt配置文件 - 文件路径 - 类别 - 划分测试集 - 划分训练集 [图片] [图片] 类别 四个物种: - 南芥 - 番茄 - 烟草 - 高粱 - 559个3D植物枝条结构 20-30个发育时间点扫描 数据集类型及配置文件: [图片] 放置路径: 暂时无法在飞书文档外展示此内容 训练 暂时无法在飞书文档外展示此内容 - 训练时可选择不同的model - 训练完会自动生成log文件夹,里面保存了日志文件和网络参数 预测 暂时无法在飞书文档外展示此内容 五、训练开源数据-分类:植物3D点云 数据准备 [图片] 1. txt点云文件 [图片] 2. 文件路径/清单 [图片] 3. 训练数据指定 [图片] 4. 测试数据指定 [图片] 5. 类别 [图片] 6. 数据路径、训练测试指定代码 暂时无法在飞书文档外展示此内容 7. 注意文件名必须是类别名,否则在dataloader报错 暂时无法在飞书文档外展示此内容 放置路径 暂时无法在飞书文档外展示此内容 训练 暂时无法在飞书文档外展示此内容 [图片] [图片] [图片] [图片] 验证 [图片] 六、训练开源数据-部件分割:植物3D点云 数据准备 [图片] 1. 数据文件类型 [图片] 2. 类别文件夹对应 [图片] 3. 数据划分 [图片] [图片] 4. 修改文件名 暂时无法在飞书文档外展示此内容 5. 点云文件末尾添加类别 暂时无法在飞书文档外展示此内容 6. 数据划分 暂时无法在飞书文档外展示此内容 训练 暂时无法在飞书文档外展示此内容 [图片] [图片] [图片] 四类别四部件 [图片] 预测 暂时无法在飞书文档外展示此内容 [图片] [图片] 可视化 暂时无法在飞书文档外展示此内容 [图片] - 缺少rgb图 - 缺少深度图 - 缺少obj文件包含四类的图 暂时无法在飞书文档外展示此内容 项目环境 [图片] 七、结果 pointnet2_cls 暂时无法在飞书文档外展示此内容 暂时无法在飞书文档外展示此内容 pointnet2_cls_msg 暂时无法在飞书文档外展示此内容 pointnet2_cls_ssg 暂时无法在飞书文档外展示此内容 pointnet2_part_seg_msg 暂时无法在飞书文档外展示此内容 暂时无法在飞书文档外展示此内容 暂时无法在飞书文档外展示此内容 暂时无法在飞书文档外展示此内容 损失函数 (A) 分类任务 损失函数包括两个部分,分别是常规的交叉熵(cross_entropy)分类损失,以及特征变换矩阵的损失函数。 暂时无法在飞书文档外展示此内容 [图片] (B) 分割任务 Part分割的损失函数同样包含两个部分,第一部分是分类损失,这一部分损失被置零,不参与训练。第二部分是Part类别损失,其实计算的仍是输入点集中的每一个点的语义分类。第三部分是关于特征变换矩阵的损失 暂时无法在飞书文档外展示此内容 可视化专项 八、疑问 1. 目前只有obj格式的四种类别的三维数据,可以做pointnet++的分割任务吗?还是只能做分类任务呢? 1. 我想要分割植物的特征,在训练的时候将整个植物的点云全部导入模型进行训练吗? 2. 在预测过程中,对于分割任务。输入的是图片还是点云数据?输出的是什么呢? 3. 我想知道pointnet++输出结果的分割图,通过什么进行可视化呢? 4. pointnet++分割之后结果到底是什么样子?像语义分割的样子吗? 5. obj软件如何转换到x,y,z,nx,ny,nz? 6. cloudcompare如何在分类的基础上添加标签? 1. cloudcompare更高点云输出顺序? 7.