You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Questions about unused modules in Model class for training implementation #6
Thank you for open-sourcing the implementation of your excellent work PartField! I'm currently studying the model architecture through the provided codebase.
During code analysis, I noticed two defined components in the Model class that aren't invoked in the inference pipeline model_trainer_pvcnn_only_demo.py:
self.sdf_decoder (line 41).
self.grid_coord (line 56).
As I'm attempting to reproduce the full training process, could you please clarify:
Whether these modules are part of the training-specific implementation?
If so, what would be the proper way to integrate them into the training pipeline?
Are there any additional components needed to activate these modules?
Also, I notice there may exist a feature loss, how can I compute it?
Any guidance or code pointers would be greatly appreciated to better understand the complete architecture design.
In our original version, we also included an SDF prediction task as an auxiliary objective; sdf_decoder and grid_coord were used for this purpose. However, this task was later discarded, so you may now ignore these two components.
As for the feature loss, please refer to our paper or the following code snippet (without hard negative mining):
` N, M, _ = PA.shape
coord = torch.cat((PA, PB, PC), 1) # N, 3M, 3
Sorry, after checking with the team, we confirmed that in our final version, we still retained SDF field prediction as an auxiliary task, using the ground-truth SDF of the mesh as supervision. The sdf_decoder and grid_coord were used for this purpose.
@Colin97 Thanks for your detailed explanation! To clarify our concern: In the code snippet l1_reg = self.l1_loss(point_feat, torch.zeros_like(point_feat)).mean(), the L1 loss is computed between point_feat and a zero tensor. Could you elaborate on the motivation behind this design?
In our original version, we also included an SDF prediction task as an auxiliary objective; sdf_decoder and grid_coord were used for this purpose. However, this task was later discarded, so you may now ignore these two components.
As for the feature loss, please refer to our paper or the following code snippet (without hard negative mining):
` N, M, _ = PA.shape coord = torch.cat((PA, PB, PC), 1) # N, 3M, 3
However, I'm unclear about what the feat loss specifically represents. Moreover, I noticed its weight is significantly larger compared to other auxiliary losses, which makes me think it might be a crucial loss function. Could you please provide some guidance on this?
@Colin97 Thanks for your detailed explanation! To clarify our concern: In the code snippet l1_reg = self.l1_loss(point_feat, torch.zeros_like(point_feat)).mean(), the L1 loss is computed between point_feat and a zero tensor. Could you elaborate on the motivation behind this design?
Hello,
In our original version, we also included an SDF prediction task as an auxiliary objective; sdf_decoder and grid_coord were used for this purpose. However, this task was later discarded, so you may now ignore these two components.
As for the feature loss, please refer to our paper or the following code snippet (without hard negative mining):
` N, M, _ = PA.shape coord = torch.cat((PA, PB, PC), 1) # N, 3M, 3
However, I'm unclear about what the feat loss specifically represents. Moreover, I noticed its weight is significantly larger compared to other auxiliary losses, which makes me think it might be a crucial loss function. Could you please provide some guidance on this?
where did you find triplet(1.0), sdf(1.0), feat(10.0), and l1 loss(0.0)
Hello,
In our original version, we also included an SDF prediction task as an auxiliary objective; sdf_decoder and grid_coord were used for this purpose. However, this task was later discarded, so you may now ignore these two components.
As for the feature loss, please refer to our paper or the following code snippet (without hard negative mining):
` N, M, _ = PA.shape coord = torch.cat((PA, PB, PC), 1) # N, 3M, 3
Hello, while reproducing your team's work, I noticed that you used several loss terms including triplet(1.0), sdf(1.0), feat(10.0), and l1 loss(0.0).
From my understanding:
However, I'm unclear about what the feat loss specifically represents. Moreover, I noticed its weight is significantly larger compared to other auxiliary losses, which makes me think it might be a crucial loss function. Could you please provide some guidance on this?
where did you find triplet(1.0), sdf(1.0), feat(10.0), and l1 loss(0.0)
I was examining the model configuration via model = torch.load('./model/model_objaverse.ckpt') and noticed the following loss settings in model['hyper_parameters']:
feat loss term: Could you clarify what this term represents? Given its high weight (10.0), it seems to play a critical role, but I couldn’t find documentation on its specifics.
Hard negative sampling: The setting num_neg_hard_emb=0 suggests that feature-based hard negatives might have been disabled in the second stage. Was this an intentional design choice? If so, could you share the rationale behind it?
Thank you for your time and insights!
Activity
Colin97 commentedon May 30, 2025
Hello,
In our original version, we also included an SDF prediction task as an auxiliary objective; sdf_decoder and grid_coord were used for this purpose. However, this task was later discarded, so you may now ignore these two components.
As for the feature loss, please refer to our paper or the following code snippet (without hard negative mining):
` N, M, _ = PA.shape
coord = torch.cat((PA, PB, PC), 1) # N, 3M, 3
Colin97 commentedon Jun 17, 2025
Sorry, after checking with the team, we confirmed that in our final version, we still retained SDF field prediction as an auxiliary task, using the ground-truth SDF of the mesh as supervision. The sdf_decoder and grid_coord were used for this purpose.
StupidAdam commentedon Jun 23, 2025
@Colin97 Thanks for your detailed explanation! To clarify our concern: In the code snippet
l1_reg = self.l1_loss(point_feat, torch.zeros_like(point_feat)).mean(), the L1 loss is computed between point_feat and a zero tensor. Could you elaborate on the motivation behind this design?lauvli commentedon Jul 15, 2025
Hello, while reproducing your team's work, I noticed that you used several loss terms including triplet(1.0), sdf(1.0), feat(10.0), and l1 loss(0.0).
From my understanding:
However, I'm unclear about what the feat loss specifically represents. Moreover, I noticed its weight is significantly larger compared to other auxiliary losses, which makes me think it might be a crucial loss function. Could you please provide some guidance on this?
Colin97 commentedon Jul 16, 2025
it's just a regularization term.
Colin97 commentedon Jul 16, 2025
where did you find
triplet(1.0), sdf(1.0), feat(10.0), and l1 loss(0.0)lauvli commentedon Jul 17, 2025
I was examining the model configuration via model = torch.load('./model/model_objaverse.ckpt') and noticed the following loss settings in model['hyper_parameters']:
Additionally, I observed the sampling parameters:
I’m curious about two points:
feat loss term: Could you clarify what this term represents? Given its high weight (10.0), it seems to play a critical role, but I couldn’t find documentation on its specifics.
Hard negative sampling: The setting num_neg_hard_emb=0 suggests that feature-based hard negatives might have been disabled in the second stage. Was this an intentional design choice? If so, could you share the rationale behind it?
Thank you for your time and insights!
Colin97 commentedon Oct 13, 2025
Training with triplet loss and SDF loss should work fine.
Training with only distance-based hard negative mining should yield sufficiently good results.