В данной статье представлен рабочий процесс для автоматического обнаружения объектов на ортофотоплане. Рабочий процесс включает в себя использование предварительно обученной нейронной сети, которая позволяет автоматизировать обнаружение объектов. Несмотря на то, что сеть была обучена задачам обнаружения деревьев, ее можно настроить для обнаружения и других объектов (например, автомобилей, морских львов и т.д.) с помощью частично ручных аннотаций, вводящих новые типы объектов. Также предлагается создавать аннотации на небольших обласиях ортофотоплана, чтобы направлять нейронную сеть и оптимизировать ее работу для каждой конкретной задачи.

 

Для включения нейронной сети необходимо скачать и установить python-скрипт для версии Metashape Professional, который опубликован в репозитории detect_objects.pyоснованный на github.com/weecology/DeepForest..


Вам нужен графический процессор NVIDIA для ускоренной обработки (т.е. потребуется совместимый с CUDA графический процессор). Центральный процессор также поддерживается, но обработка на ЦП очень медленная по сравнению с обработкой с использованием графического процессора.


Содержание статьи:


Начиная с версии 2.0 и при использовании последней версии скрипта Вам не нужно устанавливать дополнительные библиотеки, они будут установлены автоматически во время работы скрипта. Последняя версия скрипта .


Как установить скрипт на Linux

1. Установите два пакета Python: pytorch с поддержкой CUDA и deepforest :

cd.../metashape-pro
 LD_LIBRARY_PATH=`pwd`/python/lib/ python/bin/python3.8 -m pip install albumentations==1.0.3 deepforest torch==1.9.0+cu111 torchvision==0.10.0 +cu111 torchaudio==0.9.0 -f
 
 https://download.pytorch.org/whl/torch_stable.html

2. Выполните шаги, описанные в этой статье, чтобы добавить скрипт в автозапуск. Другими словами, вам нужно скопировать скрипт detect_objects.py в /home/<username>/.local/share/Agisoft/Metashape Pro/scripts/

 

 

Как установить скрипт на Windows

1. Загрузите пакеты GDAL, Rasterio и Fiona (для Python 3.8 amd64, т.е. скачайте файлы  ..cp38‑cp38‑win_amd64.whl)


2. Запустите cmd.exe с правами администратора. Измените рабочий каталог на Downloads (куда были загружены библиотеки), выполнив следующую команду: 

cd %USERPROFILE%/Downloads

 

3. Установите пакеты один за другим. Вы можете загрузить последнюю версию каждого пакета, в приведенных ниже примерах команд установки показаны номера последних версий (оканчивающейся на "cp38‑cp38‑win_amd64.whl"), 

доступных на момент публикации статьи. Поэтому номера версий могут отличаться, когда будут доступны более новые версии: 

"%programfiles%\Agisoft\Metashape Pro\python\python.exe" -m pip install GDAL-3.4.2-cp38-cp38-win_amd64.whl 
"%programfiles%\Agisoft\Metashape Pro\python\python.exe" - m pip install rasterio-1.2.10-cp38-cp38-win_amd64.whl 
"%programfiles%\Agisoft\Metashape Pro\python\python.exe" -m pip install Fiona-1.8.21-cp38-cp38-win_amd64.whl

 

4. Установите два пакета Python: pytorch с поддержкой CUDA и deepforest

"%programfiles%\Agisoft\Metashape Pro\python\python.exe" -m pip install albumentations==1.0.3 deepforest torch==1.9.0+cu111 torchvision ==0.10.0+ cu111 torchaudio===0.9.0 -f https://download.pytorch.org/whl/torch_stable.html

 



Возможные ошибки при установке


  • возможно появление предупреждающих сообщений, как на скриншотах ниже, но их можно проигнорировать:


  • Также может появиться такое сообщение:

error: Microsoft Visual C++ 14.0 is required. Get it with "Build Tools for Visual Studio": https://visualstudio.microsoft.com/downloads/ 

В этом случае вам необходимо установить Visual Studio со страницы: https://visualstudio.microsoft.com/downloads/. На этой странице выберите Community > Скачать бесплатно.

В диалоговом окне Установка включите Desktop development with C++ и MSVC v142, v141 и v140 параметрамиНажмите кнопку Установить (Install):


После установки Visual Studio перезагрузите компьютер и повторите установку библиотек.


Если вы столкнулись с другой ошибкой во время установки, выполните следующие действия: 

- Нажмите правой кнопкой мыши на верхней панели окна cmd и выберите команду Выбрать все. 
- Еще раз нажмите правой кнопкой мыши на верхней панели окна cmd и выберите команду Копировать. 
- Создайте файл *.txt и вставьте скопированный текст из командной строки. 
- Отправьте, пожалуйста, этот файл в службу поддержки Agisoft: support@agisoft.com.


5. Добавьте скрипт в каталог автозапуска, следуя инструкциям, приведенным в соответствующей статье. Другими словами, вам нужно скопировать скрипт detect_objects.py в C:/Users/<username>/AppData/Local/Agisoft/Metashape Pro/scripts/

 

Как использовать скрипт для автоматического обнаружения объектов

Нейронная сеть обучается обнаруживать автомобили на ортофотоплане с использованием набора демо-данных, которые включены как иллюстрации в этой статье. Поскольку автоматическое обнаружение выполняется на готовом ортофотоплане, перед запуском скрипта необходимо построить ортофотоплан в рабочем проекте. Вы можете найти инструкции по созданию ортофотоплана в следующих статьях: 


Разрешение ортофотоплана должно быть не менее 10 см/пиксель, то есть GSD (Ground Sample Distance) не более 10 см/пикс. 

 

1. Откройте набор данных в Agisoft Metashape Professional.


После установки пакетов Python при запуске Metashape может появиться диалоговое окно с сообщением: "Please wait while Windows configures Agisoft Metashape Professional" (Пожалуйста, подождите, пока Windows настроит Agisoft Metashape Professional). Дождитесь окончания проверки и открытия Metashape, после чего продолжайте работу со скриптом.


Перед запуском автоматического обнаружения объектов необходимо «обучить» алгоритм распознавать интересующие нас объекты для конкретной ситуации. Для этого мы выделяем на ортофотоплане обучающую область, включающую в себя объекты для обнаружения (в примере ниже это автомобили). 

 

2. Выберите на ортофотоплане небольшую область, где представлены интересующие вас объекты, и создайте фигуру, которая будет обозначать зону обучения для нейронной сети. Фигура должна быть создана с помощью инструмента Нарисовать полигон (таким образом область будет выровнена по оси). Размеры прямоугольника должны быть не менее 50 метров для каждой стороны. На иллюстрации ниже отображен слой, который содержит созданную фигуру, он называется Train zone.

 

Рекомендуется задать свой цвет фигурам слоя Train Zones, чтобы избежать ошибок при работе с набором данных. Для этого выберите слой фигур на панели Проект и выберите команду Свойства из контекстного меню (доступно по нажатию правой кнопкой мыши). Выберите предпочтительный цвет из палитры и нажмите OK.


3. Создайте еще один слой фигурна панели Проект выберите команду Добавить слой из контекстного меню папки Фигуры: 


В диалоговом окне Новый слой фигур укажите название Train data и выберите цвет для нового слоя: 

 

Необходимо использовать имена слоев Train Zones и Train data, так как эти имена будут автоматически выбраны в соответствующих полях диалогового окна Обнаружение объектов на ортофотоплане (см. далее в этой статье). При желании можно использовать любое имя для слоя с фигурами, но в этом случае вы должны указать соответствующие слои вручную.

4. Необходимо выделить все интересующие объекты (автомобили в нашем случае) в тренировочной зоне. Для этого мы используем инструмент Нарисовать полигон и создаем отдельную фигуру (в слое Train data) вокруг каждого автомобиля в границах тренировочной зоны (полигон слоя Train Zones).


Необходимо отметить все автомобили в пределах зоны обучения, так как если пропустить некоторые автомобили, нейросеть будет думать, что такие автомобили нужно игнорировать, и это ухудшит качество результата. Даже те автомобили, которые частично попадают в прямоугольник тренировочной зоны, важны для обучения (на скриншоте ниже зеленой стрелкой указан такой пример):


5. Есть два разных варианта запуска скрипта.


Первый вариант доступен, если скрипт был добавлен в автозапуск (см. шаг 5 в разделе Как установить скрипт на Windows). В этом случае просто запустите скрипт из главного меню: Scrips > Detect Objects.

 

Второй вариант подходит для случая, когда по каким-то причинам скрипт не был добавлен в автозапуск. Используйте меню Инструменты > Выполнить скрипт и в диалоговом окне укажите путь к файлу с расширением *.py (т.е. к python скрипту):

Затем в главном меню выберите Scripts > Detect objects.

 

После запуска скрипта появится диалоговое окно Objects detection on orthomosaic (Обнаружение объектов на ортофотоплане). Укажите путь к рабочему каталогу (куда будут сохраняться результаты) и убедитесь, что слои фигур Train zone и Train data указаны правильно. Нажмите кнопку Run(Выполнить), чтобы запустить скрипт.

 

Проверьте результаты автоматического обнаружения объектов в окне просмотра Орто:


Чем выше вариативность объектов в зоне обучения, тем лучше будут результаты автоматического обнаружения. Некоторые области являются проблемными для алгоритма автоматического обнаружения, поэтому некоторые объекты не будут обнаружены. Например (как показано на изображении ниже), автомобиль темного цвета не был обнаружен в затененной области, так как разница между пикселями на объекте и на фоне очень мала. 

 

Другой пример проиллюстрирован на изображении ниже: некоторые объекты могут напоминать интересующий объект, поэтому алгоритм ошибочно обнаруживает и такой объект.

 

Автоматическое обнаружение объектов полезно для обнаружения конкретных объектов на больших площадях, однако реализация скрипта по-прежнему требует проверки и корректировки результатов оператором.