hwjiang1510/GraspTTA

buggy implementation of intersection volume metric?

zehongs opened this issue · 1 comments

Hi, I think the metric of intersection volume is not correct.
The function intersect_vox is supposed to compute the intersection volume. However, vox=mesh.voxelized() and vox.points are only giving the surface points. So it is not offering a solid volume. The mesh.contains(points) is giving a smaller estimate of intersection volume.

def intersect_vox(obj_mesh, hand_mesh, pitch=0.01):
obj_vox = obj_mesh.voxelized(pitch=pitch)
obj_points = obj_vox.points
inside = hand_mesh.contains(obj_points)
volume = inside.sum() * np.power(pitch, 3)
return volume

obj

Hi, thanks for the great question!

The implementation is inherited from previous papers, which are widely used.
In detail, the previous works are obman [19] and GanHand [9].
https://github.com/hassony2/obman_train/blob/master/mano_train/netscripts/intersect.py#L18
https://github.com/enriccorona/GanHand/blob/master/utils/obman_utils.py#L22

On one hand, the max interpenetration depth between hand-object is small (according to Table. 1 in our paper), which are 0.46, 1.05, and 1.58 cm on the three datasets. It matches the pitch size we use in voxelization, and the method works when the interpenetration is shallow. On the other hand, there will also be many voxelized points where the intersection depth is actually smaller than 1 cm but got voxelized, causing a larger intersection volume. Overall, the intersection volume will be roughly correct.