Перейти к содержимому
Compvision.ru

Recommended Posts

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

Например, для дневного видео, для ночного, для видео с тепловизора и т.п. Можно это сделать вручную (так и делается), но это же не тру-метод.

Умом я понимаю, что это задача глобальной оптимизации:

1. все настройки выделить в один вектор;

2. написать функцию ошибок, которую хотим минимизировать, она может быть сложной, обеспечивающей не только качество, но и быстродействие;

3. запустить метод оптимизации.

Но! Если говорить о детекторе движения, то это много-много времени работы, чтобы прогнать его по датасету с конкретными настройками. Использовать какие-нибудь генетические алгоритмы (первое, что пришло в голову из универсальных методов) выглядит слишком наивным.

А надо ещё разметить каждое видео из датасета.

А ещё в функцию ошибок надо добавлять время работы, чтобы оно не получилось больше, грубо говоря, 1000 мс / fps и вообще как можно меньше. Далее как его (время) связать с качеством? Чтобы не минимизировалось что-то одно в ущерб другому. И качество: кому-то важно не пропустить цель, но допустимы ложные сработки, а кому-то наоборот: по максимуму исключить ложные сработки, но при этому допустимо пропустить цель.

 

Описал сумбурно, но, надеюсь, проблема понятна. Есть ли общепринятая теория на этот счёт? Именно специализированная, а не отсылка к учебнику по методам оптимизации. Может, есть уже хорошие продукты, которые позволяют запускать свой бинарник, писать свою функцию потерь, а остальное делают сами. Кто как решает такую проблему у себя?

Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Например: детектор отдельно фильтр Кальмана отдельно.

Для детектора можно использовать статические картинки и тут вроде все понятно. Есть вполне очевидная целевая функция, есть вектор параметров. Засовываем в оптимизатор, получаем результат. Весовые коэффициенты, например "время детекта"/"точность детекта", задавать пользователем.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
1 hour ago, Smorodov said:

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

Например: детектор отдельно фильтр Кальмана отдельно.

У меня на этот счёт есть большие сомнения. Тут же есть не только фильтр Кальмана, но и всякие пороги: через сколько кадров считать, что найден объект, а не шум; через сколько кадров считать, что объект потерян.

Например, у нас есть солнечный день: чувствительность вычитания фона выкручиваем пониже, объектов (шума) детектируется меньше, начинает быстрее работать сегментация контурами, быстрее работает Венгерский алгоритм, истинные объекты детектируются и трекаются хорошо.

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

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

1 hour ago, Smorodov said:

Для детектора можно использовать статические картинки и тут вроде все понятно. Есть вполне очевидная целевая функция, есть вектор параметров. Засовываем в оптимизатор, получаем результат. Весовые коэффициенты, например "время детекта"/"точность детекта", задавать пользователем.

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

Статические картинки для детектора лиц или пешеходов - да. Для вычитания фона уже нужны видео.

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

И самый главный вопрос - то такое оптимизатор? Генетические алгоритмы? Начал читать ещё про какой-то Байесовский оптимизатор, вроде, тоже должен подойти. У меня явно функция гладкой не будет. Что-то ещё? Может, есть хорошие библиотеки/фреймворки, которые позволяют запускать программу с вектором параметров, писать свою целевую функцию, визуализировать процесс оптимизации? Подойдёт С++ или Питон.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Наример http://ab-initio.mit.edu/wiki/index.php/NLopt , https://software.sandia.gov/opt++/  или встроенный в DLIB http://dlib.net/optimization.html .

  • Like 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Много всего непонятного, но в dlib нашёл интересный алгоритм BOBYQA. До конца в нём не разобрался, но, кажется, он мне и нужен.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ковыряю DLIB, наткнулся на оптимизатор параметров венгерского алгоритма в DLIB : examples/assignment_learning_ex.cpp, насколько я понимаю изучается метрика расстояний между объектами для лучшего трекинга. Есть еще learning_to_track_ex.cpp .

Плюс к тому оптимизатор кроссвалидацией: model_selection_ex.cpp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ага, очень похоже на то. У тебя случайно нет в планах самому потестить эти штуки на предмет их эффективности? А то как-то времени не хватает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Просто grid search с отстреливанием по времени исполнения\пику памяти не подходит?

 

Есть еще варианты с bayesian optimization и genetic programming, но я это встречал скорее в контексте подбора параметров модели для ML.

 

Есть вообще то что то почитать на предмет оптимизаторов которые работаю по сути с черным ящиком(без градиента и т.д.)?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
9 minutes ago, mrgloom said:

Просто grid search с отстреливанием по времени исполнения\пику памяти не подходит?

Боюсь, что это может получиться достаточно медленно. Впрочем, как и генетические алгоритмы.

10 minutes ago, mrgloom said:

Есть еще варианты с bayesian optimization и genetic programming

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
2 часа назад, Nuzhny сказал:

Ага, очень похоже на то. У тебя случайно нет в планах самому потестить эти штуки на предмет их эффективности? А то как-то времени не хватает.

Да я пока в других краях работаю, больше по нейронкам. А ее как поставишь учиться, ничего больше делать невозможно, все жутко тормозит.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Тут именно genetic programming  упоминается

https://github.com/rhiever/tpot

Но tpot это опять же к вопросу оптимальных параметров моделей(хотя там еще какие то типо ансамбли из моделей вроде) из sklearn, а не ваш таск.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×