Skip To Content

Пример: Извлечение объектов с помощью предварительно обученной модели

Глубокое обучение может быть использовано для автоматизации задачи извлечения объектов вручную из изображений. Используя предварительно обученные модели ArcGIS, вы можете сократить потребность в больших наборах данных, значительной вычислительной мощности, а также знаниях или опыте в области глубокого обучения. Эти модели были обучены на разнообразных географических данных и хорошо работают в разных регионах. Предварительно обученные модели ArcGIS доступны для каждого пользователя, имеющего учетную запись ArcGIS в ArcGIS Living Atlas of the World. В следующем рабочем процессе используется модель Car Detection-USA для идентификации автомобилей на снимках с высоким разрешением, полученных с помощью БПЛА, и аэрофотоснимках.

Требования

Для выполнения этого рабочего процесса необходимо выполнить следующие требования:

  • Аэрофотоснимки для запуска модели.
    Примечание:

    Вы можете загрузить аэрофотоснимки, содержащие машины, с OpenAerialMap.

  • Глубокое обучение требует больших вычислительных ресурсов, поэтому для обработки больших наборов данных рекомендуется использовать мощный графический процессор.

Извлечение объектов с помощью предварительно обученных моделей

В следующих разделах описываются процессы, используемые при извлечении объектов с помощью предварительно обученной модели ArcGIS.

Импортировать библиотеки Python

Импортируйте следующие библиотеки Python:

from arcgis.gis import GIS
from arcgis.learn import detect_objects
from arcgis.raster.analytics import copy_raster
 
gis = GIS("home")

Добавить данные и модель для анализа

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

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

dataset = "/arcgis/home/Aerial imagery.tif"
imagery = copy_raster(input_raster=dataset, output_name="Aerial_imagery", raster_type_name="Raster Dataset")

Второй метод заключается в добавлении аэрофотоснимка в качестве размещенного слоя изображений на ваш портал и добавлении слоя изображений в ваш блокнот с использованием его itemID.

imagery = gis.content.get("<imagery-layer-item-id>")

Добавить пакет глубокого обучения

Вы можете загрузить предварительно обученную модель Car Detection - USA из ArcGIS Living Atlas. После загрузки модели добавьте ее в качестве элемента на свой портал и получите к ней доступ в своем блокноте, используя ее itemID.

model = gis.content.get("<deep-learning-package-item-id>")

Запуск модели

Чтобы запустить предварительно обученную модель в своем блокноте, используйте модуль detect_objects из arcgis.learn. Модуль примет ваши изображения в качестве входных данных, обнаружит и подсчитает количество автомобилей, присутствующих на них.

Примечание:

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

model_arguments = {
	"padding": "100",	# The number of pixels at the border of image tiles from which predictions are blended for adjacent tiles. To smooth the output while reducing artifacts, increase the value
	"batch_size": "16",	# Change batch size as per GPU specifications
	"threshold": "0.5",	# Get detections greater than 50% confidence
	"tile_size": "224",	# The width and height of image tiles into which the imagery is split for prediction
        }

Примечание:

Если графический процессор настроен, вы можете задать контекст внутри метода detect_object(), чтобы установить его для параметра среды графического процессора:

context = { "processorType": "GPU" }

num_cars = {}
 
detected_cars = detect_objects(
        input_raster=imagery,
        model = model,
        output_name = "detected_cars",
        )
 
num_cars[imagery.name] = len(detected_cars.query(as_df=True))

Результаты модели

Наконец, после запуска модели вы можете отобразить выходные данные num_cars.

print(f"Number of cars is {num_cars}.")