Comments 26
— Робот едет со скоростью 10 см/с.
— Робот «видит» на 1 метр вперёд.
— Робот распознал, что 50 сантиметров перед ним — точно (вероятность выше определённого порога) является ровной дороги.
— Через секунду он фотографирует пространство впереди (глубиной 1 метр), но пытается распознать не всю фотографию, а только то пространство, которое не является точно распознанным (в данном примере — 40 сантиметров).
Насчёт быстродейсвия — все сегментационные сети достаточно медленные, тем более на проце. Можно попробовать intel movidus stick, думаю, на нем получится пара fps, а то и больше. Либо попробовать раза в 4 уменьшить размер входа нейросети.
А насчёт разницы между u- и e-net, думаю, для такого прототипа она вообще не принципиальна. Можно опять же поискать модификации с меньшим количеством слоев. Я когда-то решал задачу сегментации с помощью Segnet, находил годную cpu-реализацию (чуть больше информации тут )
Танк маленький, камера слишком низко находится. Размер танка не соответствует размеру дороги.
Обученная модель подойдет только для такого размера машин.
Так что низкую высоту камеры эта сеть должна решать (что она в общем-то и делает).
Модели обычно обучают с большой вариативностью по размеру, положению, цвету итд.
Так делают все, кто обучает автопилоты?
Это все равно что обычный автомобиль обучать по не размеченному плацу или аэродрому. Чему он там обучится? Не выезжать за пределы плаца или аэродрома?
К тому же, обучать танк ездить только по дорогам — плохая идея :)
Все работает из коробки с 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 оттуда, вдруг забыли какие-то флаги оптимизации выставить). Поэтому вариант с уменьшением размеров картинки в несколько раз, как по мне, пока наиболее перспективный.
На всякий случай,
Описания: https://github.com/opencv/open_model_zoo
Сами модели: https://download.01.org/opencv/2019/open_model_zoo/R1/models_bin/
Я бы сказал, что ускорение даже должно быть. То, что вес модели меньше в 4 раза — это хорошо, но не главное.
Модели обучаются в FP32 режиме — для создания INT8 веса квантизуют, с учетом активаций нейронов (назвали калибровкой). Потребуется 1-2 тысячи картинок-примеров из вашей задачи, чтобы собрать статистики.
Распознавание дороги посредством семантической сегментации