问题描述
我有一个点云,我想在其上使用图神经网络。点云中的每个点都由其位置坐标及其颜色来表征。因此,一个节点是(X,Y,Z,C)
。
现在,我想对此应用边缘卷积(如in the DGL Edge-Conv example所述,要做到这一点,我应该在(X,Z)
上建立最近邻图(而不是在C ),然后将所有4个属性用作我的神经网络的特征。
什么是清洁有效的方法? (我有很多数据,所以我想很好地进行批处理和整理)
解决方法
假设您有一个形状为 pc
的张量 (NUM_POINTS,4)
,其中每一行都是 (X,Y,Z,C)
,那么您可以使用 sklearn
如下:
from sklearn.neighbors import NearestNeighbors
import dgl
k = 3 # number of neighbours you want
neigh = NearestNeighbors(n_neighbors=k)
neigh.fit(pc[:,:3].numpy()) # selects only (X,Z)
knn = neigh.kneighbors_graph()
graph = dgl.from_scipy(knn)
graph.ndata['x'] = pc
我建议将这些图保存到磁盘,这样就不会在每次训练等时计算它们。