Построить график KNN по некоторому подмножеству функций узла

У меня есть облако точек, в котором я хочу использовать графическую нейронную сеть. Каждая точка в облаке точек характеризуется своими координатами положения, а также цветом. Итак, один узел (X, Y, Z, C).

Теперь я хочу применить к этому краю свертку (как описано в примере DGL Edge-Conv, и для этого я должен построить граф ближайших соседей на (X, Y, Z)(И не на C), а затем использовать все 4 свойства в качестве функций для моей нейронной сети.

Что было бы чистым и эффективным способом сделать это? (У меня много данных, поэтому я хочу хорошо сгруппировать и сопоставить)

1 ответ

Предположим, у вас есть тензор 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, Y, Z)

knn = neigh.kneighbors_graph()
graph = dgl.from_scipy(knn)
graph.ndata['x'] = pc

Я бы рекомендовал сохранять эти графики на диск, чтобы они не вычислялись каждый раз, когда вы тренируетесь и т. Д.

Другие вопросы по тегам