Графический автоэнкодер с PyTorch-Geometric

Я создаю автоэнкодер на основе графа для облаков точек. Исходная форма облака точек [3, 1024]- 1024 точки, каждая из которых имеет 3 координаты

Облако точек превращается в неориентированный граф с помощью следующих шагов:

  • точка превращается в узел.
  • особенность узла - 3 координаты
  • для каждой узловой точки найти 5 ближайших к ней узловых точек. они соединены ребром
  • Особенностью ребра является расстояние между двумя узловыми точками, которые оно соединяет.

Я использую pytorch-geometric для построения своей сети и расстояния Chamfer от pytorch3d [источник ] в качестве функции потерь.

Архитектура моей сети следующая:

Кодер:GAT (3->16) -> GAT (16->24) -> GAT (24->36) -> форма ([32 * 1024, 36])

Декодер: GAT (36-> 24) -> GAT (24-> 16) -> GAT (16-> 3) -> форма ([32*1024, 3])

Все эти слои принимают функции узла и функции ребра. Кроме того, я использую Dropout и ReLU.

После этого я просто получаю исходные графики:[32, 1024, 3] и спрогнозированные графики:[32, 1024, 3] и скармливаю их для потери фаски из pytorch3d. Я получаю какой-то результат, но если я их визуализирую, то вижу, что сеть ничему не научилась.

Вопрос в следующем: поскольку я сравниваю только функции узлов с расстоянием фаски, использует ли сеть вообще матрицу смежности и функции ребер? Мне просто нужно сделать тонкую настройку или, может быть, эта модель не имеет никакого смысла?

PS: На данный момент меня не волнует архитектура или достаточно ли 5 ​​ближайших соседей.

0 ответов

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