Sergey1985 0 Report post Posted September 5, 2018 Доброго времени суток. Возникла задача определения мостов на картах Google и же с ними. (разумеется средствами OpenCV) Хотелось бы послушать мнение компетентных людей на сей счет. Какие идеи и общие принципы решения данной задачи Вы видите? Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted September 5, 2018 Все современные подходы к таким вещам сводятся к использованию нейросетей. Если интересует сегментация мостов, то архитектура типа Unet. Если детектирование прямоугольника, то SSD, RetinaNet, Faster RCNN, YOLO. Share this post Link to post Share on other sites
Sergey1985 0 Report post Posted September 5, 2018 Я к сожалению очень далек от нейросетей. С трудом вообще представляю что это такое. А то что касается OpenCV то думаю может быть использовать контурный анализ или использовать тот факт что река как правило всегда самая темная полоса получается и на этой темной полосе искать более светлую перпендикулярную полосу. Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted September 5, 2018 Ну, пробовать можно. В любом случае этот процесс должен начаться со сбора датасета, разметки и т.д. Раньше работать над алгоритмом смысла нет. Share this post Link to post Share on other sites
idrua 8 Report post Posted September 5, 2018 Бегло глянул на карты Google. Цвет речки всегда одинаковый. Возможно, выделение по цвету и дальнейший поиск прямых линий что-то даст. А вообще, конечно, более простой способ это UNet в нейросетях. Достаточно просто собрать датасет, НС сама найдет фичи и выделит мосты. Share this post Link to post Share on other sites
Sergey1985 0 Report post Posted September 5, 2018 А где можно почитать про нейросети и про UNet в частности что - нибудь из рубрики ДЛЯ ЧАЙНИКОВ Share this post Link to post Share on other sites
idrua 8 Report post Posted September 5, 2018 18 минут назад, Sergey1985 сказал: А где можно почитать про нейросети и про UNet в частности что - нибудь из рубрики ДЛЯ ЧАЙНИКОВ Это достаточно новая архитектура. Если не ошибаюсь в 2015 изобрели, а в 2016 начали активно использовать. Поэтому с чтением на русском вообще беда. Далее. Все эти вещи писаны на Python и только. По шагам это выглядит так: изучаем Python, изучаем азы сверточных нейронных сетей, покупаем или арендуем GPU — аллилуйя. Можно вообще ничего не изучать, а найти на гитхабе или кагле примеры и использовать. Но это тяжело, не зная языка и прочих вещей что-либо делать. 3 часа назад, Nuzhny сказал: Все современные подходы к таким вещам сводятся к использованию нейросетей. Если интересует сегментация мостов, то архитектура типа Unet. Если детектирование прямоугольника, то SSD, RetinaNet, Faster RCNN, YOLO. Серега , все хочу спросить, а ты не переписывал на плюсы подобные архитектуры? Насколько этот процесс трудоемок? Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted September 5, 2018 22 minutes ago, idrua said: Серега , все хочу спросить, а ты не переписывал на плюсы подобные архитектуры? Насколько этот процесс трудоемок? Тут правильно было бы спросить: использовал ли я их в проекте, написанном на С++? Ответ: да. Но тут 2 этапа: Выбор архитектуры, обучение, всякие графики - это всё делалось на Питоне. Сама работа обученной сети или inference. Да, это делал на С++ и сейчас делаю. 2.1. В первом приближении практически всё можно запускать с помощью средств OpenCV - opencv_dnn. В нашем совместном проекте Multitarget-tracker детекторы так и работают: и resnet, и MobileNet, и YOLO... Не всё идеально, но запускается и результат выдаёт, но только на CPU или Intel GPU. 2.2. TensorFlow имеет хорошее C++ API, в проектах мы его используем вместе с OpenCV, которым предварительно обрабатываем видео. Обучение и тренировка сети на Питоне. 2.3. Ранее использовал Caffe, там тоже всё отлично. 2.4. Использовал и видел многие проекты, которые включают в себя код darknet и обученный под себя YOLO. Там всё достаточно просто, примеры в нём самом есть. 2.5. Ещё знаю, что нормальный С++ API есть у Caffe2 и MxNet, но с ними опыта не было. Share this post Link to post Share on other sites
idrua 8 Report post Posted September 5, 2018 19 минут назад, Nuzhny сказал: Сама работа обученной сети или inference. Да, это делал на С++ и сейчас делаю. Т.е. обучаешь ты на Python, а inference на плюсах. Я правильно понял? Ок. Даже если так, то как добыть из файла h5 весовые коэффициенты. Где-то описан формат файла? А были модели на Keras в обучении? Выходной файл обученной модели отличается чем-то для TF и Keras? Share this post Link to post Share on other sites
Nuzhny 243 Report post Posted September 5, 2018 10 minutes ago, idrua said: Т.е. обучаешь ты на Python, а inference на плюсах. Я правильно понял? Да, именно так. 10 minutes ago, idrua said: Ок. Даже если так, то как добыть из файла h5 весовые коэффициенты. Где-то описан формат файла? А были модели на Keras в обучении? Выходной файл обученной модели отличается чем-то для TF и Keras? h5 у нас не водится, tensorflow::SavedModel сохраняет в *.pb, то есть бинарный protobuf. Модели в Керасе тоже обучали и использовали, но уже не вспомню как. Сейчас же Керас уже стал часть TensorFlow (его исходники в репозитории TensorFlow), возможен взаимный вызов из одного методов другого. Точно помню, что проблем с этим не было. Share this post Link to post Share on other sites