Подобрать и запустить алгоритм обучения 6D Pose Estimation #34

Closed
opened 2023-02-21 13:33:55 +03:00 by shalenikol · 10 comments
shalenikol commented 2023-02-21 13:33:55 +03:00 (Migrated from gitlab.com)
Некоторые варианты алгоритмов 6D pose estimation. Используется RGBD * [Deep Object Pose Estimation for Semantic Robotic Grasping of Household Objects](https://arxiv.org/abs/1809.10790) * [Сборник на любой цвет и вкус с кодом](https://paperswithcode.com/task/6d-pose-estimation-using-rgbd) * [Robust 6D Object Pose Estimation by Learning RGB-D Features](https://arxiv.org/abs/2003.00188) * [Unseen Object 6D Pose Estimation: A Benchmark and Baselines](https://arxiv.org/abs/2206.11808) * [Awesome 6D pose estimation](https://github.com/liuyuan-pal/Awesome-generalizable-6D-object-pose) * [PoseCNN: A Convolutional Neural Network for 6D Object Pose Estimation in Cluttered Scenes](http://www.roboticsproceedings.org/rss14/p19.pdf)
shalenikol commented 2023-02-21 13:33:56 +03:00 (Migrated from gitlab.com)

assigned to @shalenikol

assigned to @shalenikol
shalenikol commented 2023-02-22 17:27:08 +03:00 (Migrated from gitlab.com)

Ознакомился с методикой генерации позиций захвата Grasp Pose Detection (GPD).
Общая структура алгоритма содержит два основных шага:

  • вначале генерируется большой набор различных вариантов захвата 6D
  • затем каждый вариант проходит отбор/классификацию на плохое либо хорошее схватывание.

Использование на 2-м шаге предобученных нейросетей, получивших знания о идеализированных моделях САПР плюс смоделированных глубин этих моделей, даёт возможность количественно оценить успешность позы захвата.

Ознакомился с методикой генерации позиций захвата [Grasp Pose Detection (GPD)](https://github.com/atenpas/gpd). Общая структура алгоритма содержит два основных шага: * вначале генерируется большой набор различных вариантов захвата 6D * затем каждый вариант проходит отбор/классификацию на плохое либо хорошее схватывание. Использование на 2-м шаге предобученных нейросетей, получивших знания о идеализированных моделях САПР плюс смоделированных глубин этих моделей, даёт возможность количественно оценить успешность позы захвата.
movefasta commented 2023-02-27 18:26:18 +03:00 (Migrated from gitlab.com)

mentioned in issue #39

mentioned in issue #39
movefasta commented 2023-02-27 18:33:57 +03:00 (Migrated from gitlab.com)

changed due date to February 14, 2023

changed due date to February 14, 2023
movefasta commented 2023-02-27 18:37:39 +03:00 (Migrated from gitlab.com)

changed time estimate to 40h

changed time estimate to 40h
movefasta commented 2023-02-27 22:09:00 +03:00 (Migrated from gitlab.com)

changed due date to March 14, 2023

changed due date to March 14, 2023
shalenikol commented 2023-03-02 16:14:34 +03:00 (Migrated from gitlab.com)

mentioned in merge request !15

mentioned in merge request !15
movefasta (Migrated from gitlab.com) closed this issue 2023-03-03 10:37:50 +03:00
movefasta (Migrated from gitlab.com) reopened this issue 2023-03-06 18:32:29 +03:00
shalenikol commented 2023-03-10 11:07:38 +03:00 (Migrated from gitlab.com)

Исследовал se(3)-TrackNet

Запускается под docker'ом. Датасеты были скачаны, настроены пути для запуска predict.sh
При запуске predict.sh выползает ошибка в алгоритме:

  • используется renderer: vispyrenderer в файле dataset_info.yml
root@shalenikol-MS-7817:/home/se3_tracknet# bash predict_my.sh
ckpt_dir: /home/bowen/debug/bleach_cleanser/model_best_val.pth.tar
dataset_info_path /home/bowen/debug/dataset_info.yml
/DATASET/YCBInEOAT/bleach0
self.object_cloud loaded and downsampled
self.object_width= 88.40581709658576
Loading ckpt from  /home/bowen/debug/bleach_cleanser/model_best_val.pth.tar
pose track ckpt epoch=112
Using vispy renderer
model_path:  /home/se3_tracknet/object_models/bunny/1.ply
Traceback (most recent call last):
  File "predict.py", line 640, in <module>
    predictSequenceMyData()
  File "predict.py", line 566, in predictSequenceMyData
    tracker = Tracker(dataset_info, images_mean, images_std,ckpt_dir, trans_normalizer=0.03, rot_normalizer=30*np.pi/180)
  File "predict.py", line 163, in __init__
    self.renderer = VispyRenderer(dataset_info['models'][0]['model_path'], self.K, H=dataset_info['resolution'], W=dataset_info['resolution'])
  File "/home/se3_tracknet/vispy_renderer.py", line 110, in __init__
    face_indices = np.stack(face_indices, axis=0)
  File "<__array_function__ internals>", line 6, in stack
  File "/usr/local/lib/python3.6/dist-packages/numpy/core/shape_base.py", line 423, in stack
    raise ValueError('need at least one array to stack')
ValueError: need at least one array to stack
  • используется renderer: pyrenderer в файле dataset_info.yml
root@shalenikol-MS-7817:/home/se3_tracknet# bash predict_my.sh
ckpt_dir: /home/bowen/debug/bleach_cleanser/model_best_val.pth.tar
dataset_info_path /home/bowen/debug/dataset_info.yml
/DATASET/YCBInEOAT/bleach0
self.object_cloud loaded and downsampled
self.object_width= 88.40581709658576
Loading ckpt from  /home/bowen/debug/bleach_cleanser/model_best_val.pth.tar
pose track ckpt epoch=112
Using pyrenderer
model_path /home/se3_tracknet/object_models/bunny/1.obj
self.cam_K:
 [[1.066778e+03 0.000000e+00 3.129869e+02]
 [0.000000e+00 1.067487e+03 2.413109e+02]
 [0.000000e+00 0.000000e+00 1.000000e+00]]
making dataset... for eval
#dataset: 0
self.trans_normalizer=0.03, self.rot_normalizer=0.5235987755982988
init pose
 [[-0.6981918   0.05113025  0.71419933 -0.39318141]
 [ 0.57201178  0.6396664   0.51329966  0.27422776]
 [-0.43062506  0.76665225 -0.47589299  0.83633948]
 [ 0.          0.          0.          1.        ]]
Traceback (most recent call last):
  File "predict.py", line 640, in <module>
    predictSequenceMyData()
  File "predict.py", line 591, in predictSequenceMyData
    cur_pose = tracker.on_track(A_in_cam, rgb, depth, gt_A_in_cam=np.eye(4),gt_B_in_cam=np.eye(4), debug=debug,samples=samples)
  File "predict.py", line 216, in on_track
    rgbB, depthB = crop_bbox(current_rgb, current_depth, bb, self.image_size)
  File "/home/se3_tracknet/Utils.py", line 340, in crop_bbox
    color_crop[top_offset:bottom_offset, left_offset:right_offset, :] = color[top:bottom, left:right, :]
ValueError: could not broadcast input array from shape (0,508,3) into shape (58,0,3)

# Исследовал [se(3)-TrackNet](https://github.com/wenbowen123/iros20-6d-pose-tracking) Запускается под docker'ом. Датасеты были скачаны, настроены пути для запуска predict.sh При запуске predict.sh выползает ошибка в алгоритме: * используется renderer: vispyrenderer в файле dataset_info.yml ``` root@shalenikol-MS-7817:/home/se3_tracknet# bash predict_my.sh ckpt_dir: /home/bowen/debug/bleach_cleanser/model_best_val.pth.tar dataset_info_path /home/bowen/debug/dataset_info.yml /DATASET/YCBInEOAT/bleach0 self.object_cloud loaded and downsampled self.object_width= 88.40581709658576 Loading ckpt from /home/bowen/debug/bleach_cleanser/model_best_val.pth.tar pose track ckpt epoch=112 Using vispy renderer model_path: /home/se3_tracknet/object_models/bunny/1.ply Traceback (most recent call last): File "predict.py", line 640, in <module> predictSequenceMyData() File "predict.py", line 566, in predictSequenceMyData tracker = Tracker(dataset_info, images_mean, images_std,ckpt_dir, trans_normalizer=0.03, rot_normalizer=30*np.pi/180) File "predict.py", line 163, in __init__ self.renderer = VispyRenderer(dataset_info['models'][0]['model_path'], self.K, H=dataset_info['resolution'], W=dataset_info['resolution']) File "/home/se3_tracknet/vispy_renderer.py", line 110, in __init__ face_indices = np.stack(face_indices, axis=0) File "<__array_function__ internals>", line 6, in stack File "/usr/local/lib/python3.6/dist-packages/numpy/core/shape_base.py", line 423, in stack raise ValueError('need at least one array to stack') ValueError: need at least one array to stack ``` * используется renderer: pyrenderer в файле dataset_info.yml ``` root@shalenikol-MS-7817:/home/se3_tracknet# bash predict_my.sh ckpt_dir: /home/bowen/debug/bleach_cleanser/model_best_val.pth.tar dataset_info_path /home/bowen/debug/dataset_info.yml /DATASET/YCBInEOAT/bleach0 self.object_cloud loaded and downsampled self.object_width= 88.40581709658576 Loading ckpt from /home/bowen/debug/bleach_cleanser/model_best_val.pth.tar pose track ckpt epoch=112 Using pyrenderer model_path /home/se3_tracknet/object_models/bunny/1.obj self.cam_K: [[1.066778e+03 0.000000e+00 3.129869e+02] [0.000000e+00 1.067487e+03 2.413109e+02] [0.000000e+00 0.000000e+00 1.000000e+00]] making dataset... for eval #dataset: 0 self.trans_normalizer=0.03, self.rot_normalizer=0.5235987755982988 init pose [[-0.6981918 0.05113025 0.71419933 -0.39318141] [ 0.57201178 0.6396664 0.51329966 0.27422776] [-0.43062506 0.76665225 -0.47589299 0.83633948] [ 0. 0. 0. 1. ]] Traceback (most recent call last): File "predict.py", line 640, in <module> predictSequenceMyData() File "predict.py", line 591, in predictSequenceMyData cur_pose = tracker.on_track(A_in_cam, rgb, depth, gt_A_in_cam=np.eye(4),gt_B_in_cam=np.eye(4), debug=debug,samples=samples) File "predict.py", line 216, in on_track rgbB, depthB = crop_bbox(current_rgb, current_depth, bb, self.image_size) File "/home/se3_tracknet/Utils.py", line 340, in crop_bbox color_crop[top_offset:bottom_offset, left_offset:right_offset, :] = color[top:bottom, left:right, :] ValueError: could not broadcast input array from shape (0,508,3) into shape (58,0,3) ```
movefasta commented 2023-03-11 16:32:44 +03:00 (Migrated from gitlab.com)

Предлагаю также включить в исследование BOP challenge - это соревнование алгоритмов 6D pose estimation (в 2022 году включили также 2D object detection и 2D object segmentation). Результаты 2022 года - http://cmp.felk.cvut.cz/sixd/workshop_2022/slides/bop_challenge_2022_results.pdf. по 6D pose estimation в 2022 году стал однозначным победителем алгоритм GDR-NPP (наследник GDR_Net), реализация доступна тут https://github.com/shanice-l/gdrnpp_bop2022 . Думаю, что будет не лишним взять этот проект в качестве референса.

Прошу разобраться по каким критериям оцениваются алгоритмы и оценить насколько они пригодны для нашего сценария, где требуется высокая точность оценки позиции и при этом мы можем сделать несколько снимков, благодаря возможности изменять положение камеры.

Утилиты для проведения benchmark'а - https://github.com/thodan/bop_toolkit

Напомню, что мы позиционировали фреймворк также и с той точки зрения, он может служить таким benchmark'ом для подбора разных алгоритмов. Если есть уже готовый benchmark алгоритм, то нужно подумать о его интеграции в фреймворк.

для информации @solid-sinusoid @Splinter1984

Предлагаю также включить в исследование BOP challenge - это соревнование алгоритмов 6D pose estimation (в 2022 году включили также 2D object detection и 2D object segmentation). Результаты 2022 года - http://cmp.felk.cvut.cz/sixd/workshop_2022/slides/bop_challenge_2022_results.pdf. по 6D pose estimation в 2022 году стал однозначным победителем алгоритм GDR-NPP (наследник GDR_Net), реализация доступна тут https://github.com/shanice-l/gdrnpp_bop2022 . Думаю, что будет не лишним взять этот проект в качестве референса. Прошу разобраться по каким критериям оцениваются алгоритмы и оценить насколько они пригодны для нашего сценария, где требуется высокая точность оценки позиции и при этом мы можем сделать несколько снимков, благодаря возможности изменять положение камеры. Утилиты для проведения benchmark'а - https://github.com/thodan/bop_toolkit Напомню, что мы позиционировали фреймворк также и с той точки зрения, он может служить таким benchmark'ом для подбора разных алгоритмов. Если есть уже готовый benchmark алгоритм, то нужно подумать о его интеграции в фреймворк. для информации @solid-sinusoid @Splinter1984
movefasta commented 2023-03-12 11:45:11 +03:00 (Migrated from gitlab.com)

Ещё интересный сценарий отражён в работе https://megapose6d.github.io/ - https://github.com/megapose6d/megapose6d
Тут идея заключается в том, что модель объекта неизвестна на этапе обучения, а передаётся в режиме исполнения вместе с RGB-изображением с выделенной областью, содержащей данный объект.
см. иллюстрацию:
image

Если быть точным, то входные параметры:

  • an RGB image (depth can also be used but is optional),
  • the intrinsic parameters of the camera,
  • a mesh of the object,
  • a bounding box of that object in the image,

Подход оценивает 6D pose объекта (3D rotation + 3D translation) с поправкой на положение камеры.

Это может быть интересно в нашем случае, чтобы сделать фреймворк более универсальным. Мы можем поставлять некий сервис, который принимает результат object detection и CAD модель и на ходу оценивающий позицию без обучения.

Ещё интересный сценарий отражён в работе https://megapose6d.github.io/ - https://github.com/megapose6d/megapose6d Тут идея заключается в том, что модель объекта неизвестна на этапе обучения, а передаётся в режиме исполнения вместе с RGB-изображением с выделенной областью, содержащей данный объект. см. иллюстрацию: ![image](/uploads/5134edd3f25d559e1a3ade7ada2c6187/image.png) Если быть точным, то входные параметры: - an RGB image (depth can also be used but is optional), - the intrinsic parameters of the camera, - a mesh of the object, - a bounding box of that object in the image, Подход оценивает 6D pose объекта (3D rotation + 3D translation) с поправкой на положение камеры. Это может быть интересно в нашем случае, чтобы сделать фреймворк более универсальным. Мы можем поставлять некий сервис, который принимает результат object detection и CAD модель и на ходу оценивающий позицию без обучения.
movefasta (Migrated from gitlab.com) closed this issue 2023-05-02 10:15:43 +03:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: robossembler/framework#34
No description provided.