XRImmersal×PLATEAUで巨大AR

文章对比了四种视觉定位服务,包括AzureSpatialAnchor、VuforiaAreaTarget、Immersal和ARWAY,详细阐述了每种技术的扫描方式、AR内容创建流程、一致性保持方法以及各自的特点和局限性。Azure依赖自定义扫描,Vuforia使用LiDER,Immersal基于空间照片,而ARWAY则在网络工具上开发AR内容。

起先

您是否听说过一种称为VPS(视觉定位服务/系统)的技术?

简而言之,它是一种AR技术,通过将相机图像与扫描的空间信息相匹配来对齐虚拟和真实空间

VPS 要求您使用准备好或自行准备的扫描仪应用程序提前扫描空间信息。

此外,恒定对齐的方法因VPS而异。

这一次,我实际上运行了 4 个 VPS,并在 4 个项目中比较了它们。

1. 如何

扫描 如何创建

AR 内容 2. 如何保持一致?

3. 印象


Azure Spatial Anchor

在过去的文章中,我们已经总结了 Azure 空间定位点的验证结果。

[参考链接]:我触摸了

Azure 空间定位点 [参考链接]:我验证了 Azure 空间定位点的准确性

我们公司开发的CFA也使用Azure空间定位点。

1. 如何扫描

Azure 空间定位点可以在空间中注册称为空间定位点的内容。

注册空间定位点所需的空间上限是距离该点几米,大约 360 度。

至于 ASA,没有扫描应用程序,

您需要实现自己的扫描应用程序来放置空间定位点。

2. 如何创建 AR 内容

在 Unity 编辑器中,提前在预制件中准备“要放置在空间定位点 (0,0,0) 处的对象”。

通过将AR对象放置在其下方,可以相对于锚点放置AR对象。

下图是一个实际示例。

通过实现上述预制件(主锚点),以便将其放置在读取的空间定位点的位置,

其下的立方体将显示在空间定位点的顶部。

在 Unity 编辑器中完成此操作后,

将其部署到真实设备以探索空间定位点并定位 AR 对象。

(要找到定位点,您需要用相机环顾空间。 如果您

有任何疑问,请在 Unity 编辑器中再次调整它们... 这就是流程。

3. 如何保持一致?

一定程度的自我定位总是会完成的。

因此,当移动大约几米时,空间锚点很少移动。

如果空间锚点移动,放置在其下方的AR对象也会自然移动。

因此,如果AR对象明显偏离预期位置,

则需要重新搜索空间定位点。

这会强制用户环顾注册为空间定位点的空间。

换句话说,考虑到 Azure 空间定位点移出空间定位点周围几米的空间,

因此很难继续准确对齐。

4. 印象

由于单个锚点要注册的空间范围不是很大,因此支持大范围有些困难。

另一方面,由于它是微软提供的服务,因此它与HoloLens 2兼容

由于自我定位可以在比使用移动设备

时稍宽的范围内保持,因此上述弱点可能会有所缓解。


武福里亚地区目标

Vuforia Area Target 通过在应用程序中放置包含预扫描特征点数据的

3D 数据(以下简称 3D 数据),将 3D 数据与空间进行比较和对齐。

1. 如何扫描

Vuforia Area Target 需要使用专用应用程序扫描空间。

(作为前提,扫描应用程序只能在带有LiDER的设备上运行。

扫描并不困难。

只需走路,同时将设备的摄像头对准您想要慢慢 3D 的空间。

每个区域可以预扫描和创建的 1D 数据量是有限制的。

由于数据是在设备的内存上扩展的,因此目前大约 3 分钟的缓慢行走似乎是极限。

但是,可以组合多个扫描的空间5D数据以扩大范围。

2. 如何创建 AR 内容

扫描的数据可以带到 Unity。

实际输出为扫描结果的3D数据如下所示。

在 Unity 编辑器中,如果将 AR 对象放置在该对象(网格)下,将其部署到

实际设备并识别空间,则 AR 对象将出现在任何位置。

3. 如何保持一致?

如果AR对象明显偏离预期位置,

只需将扫描空间投影到相机上并重新对齐即可。

开发人员无需显式调用对齐过程

如果您为您的内容准备了 Vuforia 提供的适当组件,他们将在内部完成。

只要相机上显示预扫描的空间,就可以继续精确对准

■印象

由于使用了LiDER,因此网格的精度很高。

另一方面,由于使用了LiDER,因此不适合对远视图进行网格划分

可以说,它是一款功能强大的室内VPS


沉浸式

在过去的文章中,我们已经总结了Immersal的验证结果。

[参考链接]:从样品中浸入解开 【参考链接】:Immersal

×高原巨人AR

1. 如何扫描

Immersal使用专用的应用程序来绘制空间。

地图是连续数量的空间照片,并转换为点云信息。

根据地图的大小,您可能需要拍摄相当多的照片。

此外,地图的准确性在很大程度上取决于拍摄环境和方法

与其他VPS相比,它需要学习将空间数据转换为数据。

下图是上图中区域的地图。

在此地图数据的同时,还创建了 GLB 格式的网格。

2. 如何创建 AR 内容

在 Unity 编辑器中加载地图数据时,要素点云可以展开为爆炸。

这可能会让您了解空间的大致形状,但分层更多 glb 样式的网格将

更容易在 Unity 编辑器中放置 AR 对象。

之后,就像之前的VPS一样,如果你将其部署到实际设备上并识别空间,

AR对象就会出现在任何地方。

3. 如何保持一致?

沉浸式自我定位依赖于AR基础。

因此,如果移动几米,真实空间和虚拟空间将不可避免地分开。

作为对策,Immersal实现了一个功能,使它们在指定的时间周期内保持一致。

如果相机投射的空间是地图数据数据的一部分,

AR对象的错位将立即得到纠正。

4. 印象

虽然设置了每张地图的最大拍摄次数,但可以准备和连接多个地图,

因此可以创建广域AR内容。

实际上,在某些情况下,已经绘制了整个1,1,000平方米(000平方米)的城市,因此可以说它是广阔区域内的强大VPS。


阿威

ARWAY是一个VPS,具有在网络上运行的AR内容开发工具。

您可以做的事情仍然有很多限制,但它非常强大,值得一看。

1. 如何扫描

与Immersal一样,使用专用应用程序来绘制空间。

与Immersal的不同之处在于,您不拍照,但只需将终端相机放在空间上即可生成地图。

但是,它似乎只能在支持 ARKit 和 ARCore 深度 API 的终端上保证正常运行。

与Vuforia Area Target和Immersal不同,似乎没有用于可见性的网格。

仅生成要素点云。

2 . 如何创建 AR 内容

内容创建是通过在名为WebStadio的浏览器上运行的工具完成的

您可以将自己的图纸带到WebStadio。

当然,您需要准备自己的图纸,但是您可以在想象

实际空间的同时继续开发,同时对齐图纸和点云,如下所示。

我们将AR对象放置在工具上,

默认情况下准备了用于指南导航的模型。

您还可以导入自己的 glb 格式的 3D 模型。

动画、粒子等目前不可用。

之后,将引入ARWAY的SDK的Unity项目部署到实际设备中。

当您启动应用程序时,它将开始下载在WebStadio中编辑的地图。

下载后,如果您识别出空间,AR对象将出现在任何地方。

以下是到目前为止的流程图示。

【来源】:https://docs.arway.app/#components

3. 如何保持一致?

自我定位的机制与Immersal相同。

因此,如果移动几米,真实空间和虚拟空间将不可避免地分开。

与 Immersal 不同,没有保持对齐的功能,

因此如果在空间反射到相机上时显式继续调用对齐过程(例如每 n 秒调用一次),

则可以继续精确对齐。

4. 印象

ARWAY还有一个SDK,其中包含Azure空间定位点的功能,虽然我不知道它是如何工作的,

但它在对齐中实现了很高的识别准确性

它具有在广泛领域使用的潜力,

因此如果WebStadio的功能得到扩展,它将成为更强大的工具。

<think>我们正在讨论PyTorch中的`ReduceLROnPlateau`学习率调度器。用户询问的是“plateau lr参数1”的设置方法。根据上下文,这里的“参数1”可能指的是`ReduceLROnPlateau`构造函数的第一个参数,即`optimizer`(优化器)。但是用户可能更关心的是其他关键参数,如`factor`, `patience`等,因为通常这些参数需要调整。不过,根据问题描述,用户明确提到了“参数1”,所以我们先按照位置参数来解析。 在`torch.optim.lr_scheduler.ReduceLROnPlateau`中,参数按顺序为: 1. `optimizer`:要调整学习率的优化器,这是必须的。 2. `mode`:可以是`'min'`或`'max'`。在`'min'`模式下,当监控的指标(如loss)停止下降时,学习率会降低;在`'max'`模式下,当监控的指标(如accuracy)停止上升时,学习率会降低。默认是`'min'`。 3. `factor`:学习率衰减的因子。新学习率 = 当前学习率 * factor。默认0.1。 4. `patience`:没有改善的epoch数,之后学习率将降低。默认10。 5. `verbose`:如果为True,则在每次更新时打印一条消息。默认False。 6. `threshold`:测量新最佳值的阈值,只关注显著变化。默认1e-4。 7. `threshold_mode`:可以是`'rel'`(相对阈值)或`'abs'`(绝对阈值)。默认`'rel'`。 8. `cooldown`:在减少lr之后恢复正常操作之前要等待的epoch数。默认0。 9. `min_lr`:学习率的下边界。可以是标量或列表(为每个参数组设置不同的最小学习率)。默认0。 10. `eps`:应用于学习率的最小衰减。如果新旧学习率之间的差异小于eps,则忽略更新。默认1e-8。 用户提到的“参数1”应该是第一个参数`optimizer`。设置方法就是传入一个优化器实例,如引用[1]中的例子: ```python optimizer = optim.AdamW(model.parameters(), lr=5e-4, weight_decay=1e-4) scheduler = optim.lr_scheduler.ReduceLROnPlateau(optimizer, ...) ``` 但是,用户可能更关心如何设置其他参数(如`factor`、`patience`等)以达到更好的训练效果。因此,我们将详细说明这些参数的设置方法。 ### 参数设置指南 1. **optimizer**:必须传入已创建的优化器对象。 2. **mode**:根据监控的指标选择。如果监控的是损失(loss),通常设为`'min'`;如果监控的是准确率(accuracy),则设为`'max'`。 3. **factor**:通常设置在0.1到0.5之间。例如,0.5表示每次减少一半的学习率。 4. **patience**:需要根据数据集和任务来调整。如果设置得太小,可能会在指标波动时过早降低学习率;如果太大,则可能等待太久。一般可以从10开始尝试,然后根据训练过程中的指标变化调整。 5. **verbose**:设为True可以方便地观察学习率变化。 6. **threshold**和**threshold_mode**:一般使用默认值即可,除非有特殊需求。 7. **cooldown**:在降低学习率后,可以设置几个epoch的冷却时间,在这段时间内不会再次降低学习率,以避免连续下降。默认0,即没有冷却。 8. **min_lr**:设置学习率的最小值,避免学习率过小导致训练停滞。根据初始学习率设置,例如初始学习率的1/100或1/1000。 9. **eps**:一般使用默认值。 ### 示例 以下是一个设置`ReduceLROnPlateau`的完整示例: ```python import torch from torch import nn, optim # 假设我们有一个模型 model = nn.Linear(10, 2) device = torch.device('cuda' if torch.cuda.is_available() else 'cpu') model.to(device) criterion = nn.CrossEntropyLoss() optimizer = optim.AdamW(model.parameters(), lr=0.001) # 设置ReduceLROnPlateau调度器 scheduler = optim.lr_scheduler.ReduceLROnPlateau( optimizer, mode='min', # 监控loss最小化 factor=0.5, # 学习率减半 patience=10, # 10个epoch没有改善则降低学习率 verbose=True, # 打印更新信息 threshold=1e-4, # 只有超过阈值的变化才被认为是改善 threshold_mode='rel', # 相对变化模式 cooldown=5, # 降低学习率后等待5个epoch min_lr=1e-6, # 最小学习率 eps=1e-8 # 学习率变化的最小差异 ) # 在训练循环中使用 for epoch in range(100): # 训练步骤... train_loss = ... # 计算训练损失 # 验证步骤... val_loss = ... # 计算验证损失 # 使用验证损失调整学习率(也可以使用训练损失,但通常用验证损失) scheduler.step(val_loss) ``` ### 注意事项 - 监控指标:通常使用验证损失(val_loss)作为监控指标,因为训练损失可能过拟合。 - 参数调整:这些参数需要根据具体任务进行实验调整。例如,在训练初期,可以设置较大的`patience`以避免过早降低学习率;在训练后期,可以适当减小`patience`以加速收敛。 - 与其他调度器结合:`ReduceLROnPlateau`可以与其他调度器(如热身)结合使用,但需要小心设计,避免冲突。 §§相关问题§§ 1. 如何选择`ReduceLROnPlateau`的监控指标(mode)? 2. `ReduceLROnPlateau`中的`patience`参数设置多少合适? 3. 除了`ReduceLROnPlateau`,还有哪些常用的学习率调度器? </think> ### `ReduceLROnPlateau` 参数设置详解 `ReduceLROnPlateau` 是 PyTorch 中动态调整学习率的调度器,其核心参数设置方法如下(以位置顺序说明): #### 1. **关键参数及设置方法** | 参数 | 类型 | 默认值 | 作用 | 推荐设置 | |------|------|--------|------|----------| | **`optimizer`** | Optimizer | 必填 | 绑定的优化器对象 | 传入已定义的优化器(如 `optim.AdamW`) | | **`mode`** | str | `'min'` | 监控指标的方向 | `'min'`(监控 loss 下降)或 `'max'`(监控 acc 上升) | | **`factor`** | float | 0.1 | 学习率衰减系数 | **0.2~0.5**(每次衰减为当前的 20%~50%) | | **`patience`** | int | 10 | 等待无改进的 epoch 数 | **10~50**(根据训练稳定性调整) | | **`verbose`** | bool | False | 是否输出调整日志 | `True`(推荐开启,便于调试) | | **`min_lr`** | float/列表 | 0 | 学习率下限 | **初始 lr 的 1/100~1/1000**(如 `1e-6`) | | **`threshold`** | float | 1e-4 | 显著变化的阈值 | 默认值或微调(如 `1e-3`) | | **`cooldown`** | int | 0 | 调整后的冷却 epoch | **2~5**(避免频繁调整) | #### 2. **配置示例代码** ```python from torch.optim.lr_scheduler import ReduceLROnPlateau optimizer = optim.AdamW(model.parameters(), lr=0.001) scheduler = ReduceLROnPlateau( optimizer, # 参数1:绑定优化器 mode='min', # 监控验证集loss下降 factor=0.3, # 学习率衰减为30% patience=15, # 连续15轮无改进后调整 verbose=True, # 打印调整日志 min_lr=1e-6, # 最小学习率下限 cooldown=3 # 调整后冷却3个epoch ) # 训练循环中调用 for epoch in range(epochs): val_loss = validate(model) # 计算验证集损失 scheduler.step(val_loss) # 根据val_loss调整学习率 ``` #### 3. **参数调优建议** - **`factor` 与 `patience` 联动**: 若训练波动大(如小批量数据),增大 `patience`(如 20~50)并减小 `factor`(如 0.5),避免过早/过激调整。 - **`min_lr` 设置**: 建议设置为初始学习率的 $10^{-3} \sim 10^{-4}$ 倍,防止学习率过小导致训练停滞[^1]。 - **监控指标选择**: - 分类任务:`mode='max'` + 监控验证集准确率 - 回归任务:`mode='min'` + 监控验证集损失 - **冷却期(`cooldown`)**: 在调整学习率后暂停监控若干 epoch,避免因短期波动重复调整。 > **注意**:实际效果需通过训练曲线验证。若损失震荡剧烈,需增大 `patience` 或 `threshold`;若收敛过慢,可增大 `factor`[^2]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值