Некоторое время назад мне потребовалось решить задачу сегментации точек в Point Cloud (облака точек — данные, полученные с лидаров). Пример данных и решаемой задачи:
 Поиски общего обзора существующих методов оказались неуспешными, поэтому пришлось собирать информацию самостоятельно. Результат вы можете видеть: здесь собраны наиболее важные и интересные (по моему мнению) статьи за последние несколько лет. Все рассмотренные модели решают задачу сегментации облака точек (к какому классу принадлежит каждая точка).  Эта статья будет полезна тем, кто хорошо знаком с нейронными сетями и хочет понять, как применять их к неструктурированным данным (к примеру графам). Сейчас в открытом доступе есть следующие датасеты по этой теме: Нейронные сети пришли в эту область совсем недавно. И стандартные архитектуры вроде полносвязных и сверточных сетей не применимы для решения этой задачи. Почему?  Потому что здесь не важен порядок точек. Объект — это множество точек и не важно, в каком порядке их просматривают. Если на изображения у каждого пикселя есть своё место, тут мы можем спокойно перемешать точки и объект не измениться. Результат работы стандартных нейронных сетей, наоборот, зависит от местоположения данных. Если перемешать пиксели на изображение, получится новый объект. А теперь разберемся, как же нейронные сети адаптировали для решения этой задачи  Базовых архитектур в этой области не много. Если вы собираетесь работать с графами или неструктурированными данными, вам нужно иметь представление о следующих моделях: Рассмотрим их поподробнее.   Dynamic Graph CNN for Learning on Point Clouds как решают: на основе имеющихся точек строят граф: вершины — точки, ребра существуют только между текущей точкой и k ближайшими к ней точками. Далее определяют Edge conv — специальную свертку на ребрах исходящих из текущей точки. В статье предложено несколько вариантов этой свертки. В результате использовался следующий: для каждой точки x[i] по всем её J  соседним точкам считали M признаков feature[i,m]=max_j(Relu(θ[m]∗(x[i]−x[j]) +φ[m]∗x[i])). Полученное значение запоминается, как новый эмбединг точки. Здесь используются локальные (x[j]−x[i]) и глобальные (x[j]) координаты как входные данные для свертки.
После того, как определена свертка на графе, строится сверточная сеть. Можно заметить и подсчет преобразований и применения их к каждой точке по аналогии с PointNet.
В этой статье вы найдете прекрасный обзор других методов решения. код   В основном статьи отличаются подсчетом ошибки или глубиной и начилием сложных блоков. PointWise: An Unsupervised Point-wise Feature Learning Network
Особенность работы — обучение без учителя SGPN: Similarity Group Proposal Network for 3D Point Cloud Instance Segmentation  DGCNN была опубликована недавно (2018), поэтому основанных на этой архитектуре статей немного. Я хочу обратить ваше внимание на одну:  Здесь вы могли найти краткую информацию о современных методах решения задач классификации и сегментации в Point Clouds. Существуют две основных модели (PointNet++, DGCNN), модификации которых сейчас используют для решения этих задач. Чаще всего для модификации изменяют функцию ошибки и усложняют эти архитектуры, добавляя слои и связи. machine learning engineer