Базовый уровень 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 долларов за текущую задачу.