Привет! Мы в Macroscop разрабатываем ПО для систем видеонаблюдения, которое умеет распознавать автономера, чекать спецодежду на рабочих, детектировать по видео задымленность и возгорания и решать еще около 20 задач, касающихся анализа видео. Один из фокусов нашей команды - разработка собственной видеоаналитики, а также постоянное ее улучшение, выражающееся в росте точности, функциональности и производительности. Пару месяцев назад мы выпустили новую версию ПО, в которой в том числе значительно обновился нейросетевой модуль трекинга, отслеживающий траектории перемещения объектов, пересечение контрольных линий и длительное пребывание в охраняемых зонах. Необходимость модернизации трекинга назрела, потому что за годы, прошедшие с момента разработки предыдущей версии, к нему накопился ряд пожеланий. Часть из них касалась повышения точности работы, часть - производительности модуля. Возникла задача, обычно вызывающая холодный пот у разработчика: сделать так, чтобы трекинг работал точнее и при этом - быстрее.К счастью, причины указанных проблем скрывались в разных частях алгоритма трекинга и были в большой степени независимы друг от друга. В результате нам удалось добиться повышения точности модуля при одновременном снижении затрат вычислительных ресурсов. А как мы это сделали- расскажем дальше.Все смешалось – люди, кони кошки...Первая сложность, связанная с точностью, лежала внутри обученного нами детектора-классификатора (YOLO), который обнаруживает в кадре объекты интересующих нас классов: транспорт разных типов, люди, животные. Выражалась она довольно специфическим образом: некоторые животные, особенно кошки и собаки, в определенных ракурсах (вид со спины и видны задние лапы, направленные параллельно туловищу) классифицировались как люди. Как мы перестали путать кошек и людей