Трекинг объектов по видео: как мы повышали точность, снижали ресурсоемкость, и к каким изменениям в продукте это привело

Привет! Мы в Macroscop разрабатываем ПО для систем видеонаблюдения, которое умеет распознавать автономера, чекать спецодежду на рабочих, детектировать по видео задымленность и возгорания и решать еще около 20 задач, касающихся анализа видео.
Один из фокусов нашей команды - разработка собственной видеоаналитики, а также постоянное ее улучшение, выражающееся в росте точности, функциональности и производительности. 

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

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

Все смешалось – люди, кони кошки...

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

Как мы перестали путать кошек и людей
2