Jump to content
Compvision.ru
Jove

Нахождение ключевых точек объекта и угла его поворота в пространстве

Recommended Posts

Добрый день!

Подскажите в каком направлении копать.

Задача: в режиме реального времени в кадре найти определенный объект, например, стул. Кроме того, определить ключевые/крайние точки (ножек, спинки и другие) - и, как следствие, определить угол наклона этого объекта относительно камеры по всем 3 осям.

Насколько я понимаю, задача не сильно отличается от того же определения ключевых точек на лице методом Виолы-Джонса, но мне не понятно каким образом натренировать поиск не просто самого объекта, а конкретных точек на нем.

Какие варианты реализации задачи существуют и какие из них наиболее точные и производительные?

Share this post


Link to post
Share on other sites

Посмотрите в сторону openpose, как делается тренировка скелета или вот....

 

Share this post


Link to post
Share on other sites
2 часа назад, LexaP сказал:

Посмотрите в сторону openpose, как делается тренировка скелета или вот....

Не нашел ни одного туторила о том, как самому средствами openpose обучить нейронную сеть находить ключевые точки на своих объектах. Плохо искал или таких средств не существует?

Кроме того, openpose требует CUDA, что мне не подходит...

Share this post


Link to post
Share on other sites

Без CUDA тоже будет работать, но медленней. По факту ключевые точки на лице ищутся не методом Виолы-Джонса, им только лицо, а точки уже другими способами: AAM, нйросети (регрессия) и т.д. Возможно, тебе подойдут active shape models, которые до нейростей были лидером по качеству и не требовали видеокарты. Хотя сейчас с OpenVINO многие нейросети и так быстро работают.

  • Like 1

Share this post


Link to post
Share on other sites
15 часов назад, Nuzhny сказал:

По факту ключевые точки на лице ищутся не методом Виолы-Джонса, им только лицо, а точки уже другими способами: AAM, нйросети (регрессия) и т.д. Возможно, тебе подойдут active shape models, которые до нейростей были лидером по качеству и не требовали видеокарты. Хотя сейчас с OpenVINO многие нейросети и так быстро работают.

Правильно ли я понимаю, что реализация должна быть примерно следующей:

1. Найти искомый объект (объекты) в кадре с помощью классификационной нейронной сети.

2. В найденных объектах с помощью AAM найти ключевые точки.

3. По геометрии взаимного расположения точек в пространстве или с помощью регрессионной нейронной сети (по статистике расположения координат и соответствующих им углам) определить углы наклона.

 

Или возможна более простая реализация?

И насколько производительна может быть такая схема для отслеживания изменения состояний объектов в режиме реального времени на не очень производительном железе?

Share this post


Link to post
Share on other sites

Просто тут не будет :)

AAM , по опыту, довольно медленный.

ASM , как правило, быстрый, но дерганый, нужно сглаживать движение.

Посмотрите этот проект: https://github.com/TadasBaltrusaitis/CLM-framework/tree/master

Там есть и матлабовские скрипты для обучения моделей.

Может пригодится еще : https://github.com/patrikhuber/eos 

 

 

 

  • Like 1

Share this post


Link to post
Share on other sites

Иллюзий по поводу простоты я не строю :) Но меньше всего хочется двигаться в неправильном направлении...

Насколько реалистична такая реализация:

1. Раз в несколько секунд с помощью AAM или ASM находим очертания интересующего нас объекта, а также ключевые точки внутри него для последующего отслеживания.

2. Отслеживаем найденные точки (обычный tracking) с целью определения возможного изменения положения объекта в пространстве. И по этим точкам пересчитываем углы наклона.

3. Если отслеживаемые точки потеряны, то заново запускаем п. 1, ну и просто с какой-то периодичностью запускаем п. 1 для корректировки п. 2.

 

И кто-нибудь пробовал вот это решение - насколько оно точное и производительное?

https://docs.opencv.org/4.1.0/d2/d42/tutorial_table_of_content_cnn_3dobj.html

3D модели в формате ply я вполне могу насоздавать для обучения.

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

Share this post


Link to post
Share on other sites
В 23.07.2019 at 17:56, Smorodov сказал:

Наткнулся на похожий проект: https://github.com/lmb-freiburg/mv3d 

Спасибо.

Нашел у них же еще более интересное решение, которое на выходе выдает 3D координаты (21 точку на каждой руке). Не знаю, правда, насколько все это производительно - надо пробовать...

https://github.com/lmb-freiburg/hand3d

  • Like 1

Share this post


Link to post
Share on other sites

Вот что мне тут гугл подбросил. Там ссылки на несколько десятков проектов. 

https://github.com/timzhang642/3D-Machine-Learning

Я бы использовал угловой детектор и обучил бы классификатор так, что-бы каждый объект со своими углами поворота являлся отдельным классом.

687474703a2f2f7669732d7777772e63732e756d

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×