# MeshCoverageLoss **Repository Path**: Ky1eYang/mesh-coverage-loss ## Basic Information - **Project Name**: MeshCoverageLoss - **Description**: cuda实现的加速2dgs_kernel对mesh face的覆盖率损失函数 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-03-04 - **Last Updated**: 2025-03-12 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Mesh Gaussian Coverage Loss 基于CUDA的高效网格面覆盖率损失函数实现,用于计算3D网格表面高斯分布覆盖率的损失值。适用于3D重建+2DGS+MESH,需要网格表面正则高斯核的场景。 ## 主要特性 - 🚀 CUDA加速的前向/反向传播 - 📐 支持任意三角面片数量的网格 - 💡 自动梯度计算 - 🎯 精确的面覆盖率计算 ## 安装 ```bash pip install mesh-coverage-loss ``` ## 快速使用 ```python import torch from mesh_coverage_loss import _p2e_logproba # 前向计算 logproba_max_minus_other = _p2e_logproba.apply( sample_pts, kernel_pts, covariance, logdet_cov, face_ids) loss = -logproba_max_minus_other.mean() # 反向传播 loss.backward() ``` ## 参数说明 | 参数 | 类型 | 说明 | |------|------|-----| | `sample_pts` | Tensor (float) | 二维采样点[F,M,2] | | `kernel_pts` | Tensor (float) | 高斯核圆心 [N,2] | | `covariance` | Tensor (float) | 高斯核协方差矩阵 [N,2,2]实则是高斯分布的协方差矩阵的逆 | | `logdet_cov` | Tensor (float) | 高斯核协方差矩阵对数行列式 [N] | | `face_ids` | Tensor (int) | 高斯核对应的面片编号 [N] | | `logproba_max_minus_other` | Tensor (float) | 面vs核对数概率最大值减均值[F,N] | ## 数学原理 损失函数通过以下步骤计算: 1. 将每个三角面片参数化为2D局部坐标系 2. 在三角面片覆盖范围内生成采样点 3. 计算高斯核对应的采样点的对数概率相对值(没算1/sqrt(2pi)) 4. 计算有效覆盖面积比例:即每个采样点对应最近的高斯核的被采样概率 ``` Δp = sample_pts - kernel_pts coverage = Σ(exp(-Δp^T Σ^{-1} Δp)) * opacity ``` 5. 优化目标:最大化面片覆盖率,最小化高斯重叠 ## 性能优化 - 并行化面片处理:每个CUDA线程处理一个面片x采样点 - 分块内存访问:优化显存访问模式 - 自适应采样:根据面片面积动态调整采样密度 ## 注意事项 1. 输入张量必须统一设备(cuda或cpu)