当前位置: 首页 > news >正文

3dgs——MILO中的compute_depth_order_loss

目标:让预测深度 depth 的相对前后顺序尽量与先验深度 prior_depth 一致(不要求先验尺度准确)。

像素对采样:为每个像素随机采一个邻近像素(在 max_pixel_shift_ratio 控制的偏移范围内),并把偏移后的坐标 clamp 到图像边界。

取邻居深度:在随机邻居位置分别取 shifted_depth 和 shifted_prior_depth。

计算差值:计算深度差 diff = (depth - shifted_depth)/scene_extent 和先验差 prior_diff = (prior_depth - shifted_prior_depth)/scene_extent。

可选符号化先验:若 normalize_loss=True,把 prior_diff 除以其绝对值(detach 后)以近似保留符号、去掉幅值影响。

顺序惩罚规则:计算 diff * prior_diff,若为正(顺序一致)则 loss=0;若为负(顺序相反)则产生正惩罚:-(diff*prior_diff).clamp(max=0)。

可选鲁棒化:若 log_space=True,对惩罚做 log(1 + log_scale * loss) 压缩,减弱极大误差的影响。

输出聚合:按 reduction 选择返回均值(mean)、总和(sum)或逐像素图(none);debug=True 额外返回中间变量。
`def compute_depth_order_loss(
depth: torch.Tensor,
prior_depth: torch.Tensor,
scene_extent: float = 1.,
max_pixel_shift_ratio: float = 0.05,
normalize_loss: bool = True,
log_space: bool = False,
log_scale: float = 20.,
reduction: str = "mean",
debug: bool = False,
):

height, width = depth.squeeze().shape
pixel_coords = torch.stack(torch.meshgrid(torch.linspace(0, height - 1, height, dtype=torch.long, device=depth.device),torch.linspace(0, width - 1, width, dtype=torch.long, device=depth.device),indexing='ij'
), dim=-1).view(-1, 2)# Get random pixel shifts
# TODO: Change the sampling so that shifts of (0, 0) are not possible
max_pixel_shift = max(round(max_pixel_shift_ratio * max(height, width)), 1)
pixel_shifts = torch.randint(-max_pixel_shift, max_pixel_shift + 1, pixel_coords.shape, device=depth.device)# Apply pixel shifts to pixel coordinates and clamp to image boundaries
shifted_pixel_coords = (pixel_coords + pixel_shifts).clamp(min=torch.tensor([0, 0], device=depth.device),max=torch.tensor([height - 1, width - 1], device=depth.device)
)# Get depth values at shifted pixel coordinates
shifted_depth = depth.squeeze()[shifted_pixel_coords[:, 0],shifted_pixel_coords[:, 1]
].reshape(depth.shape)
shifted_prior_depth = prior_depth.squeeze()[shifted_pixel_coords[:, 0],shifted_pixel_coords[:, 1]
].reshape(depth.shape)# Compute pixel-wise depth order loss
diff = (depth - shifted_depth) / scene_extent
prior_diff = (prior_depth - shifted_prior_depth) / scene_extent
if normalize_loss:prior_diff = prior_diff / prior_diff.detach().abs().clamp(min=1e-8)
depth_order_loss = - (diff * prior_diff).clamp(max=0)
if log_space:depth_order_loss = torch.log(1. + log_scale * depth_order_loss)# Reduce the loss
if reduction == "mean":depth_order_loss = depth_order_loss.mean()
elif reduction == "sum":depth_order_loss = depth_order_loss.sum()
elif reduction == "none":pass
else:raise ValueError(f"Invalid reduction: {reduction}")if debug:return {"depth_order_loss": depth_order_loss,"diff": diff,"prior_diff": prior_diff,"shifted_depth": shifted_depth,"shifted_prior_depth": shifted_prior_depth,}
return depth_order_loss`
http://www.jsqmd.com/news/193426/

相关文章:

  • 【PHP服务监控告警全攻略】:5种高实效告警方式揭秘,提升系统稳定性
  • 导师推荐9个AI论文网站,继续教育学生轻松搞定毕业论文!
  • PHP分库分表最佳实践(千万级数据处理秘籍)
  • Pytest测试用例中的mark用法(包含代码示例与使用场景详解)
  • 2025年珠宝柜台制作厂家权威推荐榜单:箱包展柜制作/专业制作展柜/烤漆柜台制作/珠宝品牌展柜/柜台制作源头厂家精选 - 品牌推荐官
  • 2026年重庆优质教育咨询机构最新推荐:海瑟教育,助力升学备考新征程 - 海棠依旧大
  • GLM-TTS与大数据平台对接:处理海量文本转语音需求
  • 2025年当地正规的上门家教老师联系方式,师范家教/数学家教/上门家教/初中家教/英语家教,上门家教老师口碑推荐 - 品牌推荐师
  • GLM-TTS与MathType结合设想:公式朗读辅助学习工具
  • 如何贡献代码?参与GLM-TTS开源社区建设路径
  • 2026年上半年成都食品添加剂/香精香料/调味料行业竞争分析报告 - 2025年品牌推荐榜
  • 语音合成灰度总结报告:全面评估试点成果
  • 模块化编程入门:JavaScript开发者如何告别代码混乱(附实战技巧)
  • 纯干货!3分钟教你免费克隆任何声音!
  • 移动端适配挑战:将GLM-TTS集成至Android/iOS应用
  • 2026初级药师复习资料怎么选?上岸前辈实战清单 - 医考机构品牌测评专家
  • 8款AI辅助论文查重工具推荐,提升学术写作效率,确保内容原创无忧
  • 语音合成自动化测试框架设计:保障功能稳定性
  • 2026餐饮连锁、便利店、高奢酒店、咖啡馆全场景商用智能咖啡机推荐 - 品牌2026
  • rust开源库test_case参数化测试
  • Flutter `audio_service` 在鸿蒙端的后台音频服务适配实践
  • GLM-TTS与JavaScript前端交互:动态加载生成音频
  • GLM-TTS在气象预警信息发布中的时效性保障措施
  • 用AI分析测试失败日志:自动归因的开源工具全景指南
  • FIFO学习记录
  • AI技术加持,8款高效查重工具推荐,让学术写作过程更加顺畅无忧
  • ‌互动学习游戏稳定性测试:幼儿教育场景的专业实践指南
  • 测试工具革命:2026年测试工程师的必备武器库
  • AI助力学术写作,精选8款高效查重工具,确保论文原创性无忧
  • ZooKeeper的使用