MMSegmentation представляет из себя инструментарий с открытым исходным кодом для работы с семантической сегментацией, основан на Pytorch. Данный проект позволяет получить доступ к множествам моделей для сегментации, как уже тренированными на датасетах, так и открытыми для запуска. В нём для каждого датасета прописывается отдельный класс модели, которая будет тренироваться на нём.
При
первых попытках посмотреть результаты готовых моделей были видны явные
недостатки на изображениях с датасетов Kitti и Mapillary. На изображениях с Kitti часто
пешеходы определялись неверно, область, обозначающая пешехода, охватывала
сильно большую площадь. При использовании Mapillary появлялись
очевидные проблемы в местах с сильным затемнением или тенью. Для тестирования использовалась
модель Deeplabv3+, тренированная на датасете CityScapes.
Изображения с датасета Kitti
Изображения с датасета Mapillary
Так
же были протестированы модели PSPNet,
но результаты так же были неудовлетворительными.
Была
предпринята попытка тренировать модель на подготовленных датасетах с нуля. Но данный
инструментарий оказался не удобным для этого. Каждый класс для работы с датасетом прописывается по шаблону,
который не подходит для работы с датасетами Kitti и Mapillary. Так же нужно
описывать новую модель для каждого датасета, а так как мы тренируем на
изображениях из сразу трёх датасетов, то мы не имеем возможности
предоставить правильную обработку для изображений и для масок.
При
тестировании возможности использовать модель, описанную в MMSegmentation, в нашем пайплайне также возникли проблемы. Одной
из них является то, что в классе из MMSegmentation для выполнения
функции forward требуется
два аргумента: изображения и img_metas --
список параметров изображения.
Пример объявления класса модели
Для
улучшения сегментации было решено тренировать одну из нейронных сетей,
представленных в MMSegmentation, с нуля. Для этого
была выбрана модель DeepLabv3+.
Данная модель является улучшением модели DeepLabv3,
которая использует spatial pyramid pooling module,
с помощью структуры энкодер-декодер и Atrous Conv.
Atrous convolution является
мощным инструментом, который позволяет нам явно контролировать разрешение
признаков, вычисленных глубокими сверточными нейронными сетями и настройка
поля зрения фильтра для сбора многоуровневой информации, обобщая стандартную
операцию свертки.
Способы работы spatial pyramid pooling, энкодер-декодер и Atrous Conv
Модуль энкодера кодирует многоуровневую контекстную информацию посредством применения Atrous Conv в нескольких масштабах, в то время как простой, но эффективный декодер уточняет результаты сегментации вдоль границ объекта.
Пример использования модели на изображении.