EnyaHermite / SPH3D-GCN

Spherical Kernel for Efficient Graph Convolution on 3D Point Clouds
MIT License
169 stars 32 forks source link

Question about partition along the radial(r) dimension #4

Open hi-zhengcheng opened 4 years ago

hi-zhengcheng commented 4 years ago

Thanks for your nice paper and code, it helps me a lot.

Question 1

I’m trying to figure out how to partition along radial dimension. In the paper, section “3.1 Spherical Convolutions” has one sentence said:

We allow the partitions along the radial (r) dimension to be non-uniform because the cubic volume growth for large radius values can be undesirable

In the source code, it looks like that the partitions along the radial dimension are uniform: https://github.com/hlei-ziyan/SPH3D-GCN/blob/27a0629b908e736d28b69723f333af29f63bea5c/tf_ops/buildkernel/tf_buildkernel_gpu.cu#L68

Could you share some experience or detailed method, about non-uniform partitions along the radial dimension?


Question 2

In source code, the 3D distance info (variable dist) is used for partitions along the radial dimension, and it is computed in: https://github.com/hlei-ziyan/SPH3D-GCN/blob/27a0629b908e736d28b69723f333af29f63bea5c/tf_ops/nnquery/tf_nnquery_gpu.cu#L47

https://github.com/hlei-ziyan/SPH3D-GCN/blob/27a0629b908e736d28b69723f333af29f63bea5c/tf_ops/nnquery/tf_nnquery_gpu.cu#L54

…
dist3D = sqrtf(dist3D); //sqrt

if (dist3D<radius && fabs(dist3D-radius)>1e-6) // find a neighbor in range
{
    if (s<nnSample)
    {
        nnIndex[i*M*nnSample+j*nnSample+s] = k;
        nnDist[i*M*nnSample+j*nnSample+s] = sqrt(dist3D);
    }
    …
}

dist3D is the result of sqrtf first. When it is saved to nnDist, another sqrt is called. Why use sqrt two times, Is there any trick about this?

EnyaHermite commented 4 years ago

Actually, we tried only uniform radial division up till now. As to the two sqrt function, it is a bug. I do find it as well, but occupied by other things, I haven’t correct it yet. It doesn’t influence the experiment at all. You can remove the second sqrt in your code.