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

Распознавание дороги посредством семантической сегментации

Время на прочтение4 мин
Количество просмотров9.7K
Всего голосов 15: ↑14 и ↓1+13
Комментарии26

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

Чисто теоретически, может быть записывать в память уже хорошо распознанные участки и не пытаться их распознать, а распознавать только «новое»?
А как отличить «хорошо распознанное» от «нового»?
То, что уже на прошлых кадрах было понято как дорога и препятствие. Не могу сформулировать мысль теоретически, попробую привести сильно упрощённо на конкретном примере:
— Робот едет со скоростью 10 см/с.
— Робот «видит» на 1 метр вперёд.
— Робот распознал, что 50 сантиметров перед ним — точно (вероятность выше определённого порога) является ровной дороги.
— Через секунду он фотографирует пространство впереди (глубиной 1 метр), но пытается распознать не всю фотографию, а только то пространство, которое не является точно распознанным (в данном примере — 40 сантиметров).

Предлагаете распознавать частично? Все равно большее значение имеет разрешение картинки.

Прощу прощения, что ответом на сообщение, комментарий оставить видимо карма не позволяет.

Насчёт быстродейсвия — все сегментационные сети достаточно медленные, тем более на проце. Можно попробовать intel movidus stick, думаю, на нем получится пара fps, а то и больше. Либо попробовать раза в 4 уменьшить размер входа нейросети.
А насчёт разницы между u- и e-net, думаю, для такого прототипа она вообще не принципиальна. Можно опять же поискать модификации с меньшим количеством слоев. Я когда-то решал задачу сегментации с помощью Segnet, находил годную cpu-реализацию (чуть больше информации тут )
Интересно, изучу

Танк маленький, камера слишком низко находится. Размер танка не соответствует размеру дороги.

Как это мешает?

Обученная модель подойдет только для такого размера машин.

Модели обычно обучают с большой вариативностью по размеру, положению, цвету итд.
Так что низкую высоту камеры эта сеть должна решать (что она в общем-то и делает).
Модели обычно обучают с большой вариативностью по размеру, положению, цвету итд.

Так делают все, кто обучает автопилоты?
Это все равно что обычный автомобиль обучать по не размеченному плацу или аэродрому. Чему он там обучится? Не выезжать за пределы плаца или аэродрома?
К тому же, обучать танк ездить только по дорогам — плохая идея :)

Пока только по тротуару, дальше — по мере роста потребностей.

У ENet есть одна неприятная особенность, связанная с обучением на Cityscapes — на всех изображениях присутствует фрагмент капота Mercedes, отчего, можно заметить, сеть продолжает выделять на всех Ваших примерах полукруг как background внизу кадра.

Ну как бы есть же, чем иначе объяснить влечение сети оставлять пиксели снизу, но не слева, например?


Может быть и ваша правда, я списывал это на неоднородность асфальта.
Я для своих экспериментов просто использовал вот этот проект github.com/kwotsin/TensorFlow-ENet
Все работает из коробки с CamVid, при этом разрешение картинки можно задать в настройках (я потратил минут 20 на все), можно скачать предобученную модель.
Можно использовть свой датасет.

Но, если хотите высокий FPS возьмите модель Road Segmentation из openVino и используйте ее, она хорошо обучена и очень быстрая (у меня на одном ядре I7 работает в реалтайме, правда с Inference Engine). Не знаю, работает ли IE на вашей платформе, но если работает, то 3-4 fps должна выдать. Эта модель больше подходит для вашей задачи. Крмое этого, можете в модели уменьшить число классов до 2-х, этим вы сократите расходы времени CPU на обработку не нужных вам feature maps и тогда сеть будет работать быстрее. В репозитории OpenVino Zoo есть и варианты с int8 моделями, которые на CPU работают еще быстрее.
интересно, спасибо. Этот проект не попался изначально.

Все же автор использует Raspberry, где ARM CPU. OpenVINO подойдёт разве что для запуска на Movidius (ну или попробовать OpenCV оттуда, вдруг забыли какие-то флаги оптимизации выставить). Поэтому вариант с уменьшением размеров картинки в несколько раз, как по мне, пока наиболее перспективный.

К сожалению, Интел так документирует свои продукты, как будто преследует цель, чтобы ими никто не пользовался. Так что про Road Segmentation сразу не понял.
Будет что поизучать, спасибо
Пользуясь случаем хочу спросить насчет предобученных моделей Intel Zoo. У меня наблюдалось некоторое ускорение int8 моделей по сравнению с fp32. Там есть какие-то оптимизации для CPU вроде SIMD или у меня наблюдался эффект ускорения, связанный с уменьшением модели и более эффективным использованием кэша? На каких датасетах эти модели обучали? Можно ли взять модель, обучить на своем, а потом при помощи Model Optimizer сделать оптимизированную модель и запустить на IE?

Я бы сказал, что ускорение даже должно быть. То, что вес модели меньше в 4 раза — это хорошо, но не главное.
Модели обучаются в FP32 режиме — для создания INT8 веса квантизуют, с учетом активаций нейронов (назвали калибровкой). Потребуется 1-2 тысячи картинок-примеров из вашей задачи, чтобы собрать статистики.

Просто для информации (упоминался DonkeyCar) — Amazon запустил проект/сообщество AWS DeepRacer. Примерно похожая задача. Только трассы предопределённые.

Насколько я помню, у него все расчеты в облаке AWS должны быть.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации