RadeGS——基于Quantifying and Alleviating Co-Adaptation in Sparse-View 3D Gaussian Splattin的Droupout
在scene/gaussian_model.py中添加随机丢弃和透明度补偿的函数
def apply_dropout(self, p=0.3): """ 在训练过程中对高斯点应用丢弃正则化(Dropout)。 :param p: 丢弃的概率,0 到 1 之间 """ # 创建丢弃掩码,随机选择丢弃的高斯点 dropout_mask = torch.rand_like(self._opacity) > p # 生成与透明度相同形状的掩码 # 将丢弃的高斯点位置、透明度、特征等设为零 self._xyz = self._xyz * dropout_mask # 将丢弃的高斯点位置设为零 self._opacity = self._opacity * dropout_mask # 将丢弃的高斯点透明度设为零 self._features_dc = self._features_dc * dropout_mask.unsqueeze(-1) # 将丢弃的特征设为零 self._features_rest = self._features_rest * dropout_mask.unsqueeze(-1) # 将丢弃的特征设为零 self._scaling = self._scaling * dropout_mask # 将丢弃的缩放设为零 self._rotation = self._rotation * dropout_mask # 将丢弃的旋转设为零
def compensate_dropout(self, p=0.3): """ 在测试时补偿训练期间丢弃正则化的透明度损失。 :param p: 丢弃的概率,0 到 1 之间 """ # 在测试时,透明度补偿,确保每个高斯点的贡献是完整的 self._opacity = (1 - p) * self._opacity # 将透明度按 (1 - p) 进行缩放
在train.py中加入随机丢弃的代码
if reg_kick_on: scene.gaussians.apply_dropout()
在render.py的render_sets函数中中加入透明度补偿的代码
if not skip_test: gaussians.compensate_dropout()

浙公网安备 33010602011771号