Базовый уровень SpaceNet 5 - Часть 1: Подготовка изображений и этикеток
Предисловие: SpaceNet LLC - некоммерческая организация, деятельность которой направлена на ускорение прикладных исследований с открытым исходным кодом и искусственного интеллекта для геопространственных приложений, в частности, фундаментального картографирования (т. е. обнаружения следов зданий и дорожных сетей). SpaceNet работает в сотрудничестве с CosmiQ Works, Maxar Technologies, Intel AI, Amazon Web Services (AWS), Capella Space и Topcoder.
Еще есть много времени, чтобы принять участие в SpaceNet 5 Challenge, цель которого - определить время в пути по дорогам непосредственно по спутниковым снимкам. В поддержку этой довольно сложной задачи в этом посте читатели проходят этапы, необходимые для подготовки данных для первого шага в нашей базовой линии: создания обучающих масок для модели сегментации глубокого обучения. Код для воспроизведения процессов, описанных ниже, доступен в нашем репозитории CRESI на github.
1. Доступ к данным
Доступ к данным SpaceNet бесплатный и требует только создания учетной записи AWS. Для начала мы загрузим данные как для SpaceNet 3, так и для SpaceNet 5. Пример команды загрузки показан ниже (дальнейшие инструкции см. В spacenet.ai).
aws s3 cp s3://spacenet-dataset/spacenet/SN5_roads/tarballs/SN5_roads_train_AOI_7_Moscow.tar.gz /path/to/data
2. Установка CRESI
Система извлечения дорог из спутниковых изображений в масштабе города (CRESI) была разработана для извлечения дорог и оценок скорости в крупном масштабе, но одинаково хорошо работает с небольшими чипами изображений SpaceNet 5 Challenge. Для запуска CRESI вам понадобится докер (в идеале версия nvidia-docker), установленный на машине с графическим процессором. Все команды CRESI должны выполняться в этом контейнере докеров.
A. Скачать:
cd /path/to/cresi/ git clone https://github.com/avanetten/cresi.git
Б. Создайте образ докера:
cd /path/to/cresi/docker nvidia-docker build — no-cache -t cresi_image .
C. Создайте контейнер докера:
nvidia-docker run -it — rm -ti — ipc=host — name cresi_container cresi_image
D. Прикрепите док-контейнер:
docker attach cresi_container
3. Подготовить изображения
Форматы данных SpaceNet 3 и SpaceNet 5 немного отличаются из-за дополнительной постобработки изображений SpaceNet 5. Трехполосное изображение RGB с панорамированием (PS-RGB) для SpaceNet 3 распространялось в собственном 16-битном формате данных. В SpaceNet 5 3-полосные изображения RGB с панорамированием использовали продукт Maxar DRA (Dynamic Range Adjusted), который пытается уравновесить цветовые шкалы и дает 8-битное изображение. 8-полосные мультиспектральные изображения с панорамированием резкости (PS-MS) подготовлены одинаково для обеих задач, поэтому мы будем использовать эти данные для обучения и тестирования.
Хотя мы теряем значительный объем информации, используя только подмножество мультиспектральных полос, для простоты исследования мы извлекаем 8-битные изображения RGB из 16-битных мультиспектральных изображений, где RGB соответствует полосам 5, 3, 2, соответственно. . Это выполняется с помощью сценария create_8bit_images.py. В этом примере мы изменяем масштаб изображения до 2-го и 98-го процентилей значений пикселей при преобразовании в 8-битные. Приведенный ниже сценарий следует запустить для всех 6 областей обучения (AOI): AOI_2_Vegas, AOI_3_Paris, AOI_4_Shanghai, AOI_5_Khartoum, AOI_7_Moscow, AOI_8_Mumbai.
# SN3 python /path/to/cresi/cresi/data_prep/create_8bit_images.py \ — indir=/path/to/data/SN3_roads/AOI_4_Shanghai/PS-MS \ — outdir=/path/to/data/cresi_data/8bit/PS-RGB — rescale_type=perc \ — percentiles=2,98 \ — band_order=5,3,2 # SN5 python /path/to/cresi/cresi/data_prep/create_8bit_images.py \ — indir=/path/to/data/SN5_roads/AOI_7_Moscow/PS-MS \ — outdir=/path/to/data/cresi_data/8bit/PS-RGB \ — rescale_type=perc \ — percentiles=2,98 \ — band_order=5,3,2
4. Тренировочные маски
Папка geojson_roads_speed в каталоге каждой области интереса (AOI) содержит метки осевой линии дороги вместе с оценками безопасной скорости движения для каждой дороги (см. Здесь для получения дополнительной информации). Мы будем использовать эти метки осевой линии и оценки скорости для создания тренировочных масок. Мы предполагаем, что буфер маски составляет 2 метра, что означает, что каждой проезжей части назначена общая ширина 4 метра. Помните, что цель нашего этапа сегментации - определить осевые линии дороги, поэтому, хотя это не точная ширина дороги, буфер в 2 метра является подходящей шириной для нашей модели сегментации. Мы исследуем два варианта: непрерывные маски и многоканальные маски.
4.1 Непрерывные маски
Одним из вариантов обучения модели сегментации является создание обучающих масок, в которых значение маски пропорционально скорости проезжей части. Это можно сделать, запустив сценарий speed_masks.py. В следующем примере предполагается, что данные были загружены в каталог / data. Выходы показаны на рисунке 3.
# SN3 python /path/to/cresi/cresi/data_prep/speed_masks.py \ -geojson_dir=/data/SN3_roads/AOI_2_Vegas/geojson_roads_speed \ -image_dir=/data/SN3_roads/AOI_2_Vegas/PS-MS \ -output_conversion_csv= /data/cresi_data/cresi_train/SN3_roads_train_speed_conversion_continuous.csv \ -output_mask_dir= /data/cresi_data/cresi_train/train_mask_continuous \ -buffer_distance_meters=2 # SN5 python /path/to/cresi/cresi/data_prep/speed_masks.py \ -geojson_dir=/data/SN5_roads/AOI_7_Moscow/geojson_roads_speed \ -image_dir=/data/SN5_roads/AOI_7_Moscow/PS-MS \ -output_conversion_csv= /data/cresi_data/cresi_train/SN5_roads_train_speed_conversion_continuous.csv \ -output_mask_dir= /data/cresi_data/cresi_train/train_mask_continuous \ -buffer_distance_meters=2
4.2 Многоканальные маски
Второй вариант обучения модели сегментации - это создание многоканальных тренировочных масок, в которых каждый канал соответствует диапазону скорости. В приведенном ниже сценарии мы производим бункеры с шагом 10 миль в час, всего 7 бункеров. Мы также добавляем общую двоичную маску (как мы увидим позже, это помогает при начальном извлечении дороги), всего 8 ячеек.
# SN5 — binned python /path/to/cresi/cresi/data_prep/speed_masks.py \ -geojson_dir=/data/SN5_roads/AOI_8_Mumbai/geojson_roads_speed \ -image_dir=/data/SN5_roads/AOI_8_Mumbai/PS-MS \ -output_conversion_csv= /data/cresi_data/cresi_train/SN5_roads_train_speed_conversion_binned.csv \ -output_mask_dir=/data/cresi_data/cresi_train/train_mask_binned -output_mask_multidim_dir= /data/cresi_data/cresi_train/train_mask_binned_mc -buffer_distance_meters=2
5. Выводы
В этом посте мы продемонстрировали, как приготовить тренировочные маски для испытания SpaceNet 5. Выходные данные сценариев, упомянутых в этом посте (доступных в этой записной книжке), могут быть переданы непосредственно в модель сегментации глубокого обучения. Следите за обновлениями, чтобы увидеть следующий пост, посвященный этому этапу сегментации, и не стесняйтесь попробовать свои силы в призовом фонде в 50 000 долларов за текущую задачу.