三维模型转变为点云模型的好工具——CloudCompare使用小记

普通三维模型能够直观地展示物体的三维全貌,但是在一些场合需要将三维模型变为相应的点云模型进行展示,而使用激光雷达等传感器采集到的点云信息往往只能反应模型表面的情况,或是使用PCL库中的可执行文件进行转换,这两种操作较为麻烦。笔者最近就遇到了这样一个情况,找到了一个名叫CloudCompare(CC)的软件,能够支持将多种文件格式的三维模型转变为点云模型。以下将本人在使用过程中所使用到的一些操作简记下来供朋友们和将来的自己参考。

一、下载

CloudCompare是一款免费软件,其可以在CloudCompare - Downloads下载,可选择下载安装版或者便携版,笔者下载了安装版,安装过程简单且快速。

二、基本设置

(1)隐藏坐标原点

坐标原点的标记无论是在三维模型还是点云模型中都显得十分突兀,为了画面更加好看,可以通过设置隐藏掉坐标原点的标记。设置方法如下:

在工具栏中找到Display-->Display Settings-->Other options,将“Show middle screen cross”选项取消勾选。

(2)改变背景颜色

为了更好地与点云模型形成对比,需要设置模型界面的背景颜色,设置方法如下:

在工具栏中找到Display-->Display Settings--> Colors and Materials,在右边第三列的Colors选项中点击Background,即可自行更改颜色。

三、三维模型至点云模型转换

(1)导入三维模型

首先准备好三维模型文件,笔者所使用的为.stl文件。在工具栏中找到File-->Open,选择三维模型文件点击打开,即可在CC中看到带转换的三维模型。

(2)导出点云数据

 首先在左上角的DB Tree工作区中点击选中Mesh(即我们的模型),接着在工具栏中找到Edit-->Mesh-->Sample points,即可跳出点云采样的相关设置。Points Number表示设置导出点云模型的点总数,Density表示点云模型点的密度,这两项根据需要进行设置,此处我们不改变默认值,其他选项不用设置,点击OK。此时在DB Tree中就出现了一个新的对象,即Mesh.sampled。

 (3)展示点云模型

操作完以上步骤后会发现,点云模型与我们原来的三维模型重合在一起了,使我们很难看清楚我们点云模型的具体效果。因此需要隐藏我们的原始三维模型,此处笔者非常暴力地再DB Tree中选中了三维模型的根目录,点击右键,再点击Delete,此时三维模型就被删除了,仅留下了点云模型,前后效果如下图所示。看到点云模型后我们可能会觉得其点过于密集或过于稀疏,此时就可以重新打开原始的.stl三维模型并重复以上操作,改变(2)中提到的Points Number和Density参数,笔者将Points Number调节为750而Density调节为0.5时达到了我需要的比较好的效果。

 (4)保存点云模型

在DB Tree工作区中点击选中我们的点云模型Mesh.sampled,即可进行保存操作,保存类型可以自选,保存成txt文件也可以被重新加载进CC中打开。

 

 (5)高程颜色渲染

同样在DB Tree工作区中选中点云模型Mesh.sampled,在工具栏中找到Edit-->Scalar fields-->Export coordinate(s) to SF(s),接着选择需要渲染的轴,之后即可显示出渲染后的点云模型。

笔者所使用到的功能和操作也仅为上述这些,欢迎朋友们指出错误或提出补充,本人也许在之后写一些文书的时候会使用CC进行一些点云图的绘制。 

### LSTM模型训练过程中损失函数变化趋势分析 #### 损失函数的变化趋势 在LSTM模型的训练过程中,损失函数通常会随着训练轮次(epoch)增加而逐渐减小。然而,这种减少并非总是线性的,可能受到多种因素的影响。例如,在阶段初期、中期和后期,损失函数的表现可能存在显著差异。 根据实验数据[^1],可以看到: - **初始阶段 (Epoch 10)**:训练损失为0.3631,验证损失为0.4193,两者之间的差距较大(0.0562)。这表明模型刚开始学习时,其泛化能力较弱。 - **中期阶段 (Epoch 50)**:训练损失降至0.3283,验证损失降为0.3711,两者的差距进一步缩小至0.0428。此时模型的学习效果有所提升,但仍存在一定的过拟合风险。 - **最终阶段 (Epoch 100)**:尽管训练损失继续降低到0.3200,但验证损失却上升到了0.3836,导致二者差距扩大至0.0636。这种情况可能是由于过度优化训练集而导致的过拟合现象。 上述数据显示,虽然训练损失持续下降,但在某些情况下,验证损失可能出现反弹甚至高于前期水平。因此,仅关注训练损失不足以全面评估模型性能;还需结合验证损失来判断是否存在拟合过拟合等问题。 #### 影响损失下降的因素 如果发现训练期间损失函数未能有效地下降,则需考虑以下几个方面的原因及其解决方案[^2]: - 学习率过高可能导致参数更新幅度过大,从而使梯度方向偏离最优解路径。建议尝试调整学习率范围(如从0.1逐步下调至0.0001),找到适合当前任务的最佳值。 - 如果模型架构设计不合理或者初始化权重不当也可能阻碍正常收敛进程。重新审视网络结构并适当修改配置有助于改善此状况。 此外,还可以通过引入正则项抑制复杂度较高的权值组合从而缓解潜在的过拟合倾向[^4]。具体而言,可选用L2范数约束作为惩罚因子加入目标函数计算公式之中实现平滑调节作用。 #### 绘制Loss曲线的方法 为了直观展示整个训练周期内的误差演变轨迹,可以通过记录每次迭代后的即时loss数值存入list容器后再利用matplotlib库完成可视化操作[^3]: ```python import numpy as np import matplotlib.pyplot as plt # 假设这是我们在训练循环里收集得到的一系列loss值 train_loss = [] for epoch in range(num_epochs): ... loss = self.criterion(output, batch_y) train_loss.append(loss.item()) ... print("Length:", len(train_loss)) x = np.arange(len(train_loss)) plt.figure(figsize=(8,6)) plt.plot(x, train_loss, color='blue', linestyle='-', marker='', label="Train Loss") plt.xlabel('Iteration') plt.ylabel('Loss Value') plt.title('Training Process - Loss Curve') plt.grid(True, which='both', linestyle='--', linewidth=0.5) plt.legend() plt.show() ``` 以上脚本片段展示了如何将每一轮产生的瞬时loss累积起来形成序列,并借助绘图工具呈现出来以便于后续深入剖析。 ---
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值