Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Indexing bug in voxelgrids_to_trianglemeshes #733

Open
Lyleregenwetter opened this issue Jul 2, 2023 · 1 comment
Open

Indexing bug in voxelgrids_to_trianglemeshes #733

Lyleregenwetter opened this issue Jul 2, 2023 · 1 comment
Assignees

Comments

@Lyleregenwetter
Copy link

Lyleregenwetter commented Jul 2, 2023

voxelgrids_to_trianglemeshes sometimes returns vertex indices that are out of range... In my experience it works for smaller voxel grid sizes, but quickly breaks,

Running pytorch 1.13.0, cuda 11.7, kaolin 0.13.0

Code to reproduce (possibly try different size grid if this works -- some grids do)

import torch
from kaolin.ops.mesh import index_vertices_by_faces
import kaolin as kal

voxels = torch.ones((1,4,4,8)).to("cuda")
vertices, faces = kal.ops.conversions.voxelgrids_to_trianglemeshes(voxels)

unique, counts = torch.unique(faces[0], return_counts=True)

print(vertices[0].shape)
print(len(unique))

returns:

torch.Size([254, 3])
255

Strangely, there are a couple rogue 256 in the faces tensor:
print(unique)

tensor([  0,   1,   2,   3,   4,   5,   6,   7,   8,   9,  10,  11,  12,  13,
         14,  15,  16,  17,  18,  19,  20,  21,  22,  23,  24,  25,  26,  27,
         28,  29,  30,  31,  32,  33,  34,  35,  36,  37,  38,  39,  40,  41,
         42,  43,  44,  45,  46,  47,  48,  49,  50,  51,  52,  53,  54,  55,
         56,  57,  58,  59,  60,  61,  62,  63,  64,  65,  66,  67,  68,  69,
         70,  71,  72,  73,  74,  75,  76,  77,  78,  79,  80,  81,  82,  83,
         84,  85,  86,  87,  88,  89,  90,  91,  92,  93,  94,  95,  96,  97,
         98,  99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
        112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
        126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
        140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150, 151, 152, 153,
        154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166, 167,
        168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181,
        182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195,
        196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209,
        210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223,
        224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
        238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
        252, 253, 256], device='cuda:0')

If we print the counts, we see that some vertices are only attached to one face, which (as I understand) should not happen:
print(counts)

tensor([ 7,  6,  4, 20,  6, 10,  8,  5,  6,  6,  8,  5,  7,  7,  7,  6,  6,  7,
         5,  7,  8,  6,  6,  6,  8,  5,  7,  7,  7,  6,  7,  7,  5,  5,  8,  6,
         5,  5,  9,  6,  6,  6,  7,  5,  6,  6,  1,  8, 12,  6,  7,  9,  2,  8,
         5,  7,  7,  7,  7,  5,  7,  6,  6,  7,  7,  5,  6,  6,  7,  6,  5,  5,
         6,  5,  7,  6,  4,  5,  6,  5,  2,  6,  4,  6, 15,  6,  8,  5,  7,  7,
         7,  6,  7,  7,  5,  5,  8,  6,  5,  5,  9,  6,  6,  6,  7,  5,  6,  6,
         7,  6,  7,  6,  7,  6,  6,  7,  6,  6,  6,  6,  5,  7,  6,  6,  8, 11,
         5,  3,  8,  6,  7,  7,  5,  6,  6,  7,  6,  5,  5,  6,  5,  6,  6,  4,
         4,  6,  5,  5,  5,  6,  6,  6,  7,  7,  6,  8,  6,  7,  6,  6,  6,  7,
         6,  3,  6, 14,  3,  5,  8,  9,  6,  6,  7,  5,  6,  6,  7,  6,  7,  6,
         7,  6,  6,  7,  6,  6,  6,  7,  5,  8,  5,  7,  7,  7,  7,  5,  7,  7,
         6,  6,  8,  6,  6,  6,  3,  6,  3,  5,  4,  6,  4,  4,  6,  4,  2,  5,
         6,  3,  6,  3,  7,  3,  5,  3,  8,  5,  7,  7,  7,  3,  3,  7,  5,  3,
         8,  3,  3,  3,  9,  6,  6,  6,  7,  3,  3,  6,  1,  8,  9,  6,  5,  3,
         1,  3,  2], device='cuda:0')

This indexing issue obviously causes issues if we try to use the generated vertices and faces. For example:

face_vertices = index_vertices_by_faces(torch.stack(vertices), faces[0])

yields:
CUDA error: device-side assert triggered, which is often caused by a list index out of range.

@Caenorst Caenorst self-assigned this Jul 3, 2023
@Caenorst
Copy link
Collaborator

Caenorst commented Jul 3, 2023

Hi @Lyleregenwetter , thank you for your feedback, it looks like quite a problematic bug indeed. I will address that soon.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants