Как стать автором
Обновить

Комментарии 42

Да. Трекинг объектов без ярко выраженного идентификатора (лица, автомобильные номера) — очень нетривиальная задача. Но есть более сложная — многокамерный трекинг объектов… :)
Это да.
Но тут как всегда «слишком много если». Есть ситуации когда такой трекинг может быть и проще… :) Например если камеры 3D и можно создать плотное поле. Мне кажется, что у Amazon Go примерно так и должно быть реализовано. Напихали 3d камер сверху с шагом полтора метра — и стабильный трекинг готов!
Ещё пример: трекингом занимаются дроны DJI при автоматическом следовании за объектом, для съёмки. И если есть, например, толпа играющих детей, то да, часто сбиваются.
<GN-offtopic>
А можно на нормальном русском переписать или хотя бы в Word с проверкой перед отправкой засовывать?
</GN-offtopic>
Благодарю покорно за минусы в карму и оценку поста от господ троечников. (Или это один троечник?)
Напоминаю, что минусование критики поднимает только собственное ЧСВ, а не грамотность.

Если ошибок и опечаток мало — лучше писать автору в личку.


Если ошибок и опечаток много и вы бы перечислили в своём посте эти косяки — вам наверное и плюсы бы ставили. Сейчас же ваш комментарий с критикой есть, но критика эта не предметная, неконструктивная, и как следствие — бесполезная. Информационный шум. Говоря вашими же словами, ваш комметарий "поднимает только собственное ЧСВ, а не грамотность".

Newbilius, я уже двум авторам в личку такие полотнища писал, что если б я перечислил сейчас в посте все косяки, меня сразу за спам бы заминусовали ещё хлеще.
А если я напишу автору: ну исправит он (возможно) в одной статье все (возможно) ошибки, но в остальных-то статьях ничего исправлять не станет.
А так я надеюсь, что пост прочитает неединичное множество будущих авторов и задумаются, что писателю статей надо быть подкованным не только в технической стороне, но и, как всякому писателю, в языке, на котором пишешь…
Так почему же заботу о глазах всех читателей Хабра надо называть поднятием собственного ЧСВ?
О, как оперативно посты минусуют, много тут народу, которые считают, что полезную техническую информацию© можно хоть падонкаффским езыком песадь, от неё не убудет. Про минус 4 в карму уж и не говорю.
Хотя могли бы историю комментариев посмотреть и увидеть, что мне на неё чихать с высокой башни. А вот на русский язык не чихать.
Интересно, технические учебники от МинОбра вы написанными падонкоффским слэнгом видеть готовы? Для своих детей? Так-то наверняка тут многие на подобных статьях учились, пока учебников не было.
много тут народу, которые считают, что полезную техническую информацию© можно хоть падонкаффским езыком песадь, от неё не убудет.

Лично я так считаю. Язык для меня это способ обмениваться информацией, в данной статье я информацию понял.

Уважаемый, вы с ветряными мельницами боретесь, к сожалению. Сейчас действительно грамотная речь уже почти никого не интересует.
По-моему, самым популярным подходом для трекинга на данный момент являются корреляционные трекеры: KCF, DSST и их вариации. Имеют хорошую производительность, трекать могут все, что угодно и с неплохой точностью.
image
А есть ли что-нибудь готовое?
У меня по поверхности плывут пузыри (их много), надо получить скорости этих пузырей вдоль нужных координат. Сейчас рассматриваем видео и дальше ручками, но хочется как-то автоматизировать.
1) Набрать массив примеров и разметить их прямоугольниками. Тулзы для разметки можно например тут взять — awesomeopensource.com/projects/annotation-tool
www.quora.com/What-is-the-best-image-labeling-tool-for-object-detection
2) Обучить любую детекционную сетку. Например — YOLOv4 — github.com/AlexeyAB/darknet#how-to-train-to-detect-your-custom-objects
Или сетку попроще. В Tensorflow detection API много разных есть, тренируются они наверное попроще — towardsdatascience.com/custom-object-detection-using-tensorflow-from-scratch-e61da2e10087
3) Использовать мой пример который в конце статьи, где используется SORT. Он склеит детекции в треки
Спасибо!
Классная статья, спасибо
Мне через полтора часа диплом защищать диплом с использованием трекинга. Надо бы заголовок комиссии кинуть:D
статья приятная, спасибо

Не надо.
Для этого есть другая обученная сеть. Называется "антиплагиат".

Хочу сделать трекер тараканов на кухне. Надо отслеживать, когда отдельные особи прибегают от соседей. Что посоветуете?
советую обзавестись полом и мебелью контрастного относительно тараканов цвета
идентифицировать каждого таракана вы не сможете в силу несовершенства камер а определять положение и траекторию движения каждого вполне
надо своих маркировать цветом, тогда и отличать от соседских стане проще
можно сделать наводящийся лазер
Как же жизненно! Сейчас читаю и вспоминаю сколько шишек я в своё время набил на этом трассировщике! И казалось бы, в последних версиях opencv есть уже готовые трассировщики причем не один, на любой вкус и быстродействие, но по факту получилось так, что ни один из них нельзя использовать для прода, разве что в качестве вспомогательного инструмента и то с натяжкой ибо на демках там всё работает красиво, но вот ты ему подсовываешь реальные кадры и он плывет. А самое веселье начинается, когда кадры по некоторой причине начинают идти редко и вот тут уже полный треш — треки рвутся, путаются, алгоритм предсказания пытается найти прогнозное положение, но в итоге объект улетает в дребеня. Кстати если кто также мучается — более менее рабочий вариант сравнения двух объектов на соседних кадрах на схожесть дает перцептивный хэш, он есть в составе opencv.
OpenCV — большие молодцы как популяризаторы классических CV-алгоритмов, классического ML и, в последнее время, DL, хорошая точка для старта, но современный прод ставит еще более амбициозные задачи, чем распознать и отслеживать объект на практически бесшумном видео.
OpenCV хорош для прода. Он очень много что простого умеет — и достаточно эффективно.
Взять хотя бы что OpenCV инференс нейронок эффективнее чем на дефолтном TensorFlow или PyTorch.
И это не считая OpenVino.

Захват камер опять же. Простые подготовки/преобразоваия изображений.
И работает почти везде.
Простые задачи — несомненно. Я про такие задачи, где классические методы, включая ML, не справляются из коробки на 100%, как их ни настраивай. Модуль dnn прекрасен, но архитектура сети зачастую должна уже быть ваша, еще несколько лет назад нельзя было просто условный AlexNet взять и сидеть радоваться. Или прод такой сложный у нас, я не знаю. Я только лишь о том, что надо самому потрудиться над задачей.
Ну… Могу лишь сказать, что по нашему опыту — и в OpenVino и в TensorRT неплохо можно переносить кастомные архитектуры, если нет там совсем уже хитрых слоёв (да и их можно с большей болью перенести).
Года полтора назад всё хуже было. А сейчас если конвертится в ONNX — скорее всего заработает.
Нужно ли делать инференс на OpenVino? У нас есть задачи где так и делается. НО не уверен что это везде применимо.
Это в том числе вступление в область бюджетов на проект. Если разработчику сейчас могут выдать все железки, какие есть на современном рынке и сказать: «Давай, работай, сравнивай, где быстрее», это будет счастливый разработчик.

На случай если нет железок, то у Интел есть DevCloud: https://devcloud.intel.com/edge/ (Xeon, Atom, Core, FPGA, VPU, HDDL).

Вы верно говорите, если речь идет о pet project. Я больше про прод и про тот программно-аппаратный комплекс, который поставляется как решение. Разработчик редко решает единолично, какое железо будет поставляться. К тому же, размещение самостоятельно разработанных архитектур в стороннем месте может быть неприемлемым. Попробовать что-то не очень значимое — да, почему бы нет, сравнить с производительностью на NVIDIA заодно. Intel сейчас очень борется за рынок, но он пока не монополист.

Не совсем понял мысль. На то он и удаленный доступ к железу чтобы сделать измерения и сравнить производительность, стоимость, энергопотребление. Разработчику не приобретут всех конфигураций на руки потому что он выберет только одну в итоге. Тут — зашёл и замерил.

Зайти и замерить можно, если заливание аудио- или видеоматериалов на сторонний ресурс не противоречит политике сохранности этого самого ресурса. Бывает, что заливать нечего, потому что материал для тестирования весь не подлежит распространению. Тогда у себя иметь экземпляры железа. До кучи кину ссылку на похожий devcloud от NVIDIA, раз уж такая ветка начала разрастаться: www.nvidia.com/en-us/data-center/data-center-gpus/gpu-test-drive
Поддерживаю! OpenVINO потрясающая штука. Напилили в своё время SSD-детектор на MxNet, который должен был работать на машине без видеокарты, с быстродействием получилось всё очень печально. Сконвертили в onnx, кое-что пришлось переписать руками, но в результат превзошёл все ожидания — раза в 2 производительность выросла, грубо говоря со 150 мс на детекцию до 70 с небольшим при том же качестве! Так что да, интел молодцы!
В статье было упомянуто использование LSTM. А не было попыток использования Transformer?)
Мне кажется, что пока единственный удачный эксперимент в применении Transformer к картинкам был вот этот — arxiv.org/pdf/2005.12872.pdf (я даже по его поводу небольшую статью накатал — cv-blog.ru/?p=310 )
Трансформер всё же достаточно большой и нетривиальный. Подкатывать его ради минимального улучшение точности можно только если это какая-то уже хорошо вылизанная задача. Чтобы получить последние единицы точности. Его и прикрутить сложно. И обучить. И датасет должен быть огромным.
Я думаю что такие статьи уже появились, или вот-вот должны появиться. Но смысла использовать в продакшне такие эксперименты первое время точно не будет.
Мне кажется, что пока единственный удачный эксперимент в применении Transformer к картинкам был вот этот — arxiv.org/pdf/2005.12872.pdf (я даже по его поводу небольшую статью накатал — cv-blog.ru/?p=310 )


А Repulsion Loss (21 Nov 2017) / CVPR 2018 arxiv.org/abs/1711.07752v2 или Soft-IoU layer (CVPR 19) arxiv.org/abs/1904.00853v3 потом не пробовали для обнаружения в толпах?
Мы с этой задачей сталкивались в конце 16-начале 17 года в первый раз, месяца два потратили. И где-то в середине 17ого второй раз, месяца за три сделали, там было больше задач.
Это ещё до появления этих статей.
И там и там сделали вполне рабочий бизнес прототип который позволял внедрить его в бизнес. В одной фирме, как я слышал, следующие года два вообще ничего не меняли, у них даже не было на поддержке специалистов по DL. Во второй активно развивали, но вроде основная структура тоже пару лет продержалась. Может быть потом они что-то аналогичное вкрутили, но мы им только другие части продукта помогали развивать.

Статьи хорошие, сейчас если бы хоть по одной был пример исходников — взял бы пробовать в первую очередь. Но сейчас выбор есть. Я часто натыкался на сети/подходы которые могут решить эту задачу.
Плюс тут есть ещё такая штука. Мы в своих работах обычно не занимаемся большим ресёрчем. У нас в большинстве своём не очень большие, ограниченные договора, в рамках которых надо максимально быстро сделать прототип. Мы стараемся максимально заложить в договор разные вариации на случай если что-то не будет работать, но сверять 5-6 сетей обычно сил и рук нет. Обычно берём 2-3 подхода, которые выглядят наиболее перспективными. И как только на каком-то достигаем продуктовой точности — останавливаемся, решаем другие вопросы эксплуатации.
image
Есть одна практическая задача, которую, наверное, никто не решал, но она не перестает быть интересной.
В прыжках с парашютом есть дисциплина — Wingsuit формации, когда несколько человек прыгают в Wingsuit-ах.
В этой дисциплине устанавливаются свои рекорды — по количеству человек. Но здесь важно не просто собрать как можно больше людей, но и сделать так, чтобы каждый летел в своём секторе.
Только когда это случилось рекорд считается установленным.
Фиксируется это так — все выпрыгивают из самолета, над формацией летит оператор и снимает весь полет сверху.
Затем специально обученные люди просматривают видео кадр за кадром и пытаются наложить сверху сетку так, чтобы не было пересечений линий людьми.
Такие просмотры могут быть очень долгими, а не заметить какой-нибудь случайный кадр — легко. В итоге уходит драгоценное время на повторные попытки, и высок риск упустить тот самый кадр.
Кажется, что задача складывается из нескольких — трекинг людей на движущемся фоне или распознавание на каждом кадре и установка сетки.
Это не про трекинг задача, а про детекцию всё же. Если детектор хорошо работает — то и не надо трекать. Если не работает — трекинг ничего нового не даст.
Но это и не суть. Сделать стабильное решение для такой задачи + запилить интерфейсы — может без проблем стоить несколько миллионов рублей. При этом 100% стабильного решения оно не даст + будет требовать человека на поддержку время от времени.
Как результат — такие проекты не окупаются.

Куда проще такие задачи делаются через понижение цены работы разметчика. Сделать разметку через Толоку, и всё. Это по цене и стабильности будет на порядок лучше нейронки, будет устойчивой к странным костюмом и кривой съёмке.
Но я думаю что даже это не выгодно будет.

Может быть теперь понятно почему selfdriving cars в продакшн никогда не будет.

Я по работе столкнулась с computer vision. Ранше как-то эта тема меня не затрагивала) Статья не для такого новичка, как я, но мне понравилась. Порадовали ссылки на другие статьи с которыми можно ознакомится для лучшего понимания. Спасибо большое!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий