Comments 52
Что показывает синий график? Ошибку? А как изменяется синий график при сведении и разведении моста?
Может быть применив какую-либо фильтрацию удастся определить, что мост начал сводиться или разводиться? Это частично позволит решить проблему глюков видеокамеры. Ведь зная предыдущее состояние моста (а если синий график зеркально отражается относительно вертикальной оси при сведении/разведении моста то можно и без этого) и текущее направление движения, а так же среднее время сведения моста + запас можно с 90% предсказать текущее положение (открыт или закрыт)
По-честному ещё стоит, конечно, отслеживать, что камеру не повернули, и что она смотрит в тот же ракурс, на котором бот обучался.
Вопрос про запас и вероятность я не понял. Глюки видеокамеры обычно выражаются либо в нескольких мусорных кадрах либо в полной её недоступности.
У меня пара вопросов:
1. Информационный робот всё время работал на вашем ноутбуке? Не было желания перенести его на выделенный сервер?
2. Видно ли мост Александра Невского на фоне неба? Просто фото на «веб-мордочке» довольно мыльное, я мост не сразу нашел, чего уж про робота говорить)
2. Плохо, но обычно видно. Если очень интерено, могу поделиться датасетом.
Я тоже далёк от нейронных сетей, поэтому интересно — не будет ли эффективнее не «изучать» картинку как таковую, а сличать картинки в периоде 1-3-5-10 минут (или сколько там уходит на сведение моста) и определять что-то вроде «на протяжении нескольких часов картинка была одна, а сейчас произошло изменение, скорее всего, мост свели»?
Я взял RGB значения цвета неба над мостом в разные моменты времени за всю ночь и нарисовал их точками на диаграмме. Хорошо видно, что цвет неба имеет разрыв — в какой-то момент он меняется скачком. Кажется, этот момент соответствует выключению городского освещения :-)
Возможно, оперативную информацию можно узнавать в Мостотресте. К середине дня они уже должны представлять сколько судов пойдет ночью.
Вообще, удивительно что никто ещё не сделал сервис, показывающий текущее состояние мостов. Ведь это давняя и насущная проблема.
Во-вторых при заданной камере движение объектов задано по кадру (кораблики по мосту не едут)
В-третьих, задача фиксация движения давно решена в системах безапасности — на всякий случай даю ссылку http://www.codeproject.com/Articles/10248/Motion-Detection-Algorithms
Вот поэтому вы и предлагаете нелепый вариант, про обнаружение автомобилей, т.к. вы это уже делали.
Однако это выглядит нелогичным и ненужным усложнением. Определение по картинке — поднят ли мост, или опущен выглядит гораздо проще, чем определение — есть ли автомобили, и автомобили ли это. Тем более, машин может не быть ВООБЩЕ, а мост стоять (особенно, в предразводное время, т.к. все кому надо уже проехали, остались те, кто рассчитывает на авось).
если его через 10 минут разводить будут
Обычно въезд на мост закрывают аккурат по расписанию. Польза робота только в ночной сводке.
перекрыт, но сведён (как было, когда его ремонтировали)
Об этом обычно есть оперативные данные, которые навигаторы публикуют. Вот, например, сейчас ремонтируют Тучков мост и на мосту в Яндекс.Картах нарисовано одностороннее движение:
Со следами от стоп-сигналов вот ещё какая беда есть: если машина ошибается (а я не слишком высокого мнения о своих умениях в задачах распознавания), то по контуру моста человек может перепроверить машину. По следам стоп-сигналов это сложнее.
В статье, там примерно четыре строчки кода :-) Вся содержательная часть — это преобразование картинки в вектор фич, которыми потом кормится классификатор с дефолтными параметрами. Но несложно продублировать:
def load_dvorcovy_vpiter_admiral(fname):
feat = feature.canny(color.rgb2gray(io.imread(fname)[40:360, 110:630]), sigma=2)
feat = transform.downscale_local_mean(feat, (20, 20))
assert feat.shape == (16, 26)
return feat.reshape((np.prod(feat.shape), ))
- А всё-таки хотелось бы увидеть какие-нибудь циферки, оценивающие точность модели. LogLoss, accuracy, ROC_AUC, и т. д,
- Если поделитесь размеченными изображениями(больше — лучше) готов поиграться со свёрточными сетями, и рассказать, что из них для этой задачи можно получить.(ну и код, понятно, выложить)
Интересно поиграться с нейронными сетями было бы в случае, если была бы размеченная база из многих мостов (желательно с разными конфигурациями). Но при этом не забывайте, что один из немногих плюсов свёрточных нейросетей для компьютерного зрения — это устойчивость к translation, rotation и shifting. Если у вас примерно одинаковые картинки с примерно одинакового ракурса — нет особенного смысла их использовать.
С мостом Александра Невского с наскоку не получилось, там качество картинки на голову хуже. Там я составлял выборку следующим образом: захватывал видеопоток с 0:00 до 8:00, нарезал его на блоки по 5 минут, размечал блоки на UP/DOWN/MOV, где в MOV попадали два блока соответствующие началу и концу движения моста. Проще говоря, факт разводки порождал такую последовательность блоков
…, down, down, down, mov, mov, up, up, up, …
. После этого из всех блоков одного класса я брал ~1000 кадров за кажду ночь и превращал их в фичи.Качество оценивал разделяя выборку по времени, первые 20 дней в train, 5 в test и 5 в валидационную выборку. По валидации настраивал кроп. Полагаю, разный кроп даёт заметно разные результаты, т.к. рядом с мостом стоит фонарь, который светит прямо в камеру, и из-за этого пороги у `canny` могут получаться бестолковые. Наверное, вместо кропа можно было точно так же пороги подбирать. Когда делал кросс-валидацию по дням, оценка качества получалась завышенной. С одной стороны это понятно (мы учимся на данных «из будущего»), с другой — не очень (чем данные «из будущего» отличаются-то). Этот процесс тоже дал F-меру 0.99+.
Блоки mov я для обучения текущей модели не использовал, а использовал их только для рисования графика «процесс разводки глазами классификатора», чтоб визуально оценить скорость реакции модели на изменение моста. По этому графику я настраивал размер «кворума». Робот отсылает сообщение в telegram только тогда, когда в последних N кадрах было больше двух третей голосов за одно из двух состояний. Этим действием я сглаживал возможный шум в момент переходного процесса — спамящий о своей неуверенности робот мне довольно быстро показался весьма неприятным.
Про датасеты. Размеченных руками у меня сейчас только 3 Gb jpeg-ов Александра Невского, с 2016-06-19 по 2016-07-24. Можно породить ещё разметку классификатором для Ал.Не. и Дворцового за последние две недели, там flv-шки и их сильно больше: 28G с Дворвоцого и 53G с Александра Невского. Есть ещё поворотная камера, которая смотрит на мост лейтенанта Шмидта (две задачи по цене одной — понять, что сейчас на камере нужный мост и понять его состояние) и Литейный, по которому машины ездят, а разводной секци не видно. Что из этого интересно?
Есть вот такой сборник jpeg-ов: http://darkk.net.ru/garbage/dataset-for-mittov.tar.torrent Kaiser сказал, что вечером может посидить.
"Всего и побольше" — мне выкладывать некуда пока.
vpiter.tv
в коде для читаемости оставлял, ещё думал, почему же в вёрстке IP-адрес напрямую зашит.Кстати, нет планов у вас робота моего забанить по какой-либо причине? :-) Я писал о нём на info at vpiter.com, но ответа там никакого не получил, и решил, «если баннер не вырезать и ссылку оставить, то, наверное, пока ок, а там видно будет».
И главное — хорошая демонстрация — быстро разработанному «на коленке» вполне себе нормальному сервису… который возможно будет жить не один год и приносить реальную помощь людям.
А критика — интересна как идеии на другие решения и апгрейд существующего.
стильно, модно, молодёжно
Так речь как раз о том, что можно обойтись простейшей линейной моделью, которая "нейронная сеть" лишь формально (один нейрон).
преобразование Хафа
Я о таком слове попросту не знал, никогда не занимался обработкой изображений, в этом и был посыл статьи — можно сделать ненулевую пользу почти не разбираясь, абсолютно "на коленке" :-)
Но да, когда прикручивал мост Александра Невского, я думал об извлечении более сложных фич, собирался начать как раз с угла наклона — но тот же способ с canny(rgb2blue(crop(raw)))
успел дать пристойные результаты попросту на большем количестве данных раньше, чем я в режиме "по вечерам" успел разобраться в вопросе получше.
Сколько нужно нейронов, чтобы распознать сводку моста?