Поэтому я клонировал репозиторий git, который регистрирует облака точек с использованием вероятностных методов, таких как GMM (Gaussian-Mixture-Models), но также включает Open3D. Поскольку регистрация выполняется на графическом процессоре, а не на процессоре, мне пришлось установить CUDA. Главным образом потому, что репозиторий импортирует пакет CuPy, который, в свою очередь, также требует CUDA. Поскольку у меня были некоторые проблемы с установкой и сборкой последних версий CuPy, я решил их, просто используя более старую версию, в моем случае версию 10.2, которая, похоже, работает на моем компьютере и на моем графическом процессоре (это GTX 1050). После этого CuPy был успешно импортирован в проект. Установка и импорт Open3D также прошли нормально. Однако после запуска тестового файла Python, который регистрирует два облака точек, я получил странное сообщение об ошибке в терминале, что также привело к сбою программы. Там написано Module 'Open3D' has no attribute 'read_point_cloud'
Соответствующая строка кода такова: source = o3.read_point_cloud(filepath)
Я провел небольшое исследование, прочитав документацию Open3D, и обнаружил, что read_point_cloud — это уже предоставленный метод по умолчанию в библиотеке Open3D, в старых версиях, а также в ее текущей версии 0.18.0. . Это та же версия, которую я ранее установил через pip. Может ли это быть как-то связано с описанной выше проблемой CUDA или я что-то упускаю?
@ewokx Вы имеете в виду, что мне нужно просто добавить «io» после «o3», но перед «read_point_cloud(filepath)»? Потому что именно об этом говорится в документации, которую вы мне прислали. В исходном коде авторов (это не мой код) нет «io», но последнему коммиту уже 5 лет, а это значит, что с тех пор никто не работал над репозиторием и, следовательно, тогда они использовали более старую версию Open3D?
Проблема с копированием кода других заключается в том, что вам необходимо убедиться, что вы либо используете ту же версию библиотеки, либо используете новейшую библиотеку, но адаптируете код. Итак, у вас должно быть source = o3.io.read_point_cloud(filepath)
; это при условии, что вы это сделали import Open3D as o3
.
Правильный способ загрузить облако точек — использовать либо
open3d.io.read_point_cloud(filepath)
если используется устаревший API, который возвращает open3d.geometry.PointCloud
, илиopen3d.t.io.read_point_cloud(filepath)
при использовании тензорного API, который возвращает open3d.t.geometry.PointCloud
.t
означает тензор, который поддерживает использование cuda. Устаревший API использовал собственный код, который не поддерживал вычисления на графическом процессоре, что привело к разработке API на основе тензоров.
Кроме того, вы можете проверить Multi-Scale ICP на CUDA, чтобы выполнить регистрацию на графическом процессоре. Он не обеспечивает GMM, но может стать хорошим началом.
Можете ли вы поделиться ссылкой на репозиторий, который вы использовали для регистрации с помощью GMM?
Извините за поздний ответ и спасибо за ответ! Я попытался изменить код в соответствии с вашим ответом, но теперь столкнулся с другой проблемой. После изменения строки на open3d.io.read_point_cloud(filepath)
следующая строка кода source = o3.voxel_down_sample(source, voxel_size=voxel)
выдает ошибку module open3d has no attribute voxel_down_sample
. Согласно последней документации open3Ds, вам нужно вызвать open3d.geometry.voxel_down_sample
. Я сделал это, но потом получил сообщение об ошибке module open3d.cpu.pybind.geometry has no attribute voxel_down_sample
.
@Ozymandias Все, что я могу сказать, это сначала правильно пройти учебные пособия. Код, который вы используете, слишком стар, чтобы его можно было использовать сейчас. Для облака точек вам следует использовать pcd.voxel_down_sample, где pcd — это полученный вами объект облака точек. Обратитесь к официальной документации версии 0.18.0 open3d.org/docs/release/… Попробуйте просмотреть руководства по open3d здесь open3d.org/docs/latest и посмотрите мои недавние ответы, которые в основном посвящены open3d - stackoverflow .com/users/1874627/…
Вот ссылка на репозиторий регистрации на основе GMM: github.com/somanshu25/… Я клонировал их репозиторий и на самом деле просто хотел запустить их демонстрационный код, который представляет собой файл Python run_gmm_static.py
. Согласно README автора, вам просто нужно запустить его, чтобы увидеть регистрацию облака точек кролика на основе GMM. Но я не могу этого сделать из-за проблем, о которых я упомянул выше. Может быть, мне стоит собрать Open3D версии 0.7.0? Потому что это то, что они используют. Однако Пип не может его найти.
@Ozymandias Мой совет. Придерживайтесь версии 0.18.0. Код в файле run_gmm_static небольшой и его можно легко обновить для работы с последней версией. Чтобы узнать, как работает open3d, вам потребуется от нескольких часов до 2-3 дней.
Хм, ладно, я предполагаю, что вы ознакомились с этим и предлагаете изменить код в файле run_gmm_static.py? А как насчет остальной части репозитория? Нужно ли мне это тоже все менять или этого одного файла достаточно? На самом деле я хотел начать работать с Open3D, но мой руководитель отговорил от этого (это университетский проект), потому что, по его словам, Open3D слишком медленный. Поэтому он предложил поискать альтернативные подходы, такие как GMM, поэтому я и оказался здесь. Так мне нужно настроить весь репозиторий или только этот файл? Или мне стоит придерживаться классического Open3D?
@Ozymandias - я не смогу прочитать весь репозиторий из-за ограничений по времени, но, насколько я понимаю, код этого репозитория использует cupy и другие библиотеки для выполнения большей части обработки на графическом процессоре, а open3d в основном предназначен для загрузки облака точек и визуализации. Например, см. строку 30, которая извлекает точки в массив numpy и, таким образом, не использует numpy впоследствии, пока не придет время для визуализации. Что касается комментария вашего руководителя: библиотека все еще незрела, например, она имеет кластеризацию DBScan, которая еще не поддерживается на графическом процессоре, но многие части библиотеки сильно оптимизированы для процессора и графического процессора.
Итак, ваш совет — использовать классический Open3D и дать ему шанс? Или хотя бы использовать многомасштабный ICP на CUDA (первая ссылка, которую вы мне прислали)? Я также нашел эту библиотеку под названием «probreg» github.com/neka-nat/probreg Мой руководитель также предложил изучить ее. Знаете ли вы что-нибудь об этой «пробреговой» библиотеке? Кажется, он новее (последний коммит был 2 недели назад), и он также поддерживает вероятностные методы регистрации облаков точек, такие как когерентный дрейф точек и GMM.
Мое предложение: 1. Обновите код run_gmm_static для работы с Open3d 0.18.0 и попробуйте его запустить. 2. Запустите MultiScaleIcp на CPU/CUDA (это займет 1-2 часа, просто следуйте инструкциям, чтобы увидеть, насколько хорошо он работает для вас) 3. Probreg выглядит красиво, использует последнюю версию open3d, но я ее не использовал.
Как насчет этого? open3d.org/docs/release/python_api/…