- Я использую DPVO для извлечения 6DoF камеры траектории из видеобронхоскопии.
- DPVO – это модель визуальной одометрии/SLAM, построенная на основе глубокого соответствия и корректировки пакетов (преемник DROID-SLAM).
- Я настраиваю DPVO на специальном наборе данных.
- Мой набор данных состоит из видео моделирования бронхоскопии, обработанных в Unity Hub.
- Для каждого кадра у меня есть правдивые позы камеры с 6 степенями свободы (x, y, z, qx, qy, qz, qw), экспортированные непосредственно из Unity.
/> - Поэтому эти позы основной истины выражаются в системе координат Unity (левосторонней).
- Внутренне DPVO использует другую систему координат (вероятно, правостороннюю, но не четко документированную).
- Unity и DPVO явно не используют одни и те же соглашения по осям или направления.
- Однако документация DPVO не соответствует явно укажите точные соглашения о системе координат (направления осей, направление руки, камера-мир или мир-камера).
4. Моя попытка выравнивания
Поскольку точное соглашение о координатах DPVO недокументировано, я попробовал подход выравнивания на основе данных:
Шаг 1. Удаление разминки
- У DPVO есть начальный период разминки, когда позы ненадежны.
- Я отбрасываю первые N кадров и использовать для выравнивания только стабильные кадры.
Шаг 2. Перечисляем все сопоставления осей
- Я генерирую все подписанные матрицы перестановок (перестановка осей + смена знаков):
3! перестановки × комбинации знаков 2³ = 48 кандидатов
Шаг 3: выравнивание по последовательности
Для каждого видео последовательность:- Применить сопоставление потенциальных осей:
Punity′=Punity⋅C⊤P_{unity}' = P_{unity} \cdot C^\topPunity′=Punity⋅C⊤ - Оценить преобразование Sim(3) (масштаб s, вращение R, сдвиг t) с использованием Выравнивание по Умеяме:
Pdpvo≈s⋅(Punity′⋅R⊤)+tP_{dpvo} \approx s \cdot (P_{unity}' \cdot R^\top) + tPdpvo≈s⋅(Punity′⋅R⊤)+t - Вычислить RMSE между выровненными позициями Unity и расчетными позициями DPVO.
- Выберите отображение оси C_k с минимальным RMSE.
Шаг 4: Голосование по осям
- Повторите шаг 3 для нескольких последовательностей.
- Выполните голосование большинства по выбранным сопоставлениям осей {C₁, C₂, C₃, ….
- Выберите наиболее частое сопоставление осей в качестве окончательного сопоставления C*.
Шаг 5. Глобальное уточнение
- Используя C*, соберите все совпадающие позиции из всех последовательностей.
- Переоцените одно глобальное преобразование Sim(3) (s*, R*, t*) с использованием Умеямы.
- Окончательное отображение позиции:
pdpvo=s∗⋅((punity⋅C∗⊤)⋅R∗⊤)+t∗p_{dpvo} = s^* \cdot ((p_{unity} \cdot) C^{*\top}) \cdot R^{*\top}) + t^*pdpvo=s∗⋅((punity⋅C∗⊤)⋅R∗⊤)+t∗
Несмотря на хорошее позиционное выравнивание, я наблюдаю проблемы во время обучения и вывода (например, нестабильное поведение вращения, спиральные траектории).
Это поднимает несколько вопросов:
- Является ли эта стратегия выравнивания концептуально правильной для согласования поз Unity с позами DPVO/DROID-SLAM?
- Особенно, когда соглашения о позах DPVO недокументированы.
- Кто-нибудь знает точные соглашения о системе координат, используемые DPVO или DROID-SLAM?
- Рука (левая/правая)
- Направления осей
- Определение позы «камера-мир» и «мир-камера»
- Достаточно ли выравнивания только по положению или следует также явно преобразовать основную истину вращения (кватерниона) с использованием того же базового изменения?
- На данный момент трансформируется только перевод; Кватернионы Unity оставлены без изменений.
- Существуют ли какие-либо рекомендации по использованию поз камеры, созданных Unity, в качестве контроля для моделей SLAM/VO, таких как DPVO?
Подробнее здесь: https://stackoverflow.com/questions/798 ... e-system-f