---
id: cv-perception-methods
title: Методы машинного восприятия
---

Обзор методов обнаружения, сегментации и оценки 6D-позиций объектов.

## Соревнование BOP (benchmark of pose estimation)

[Официальный сайт проекта](https://bop.felk.cvut.cz/home/)

### О самой задаче оценки позиции

Оценка методов 6D-локализации объекта является сложной задачей. На изображении может быть видна только часть поверхности объекта из-за самоокклюзии и/или окклюзии другими объектами. Видимая часть объекта может иметь несколько подгонок к 3D-модели объекта. Как следствие, может быть много поз 6D, соответствующих изображению. Часто бывает трудно явно перечислить все согласованные позы.
Наиболее широко используемыми функциями позы-ошибки были $ADD$/$ADI$ [1,2], где ошибка рассчитывается как среднее расстояние от вершин модели объекта в истинной позе до вершин модели в предполагаемой позе. Расстояние измеряется между соответствующими вершинами, если все виды объекта различимы ($ADD$). В противном случае для объектов с неразличимыми видами расстояние измеряется между заданной вершиной и ее ближайшим соседом в трехмерном пространстве, который не обязательно может быть соответствующей вершиной ($ADI$). $ADI$ может давать неинтуитивно низкие ошибки даже для различимых поз. Таким образом, объекты, оцененные с помощью $ADI$, имеют тенденцию давать низкие ошибки позы, хотя предполагаемые позы могут быть визуально не совсем хорошо выровнены. Еще одно ограничение $ADD$/$ADI$ связано с высокой зависимостью от геометрии модели объекта и плотности дискретизации его поверхности — на среднем расстоянии преобладают более высокочастотные части поверхности, такие как резьба. Максимальное расстояние, используемое в $MSSD$ и $MSPD$, в меньшей степени зависит от плотности отбора образцов поверхности.  

Обработка $MSSD$ и $MSPD$ создает неоднозначность из-за глобальной симметрии объектов. $MSSD$ подходит для роботизированного захвата, а $MSPD$ — для приложений дополненной реальности. Однако, поскольку оба рассчитываются по всей поверхности модели, несоосность невидимых частей штрафуется. Это может быть нежелательно для таких приложений, как роботизированное манипулирование присосками, где имеет значение только выравнивание видимой части.

$VSD$ рассчитывается только по видимой части объекта. Он оценивает выравнивание формы объекта, но не его цвета — это связано с тем, что большинство моделей объектов, в настоящее время включенных в BOP, имеют запеченные тени и отражения в своих текстурах, что затрудняет надежную оценку выравнивания цвета. Поскольку каждый из $VSD$, $MSSD$ и $MSPD$ имеет отношение к разным целевым приложениям, BOP использует все три для оценки.

Организаторы соревнования создали контрольный показатель BOP в области оценки положения объекта - $AR$ (средний отзыв). C 2019 года он изменился с 56,9 AR до 83,7 AR в 2022 году. Максимальный показатель - 100 AR.  

Каждому методу для обучения на вход подаётся набор обучающих RGB-D изображений, показывающих объекты, аннотированные реальными 6D-позами, и 3D-сетчатые модели (mesh) объектов с цветной текстурой. Для тестирования предоставляется невидимое во время обучения RGB-D изображение и список мест обнаружений объектов на нём. На выходе метод выдаёт список 6D-поз объектов, в соответствии с входным списком.

В [новом раунде](https://bop.felk.cvut.cz/challenges/bop-challenge-2023/) BOP Challenge в 2023 году, помимо задач обнаружения, сегментации и оценки 6D-позиций объектов, представленных на момент обучения, добавлена новая актуальная задача по обнаружению, сегментации и оценке позиций объектов "невидимых" во время обучения. В новой задаче конкурирующие методы должны изучать новые объекты (3D-сетчатые модели) на коротком этапе адаптации объекта - максимум 5 минут на объект, а затем распознавать объекты на изображениях в различных сценах. Решения для такой задачи позволят кардинально увеличить масштабируемость применяемых методов.

### Методика оценки результатов

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

* $VSD$ (несоответствие видимой поверхности), которое рассматривает неразличимые позы как эквивалентные, рассматривая только видимую часть объекта.
* $MSSD$ (максимальное расстояние до поверхности с учетом симметрии) , которое учитывает набор предварительно определенных глобальных симметрий объектов и измеряет отклонение поверхности в 3D.
* $MSPD$ (максимальное спроецированное расстояние с учетом симметрии), которое учитывает симметрию объекта и измеряет воспринимаемое отклонение.  

Предполагаемая поза считается правильной относительно функции ошибки позы ***e***, если $e < \Theta_{e}$, где $e \in {VSD, MSSD, MSPD}$ и $\Theta_{e}$ является порогом правильности.
Доля экземпляров аннотированных объектов, для которых оценивается правильная поза, называется отзывом. Средний отзыв по функции $e$, обозначаемый как $AR_{e}$, определяется как среднее значение частоты отзыва, рассчитанное для нескольких настроек порога $\Theta_{e}$. Точность метода в конкретном наборе данных D рассчитывается как $AR_{D} = (AR_{VSD} + AR_{MSSD} + AR_{MSPD}) / 3$, которая вычисляется по оценочным позам всех объектов из $D$. Общая точность основных наборов данных $AR_{C}$ определяется как среднее значение для каждого набора данных $AR_{D}$.  

### Инструменты оценки алгоритмов

Важной частью BOP Challenge является открытая библиотека на Python [bop_toolkit](https://github.com/thodan/bop_toolkit/) для загрузки и манипуляции с датасетами, расчёта ошибок оценки 6D-поз, а также рендеринга и визуализации. Позволяет самостоятельно провести анализ методов оценки 6D-поз, в соответствии с областью применения этих методов. В библиотеке присутствуют не только те 3 функции расчёта погрешности, которые участвуют в официальной части соревнования, но и дополнительные (например ADD/ADI), которые применялись в других тестах.

### Ссылки
[1] Hodaň et al.: [On Evaluation of 6D Object Pose Estimation](http://cmp.felk.cvut.cz/~hodanto2/data/hodan2016evaluation.pdf), ECCVW 2016.
[2] Hinterstoisser et al.: [Model based training, detection and pose estimation of texture-less 3d objects in heavily cluttered scenes](http://cmp.felk.cvut.cz/~hodanto2/data/hodan2016evaluation.pdf), ACCV 2012.


## Методы оценки 6D позиций объектов 

Преимущественно с открытым исходным кодом или подходящие под сценарии Робосборщика (априори известная CAD-модель объекта).

### [Gen6D](https://github.com/liuyuan-pal/Gen6D) '2022
Алгоритм безмодельной оценки положения объекта с 6 степенями свободы на основе изображений RGB.
Интересный алгоритм, для которого требуется относительно небольшая предварительная подготовка объекта для оценки положения. На отдельных кадрах из реальной видеосъёмки объекта помечается область объекта и указываются оси положения. Затем, с помощью открытого ПО для обработки облаков точек [CloudCompare](https://www.cloudcompare.org/) формируется облако точек объекта (файл *.ply) для алгоритма оценки положения.

### [RADet](https://github.com/YangHai-1218/RADet) '2023
Стратегия выборки, ориентированная на видимую часть объекта, по версии разработчиков даёт более точную оценку положения объектов особенно в сильно загромождённых сценах.

### [SCFlow](https://github.com/YangHai-1218/SCFlow) '2023
Проект, основанный на оптимизации метода уточнения позы объекта, за счёт ограничения области сопоставления трёхмерной формой объекта на следующем шаге в потоке изображений.

### [RCVPose 3D](https://github.com/aaronWool/rcvpose3d) '2022
Оценка положения на основе облака точек методом каскадного выбора по ключевым точкам.

### [ZebraPose](https://github.com/suyz526/ZebraPose) '2022
В этой работе предлагается дискретный дескриптор поверхности объекта, который эффективно кодирует эту поверхность. И представлена стратегия обучения от грубой до точной, которая позволяет прогнозировать точное соответствие. Затем, сопоставляя предсказанные коды с поверхностью объекта на изображении и используя решатель PnP, оценивается положение 6DoF.

### [SINGLESHOTPOSE](https://github.com/microsoft/singleshotpose) '2018
Бесшовное прогнозирование положения объекта в режиме одиночного 6D-снимка в реальном времени. Здесь предлагается однократный подход для одновременного обнаружения объекта на изображении RGB и прогнозирования его 6D-позиции, не требуя нескольких этапов или проверки нескольких гипотез.

### [Pix2Pose](https://github.com/kirumang/Pix2Pose) '2022
Метод оценки позы, который предсказывает 3D-координаты каждого пикселя объекта без текстурированных моделей. Метод устойчив к окклюзии, для чего используются последние достижения в области генеративно-состязательного обучения для точного восстановления закрытых частей.

Есть реализация detection и 6D pose estimation для ROS.

### [GDR-Net](https://github.com/THU-DA-6D-Pose-Group/GDR-Net) '2023
Сеть прямой регрессии на основе геометрии для монокулярной оценки положения объекта 6D. В этой работе проведено углубленное исследование как прямых, так и косвенных методов регрессии позы, и предложена простая, но эффективная сеть прямой регрессии, управляемая геометрией (GDR-Net), для сквозного изучения позы 6D из промежуточных геометрических представлений на основе плотного соответствия.

### [DeepIM](https://github.com/liyi14/mx-DeepIM) '2019
Глубокое итеративное сопоставление для оценки позы 6D. В этой работе предлагается глубокая нейронная сеть для сопоставления поз 6D под названием DeepIM. Учитывая начальную оценку позы, эта сеть может итеративно уточнять позу, сопоставляя визуализированное изображение с наблюдаемым изображением.

### [DenseFusion](https://github.com/j96w/DenseFusion) '2019
Основная техническая задача при оценке положения 6D-объекта по изображению RGB-D заключается в том, чтобы полностью использовать два взаимодополняющих источника данных. DenseFusion — это гетерогенная архитектура, которая обрабатывает два источника данных по отдельности и использует новую плотную сеть слияния для извлечения встраивания плотных объектов по пикселям, по которым оценивается поза.

### [FS6D](https://github.com/ethnhe/FS6D-PyTorch) '2023
Здесь изучается новая задача оценки позы 6D-объекта с несколькими кадрами в открытом наборе: оценка 6D-позы неизвестного объекта с помощью нескольких вспомогательных видов без моделей САПР и дополнительного обучения.

Код на данный момент недоступен

### [6-PACK](https://github.com/j96w/6-PACK) '2020

[Сайт проекта](https://sites.google.com/view/6packtracking)

6-PACK - подход глубокого обучения к отслеживанию положения 6D-объекта на уровне категории на основе данных RGB-D. Метод отслеживает в режиме реального времени экземпляры новых объектов известных категорий объектов, таких как миски, ноутбуки и кружки. 6-PACK учит компактно представлять объект с помощью нескольких ключевых точек 3D, на основе которых можно оценить межкадровое движение экземпляра объекта посредством сопоставления ключевых точек.

### [DoUnseen](https://github.com/AnasIbrahim/image_agnostic_segmentation) '2023

[dataset DoPose](https://zenodo.org/record/6103779)

Классификация объектов с нулевым выстрелом для роботизированного захвата. Эта библиотека содержит конвейер для обнаружения объекта без обучения.
Большинство современных исследований сегментации объектов для роботизированного захвата сосредоточено на сегментации объектов на уровне класса (например, коробка, чашка, бутылка), закрытых наборах (конкретных объектах набора данных, например, наборе данных YCB) или сопоставлении шаблонов на основе глубокого обучения. В данной работе рассматриваются открытые множества, в которых количество классов неизвестно, варьируется и без предварительного знания о типах объектов. Каждый конкретный объект обозначается как свой отдельный класс. Цель этой работы — разработать детектор объектов с нулевым выстрелом, который не требует обучения и может добавить любой объект в качестве класса, просто сделав несколько изображений объекта.

### [NOPE](https://github.com/nv-nguyen/nope): Novel Object Pose Estimation from a Single Image '2023

Оценка позы нового объекта по одному изображению. Предлагается подход, который использует одно изображение нового объекта в качестве входных данных и предсказывает относительное положение этого объекта на новых изображениях без предварительного знания 3D-модели объекта и без необходимости обучения новым объектам и категориям.

### [PIZZA](https://github.com/nv-nguyen/pizza) '2023

Мощный подход Zero-Shot Zero-CAD к отслеживанию 6 DoF только по изображениям. Метод отслеживания 6D-перемещений объектов в видео-последовательностях RGB, когда ни обучающие изображения, ни 3D-геометрия объектов недоступны. Таким образом, в отличие от предыдущих работ, этот метод может мгновенно рассматривать неизвестные объекты в открытом мире, не требуя какой-либо предварительной информации или определенного этапа обучения. Рассматриваются две архитектуры, одна из которых основана на двух кадрах, а другая опирается на кодировщик Transformer, который может использовать произвольное количество прошлых кадров.

### [CosyPose](https://github.com/Simple-Robotics/cosypose) '2020

[Paper](https://arxiv.org/pdf/2008.08465.pdf), [Code](https://github.com/Simple-Robotics/cosypose)

Лучший RGB-only метод на BOP Challenge 2020. Для обучения использовались датасеты с видео-информацией YCB-Video и T-LESS (без текстур). Ключевая особенность метода - для оценки позиции не нужна позиция камеры, она может быть вычислена автоматически. Авторы отмечают, что от позиции камеры из датасетов (ground truth) их метод даёт ошибку от 1 до 3 %. CosyPose использует набор из нескольких RGB-изображений сцены, снятых с неизвестных точек обзора, с заранее известными объектами и реконструирует сцену, после чего восстанавливает все объекты в сцене, их 6D-позиции и точки обзора камеры.

### [Megapose](https://github.com/megapose6d/megapose6d) '2022

Идея метода заключается в том, что модель объекта передаётся в режиме исполнения вместе с RGB-изображением с выделенной областью, содержащей данный объект, которая получена на этапе обнаружения объекта (ObjectDetection).  

Для запуска проекта создается среда выполнения под управлением conda.
Должны быть установлены две переменные окружения:

* MEGAPOSE_DIR: Корневой каталог проекта.
* MEGAPOSE_DATA_DIR: Корневой каталог для входных и выходных данных. 

#### Структура входных данных
```
$MEGAPOSE_DATA_DIR/examples/my_object/
    inputs/object_data.json
    meshes/my_object/fork_001.ply
    image_rgb.png
    [image_depth.png]
    camera_data.json
```
- `image_rgb.png` - представляет собой RGB-изображение сцены. Рекомендуется использовать соотношение сторон 4:3.
- `image_depth.png` (необязательно) содержит измерения глубины со значениями в формате mm. Можно пропустить этот файл, если нет измерений глубины.
- `camera_data.json` содержит внутреннюю матрицу камеры 3x3 K и разрешение камеры в [h,w] формате.
```json
    {"K": [[605.9547119140625, 0.0, 319.029052734375], [0.0, 605.006591796875, 249.67617797851562], [0.0, 0.0, 1.0]], "resolution": [480, 640]}
```
- `inputs/object_data.json` содержит список обнаружений объектов. Для каждого обнаружения предоставляется 2D ограничивающая рамка на изображении (в [xmin, ymin, xmax, ymax] формате) и метка объекта. Ограничительная рамка не обязательно должна быть предельно точной.
```json
    [{"label": "my_object", "bbox_modal": [384, 234, 522, 455]}]
```
- `meshes/my_object` это каталог, содержащий mesh объекта. Ожидается, что единицы mesh будут в миллиметрах. В этом примере используется mesh в .ply формате. Код также поддерживает объекты в формате .obj.

#### Запуск оценки положения объекта производится с помощью следующей команды:
```
python -m megapose.scripts.run_inference_on_example my_object --run-inference 
```
По умолчанию используется только RGB-изображение без карты глубины.

#### Предыдущая команда создаст следующий файл:
```
$MEGAPOSE_DATA_DIR/examples/my_object/
    outputs/object_data.json
```
Этот файл содержит список объектов с их предполагаемыми позами. Для каждого объекта отмечается предполагаемая поза TWO (кадр мировых координат соответствует кадру камеры). Она состоит из кватерниона(3D-вращение) плюс 3D-смещение:
```json
[{"label": "my_object", "TWO": [[0.5453961536730983, 0.6226545207599095, -0.43295293693197473, 0.35692612413663855], [0.10723329335451126, 0.07313819974660873, 0.45735278725624084]]}]
```

## Методы сегментации

### [CNOS](https://github.com/nv-nguyen/cnos) '2023

Надежная основа для сегментации новых объектов на основе CAD, Segmenting Anything и DINOv2


## Вспомогательные инструменты

### [6DPoseAnnotator](https://github.com/sakizuki/6DPoseAnnotator) (2021)
Интерактивный инструмент аннотации позы с 6 степенями свободы (DoF) с использованием обработки облака точек.
