Представляем YOLTv4: улучшенное обнаружение объектов на спутниковых изображениях

Масштабирование расширенного обнаружения объектов до произвольно больших спутниковых изображений

Предисловие: Хотя CosmiQ Works (и связанный с ним блог: The DownLinQ), к сожалению, закрыт, еще многое предстоит сделать в области геопространственной аналитики. Соответственно, в этом блоге подробно рассказывается о работе, выполняемой независимо от IQT и в мое свободное время.

В ряде предыдущих блогов [например, 1, 2, 3] и научные статьи [например, 4, 5, 6] мы продемонстрировали поразительную эффективность адаптации YOLO для обнаружения объектов на спутниковых снимках. Напомним, что YOLO - это ведущая платформа для обнаружения объектов глубокого обучения, предназначенная для обнаружения объектов на изображениях. YOLO максимально использует изображения размером в несколько тысяч пикселей, что слишком мало для обработки крупномасштабных спутниковых изображений, которые могут превышать 100 миллионов пикселей. Поэтому мы создали YOLT (и расширенный YOLT с SIMRDWN), чтобы оптимизировать эту структуру обнаружения объектов для спутниковых изображений произвольно большого размера.

Мы рады сообщить, что выпущена улучшенная версия YOLTv4, которая работает быстрее и производительнее. Код находится в открытом доступе по адресу github.com/avanetten/yoltv4. В разделах ниже мы подробно описываем этот новый репозиторий и приводим примеры результатов.

1. Введение

YOLTv4 разработан для быстрого обнаружения объектов на аэрофотоснимках или спутниковых изображениях на произвольно больших изображениях, которые намного превышают размер ~ 600 × 600 пикселей, который обычно используется структурами обнаружения объектов глубокого обучения. Этот репозиторий построен на впечатляющей работе реализации AlexeyAB YOLOv4, которая улучшает как скорость, так и производительность обнаружения по сравнению с YOLOv3 (который реализован в SIMRDWN). Мы используем YOLOv4 вместо YOLOv5, поскольку YOLOv4 одобрен первоначальными создателями YOLO, а YOLOv5 - нет; кроме того, YOLOv4, по-видимому, обладает превосходными характеристиками.

Таким образом, YOLTv4 сочетает в себе впечатляющую основу YOLOv4 со сценариями предварительной и постобработки SIMRDWN для создания улучшенной, более легкой альтернативы SIMRDWN. Напомним, что SIMRDWN позволяет пользователям выбирать из множества магистралей (например, YOLO, SSD, Faster-RCNN и т. Д.). Хотя такая гибкость весьма полезна, она раздувает кодовую базу; Более того, многочисленные исследования [5, 6] показали, что магистральные сети YOLO превосходят другие методы обнаружения объектов спутниковых снимков. Поэтому в YOLTv4 мы решили создать более простую кодовую базу и сосредоточиться только на магистрали YOLOv4.

Ниже мы приводим примеры того, как использовать этот репозиторий с набором данных Rareplanes с открытым исходным кодом.

2. Запуск YOLTv4

В этом разделе мы продемонстрируем, как обучать и тестировать YOLTv4 с использованием набора данных Rareplanes для локализации самолетов.

2.1. Установка

YOLTv4 создан для выполнения в контейнере докеров на машине с поддержкой графического процессора. Команда docker создает образ Ubuntu 16.04 с CUDA 9.2, python 3.6 и conda.

  1. Клонируйте этот репозиторий (например, в / yoltv4 /).
  2. Загрузите веса моделей в yoltv4 / darknet / weights (например, см .: https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.conv.137).
  3. Установите nvidia-docker.
  4. Создайте файл докера. nvidia-docker build -t yoltv4_image /yoltv4/docker
  5. Раскрутите контейнер докера (параметры см. В документации докера). nvidia-docker run -it -v /yoltv4:/yoltv4 -ti — ipc=host — name yoltv4_gpu0 yoltv4_image
  6. Скомпилируйте программу Darknet C. Сначала установите GPU = 1, CUDNN = 1, CUDNN_HALF = 1, OPENCV = 1 в / yoltv4 / darknet / Makefile, затем:
    cd /yoltv4/darknet
    make

2.2. Поезд

А. Подготовить данные

  1. Создавайте изображения и этикетки YOLO (дополнительные сведения см. В yoltv4 / notebooks / prepare_data.ipynb).
  2. Создайте текстовый файл со списком обучающих изображений.
  3. Создайте файл obj.names file с каждым желаемым именем объекта в отдельной строке.
  4. В каталоге yoltv4 / darknet / data создайте файл obj.data, содержащий необходимые файлы. Например, /yoltv4/darknet/data/rareplanes_train.data:
    classes = 30
    train = /local_data/cosmiq/wdata/rareplanes/train/txt/train.txt < br /> valid = /local_data/cosmiq/wdata/rareplanes/train/txt/valid.txt
    names = /yoltv4/darknet/data/rareplanes.name
    backup = backup
  5. Подготовьте файлы конфигурации.
    См. Инструкции здесь или настройте /yoltv4/darknet/cfg/yoltv4_rareplanes.cfg.

Б. Выполнить обучение

  1. Выполнить.
    cd /yoltv4/darknet
    time ./darknet detector train data/rareplanes_train.data cfg/yoltv4_rareplanes.cfg weights/yolov4.conv.137 -dont_show -mjpeg_port 8090 -map
  2. Просмотрите прогресс (см. Рисунок 1 ниже):

2.3. Тест

А. Подготовить данные

  1. Сделайте нарезанные изображения (дополнительные сведения см. В yoltv4 / notebooks / prepare_data.ipynb).
  2. Создайте текстовый файл со списком обучающих изображений.
  3. В каталоге yoltv4 / darknet / data создайте файл obj.data, содержащий необходимые файлы. Например, /yoltv4/darknet/data/rareplanes_test.data:
    classes = 30
    train =
    valid = / local_data / cosmiq / wdata / Redplanes / test / txt / test.txt
    names = /yoltv4/darknet/data/rareplanes.name
    backup = backup /

Б. Выполнить тестирование

  1. Выполнить (скорость ›80 кадров в секунду на Tesla P100):
    cd /yoltv4/darknet
  2. time ./darknet detector valid data/rareplanes_test.data cfg/yoltv4_rareplanes.cfg backup/ yoltv4_rareplanes_best.weights
  3. Постобработка обнаружений, сшивание изображений и построение графиков:
time python /yoltv4/yoltv4/post_process.py \
 — pred_dir=/yoltv4/darknet/results/rareplanes_preds_v0/orig_txt/ \
 — raw_im_dir=/local_data/cosmiq/wdata/rareplanes/test/images/ \
 — sliced_im_dir= /local_data/cosmiq/wdata/rareplanes/test/yoltv4/images_slice/ \
 — out_dir= /yoltv4/darknet/results/rareplanes_preds_v0 \
 — detection_thresh=0.25 \
 — slice_size=416 \
 — n_plots=8

3. Выходы

Результаты будут выглядеть примерно так, как на рисунках ниже.

4. Выводы

YOLTv4 очень эффективен и довольно быстр. На одном графическом процессоре Tesla P100 вывод происходит со скоростью ~ 2 квадратных километра в секунду даже при самом высоком разрешении 30-сантиметрового спутникового изображения. При такой скорости простой кластер из 4 ГП мог обрабатывать весь сбор WorldView-3 примерно в реальном времени. Так что не стесняйтесь использовать код, чтобы найти автомобили, лодки, инфраструктурные проекты, самолеты, здания или любые другие объекты, которые вам подходят.