[Перевод] DIY для шпиона: использование обнаружения объектов с помощью YOLOv8 в рамках военных стратегий

Применим геопространственную разведку? Подсчитаем точный количественный учет воздушных судов противника, используя технологию обнаружения объектов YOLOv8 на основе аэрофотосъемки, выполненной разведывательными беспилотниками, что обеспечит надежное планирование военных действий.

Модуль ИИ распознал самолеты на авиабазе противника с помощью YOLOv8

Модуль ИИ распознал самолеты на авиабазе противника с помощью YOLOv8

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

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

Обнаружение объектов с помощью YOLOv8

YOLOv8, разработанная компанией Ultralytics, представляет собой передовую технологию для обнаружения объектов в режиме реального времени, которая находит широкое применение во многих сферах, в том числе в военном деле. Эта система способна идентифицировать объекты на фотографиях и видео с высокой скоростью и точностью, что делает её незаменимым инструментом для оперативного реагирования и слежения за целями.

Благодаря использованию PyTorch, методов Deep Learning и CNN, YOLOv8 обладает возможностью одновременного распознавания множества объектов, что обеспечивает её востребованность в задачах, где требуется быстрая идентификация, например, военной техники, персонала и оборудования. Эти качества определили наш выбор в пользу YOLOv8 для выполнения задач поставленной миссии.

Предварительные требования

Во-первых, было принято решение задействовать Python 3 на бэке Google Compute Engine, используя Google Colab для запуска кода. Перейдем к процессу установки необходимых зависимостей.

!pip install ultralytics

В процессе установки будут добавлены такие важные библиотеки, как opencv-python, torch и pandas, а также другие необходимые компоненты, обеспечивающие полноценную работу пакета.

import cv2
import urllib.request

from ultralytics import YOLO, checks, hub
from google.colab.patches import cv2_imshow

В дополнение к модулям ultralytics, включен функционал cv2_imshow — это адаптация cv2, обеспечивающая его совместимость с Google Colab, для загрузки образцов изображений из сетевого хранилища применяется urllib.request.

Модель YOLOv8

Модель YOLOv8, разработанная для идентификации объектов, функционирует путём разбиения входящего изображения на сетку. Далее модель прогнозирует границы и вероятности классов для объектов в каждой ячейке этой сетки. Высокая эффективность модели YOLOv8 заключается в её уникальной способности анализировать изображение целиком за один цикл обработки.

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

AeroSat Dataset > Overview» /></p>

<p>На представленном выше изображении демонстрируется процесс выбора соответствующего датасета для вашего проекта. В приведённом примере была выбрана модель <code>YOLOv8</code> для задачи обнаружения объектов, а термин »<code>аэрофотосъемка</code>» использован в качестве ключевого слова для поиска. В результате система предложила обширный перечень датасетов, из которых был отобран наиболее подходящий по критерию количества изображений — <code>1192 изображения и один класс</code>.</p>

<p><img src=

После того, как установили соответствие выбранного набора данных целям проекта, следующим шагом будет его загрузка в нужном формате. В данном случае, был выбран формат YOLOv8.

a0d77d28d1c7540da2aa4b75b6f8716c.png

Для сохранения выбранного датасета используем опцию архивирования в формате ZIP, как указано на скрине. После скачивания архива распаковываем его и знакомимся со структурой данных, включая файлы изображений и соответствующие им аннотации. Обычно структура включает три директории: test, train и valid, а также несколько вспомогательных файлов, в том числе 'data.yaml', который содержит описание датасета и классы объектов. Далее, в контексте использования модели YOLOv8, перейдем на Ultralytics Hub, где необходимо зарегистрироваться, создать новый проект и модель, а затем загрузить датасет для последующей подготовки модели к обучению.

8ac24a9cdc043ed206742598ac711378.png

На представленном скрине выше демонстрируется процесс ввода данных для проекта с названием AER_AIR_04s и описанием Aircraft detection at the airbase using aerial imagery. Также добавлено образцовое изображение для удобства идентификации проекта в списке. Аналогичные действия рекомендуются и вам. Далее, для продолжения работы, переходим в раздел »Datasets», откуда необходимо загрузить архив ZIP из папки «Загрузки», выбрав категорию «Detect» для типа данных, а также указать название и описание вашего набора данных, согласно инструкциям ниже.

742f345b9a79b8167201eef6d26610bf.png

После нажатия »Create» и завершения процесса загрузки, увидим список наборов данных, включая наш новый набор среди них.

75ea5e70221a95855e3fc11fc7fb780b.png

Просмотрев изображения и их метки, нажимаем »Train model», чтобы продолжить обучение модели YOLOv8.

668aed983c9620e6b56e149d8aab11ad.png

В появившемся интерфейсе следует выбрать проект из предложенного списка. Далее, вводим название модели, например, YOLOv8sAir, определяем архитектуру модели как YOLOv8, оптимизированную для скорости (YOLOv8s), и подтверждаем выбор, нажав на »Continue».

0174b9b7143aff398284ef7f4be315ee.png

В Ultralytics Hub есть широкий спектр вариантов, которые мы можем использовать для обучения модели, но в нашем случае — 'Google Colab'.

be73626e0201652790ca914ca4b1b192.png

Как показано на скрине выше, появятся ключ аутентификации и URL (https://hub.ultralytics.com/models/BN8V8tA1pOt6thjZKq6V) для обучения модели. Просто копируем весь код и вставляем в свой Google Colab.

hub.login('[YOUR_AUTH_KEY]')

model = YOLO('https://hub.ultralytics.com/models/BN8V8tA1pOt6thjZKq6V')
results = model.train()

Затем переходим в меню «Runtime», выбираем »Change runtime type» и выбираем «T4 GPU», чтобы ускорить обучение с помощью GPU NVIDIA T4 в качестве акселератора.

04ee9f5c720995cc71c56fc6bbd85b8e.png

Как только закончим с этим, можем начать процесс обучения модели YOLOv8.

f24cbf0573fcebcd6b8b93f6c19b5ccc.png

Обучение модели с использованием обширного набора данных предположительно продлится от 3 до 4 часов. Вам доступно несколько вариантов для мониторинга этого процесса: помимо стандартного списка в Google Colab, вы также можете воспользоваться интуитивно понятной полосой прогресса, размещённой на веб-странице модели YOLOv8 для более удобного отслеживания статуса обучения.

cf60f0b8a8d81f657904fb1b2d5acf06.png

После завершения обучения, перейдем в раздел »Deploy» и выполним загрузку готового файла модели с расширением *.pt. Этот файл позволит нам применять модель для детектирования объектов через пакет YOLOv8 на различных устройствах, включая Raspberry Pi. Мы также сможете интегрировать модель в интеллектуальные приложения для идентификации объектов на территории авиабаз, в полевых условиях или даже использовать её в беспилотниках для проведения разведывательных операций.

Использование YOLOv8

На данном этапе мы уже обладаем необходимым файлом PyTorch (*.pt) с параметрами модели YOLOv8, размером 21,4 МБ. Этот файл обеспечивает возможность интеграции модели в различные приложения с использованием всего лишь нескольких строк кода.

Для упрощения процесса я разместил файл PT, а также необходимые изображения и видеоматериалы для эксперимента, в блокчейн-хранилище Arweave. Для загрузки этих ресурсов и их сохранения в рабочей директории вычислительного устройства на Google, нам потребуется выполнить предоставленный ниже код.

yolov8sair_url = 'https://6bq43uyscbhniu4kvl6hayy3zosqjnl5x2v2jm7zlfse6nnqrqsa.arweave.net/8GHN0xIQTtRTiqr8cGMby6UEtX2-q6Sz-VlkTzWwjCQ'
urllib.request.urlretrieve(yolov8sair_url, 'yolov8sair.pt')

source_file = 'https://6x77tjsjpqn6ze2k7izx36xgtipzff6yi2jfnp2xxf6lvmtyy7oa.arweave.net/9f_5pkl8G-yTSvozffrmmh-Sl9hGkla_V7l8urJ4x9w'
urllib.request.urlretrieve(source_file, 'Aerial_AirBase.jpg')

source_video = 'https://3tghzdwlhmyajv5eadufzesdo7epc5queknepym6hv2p737mgvxa.arweave.net/3Mx8jss7MATXpADoXJJDd8jxdhQimkfhnj10_-_sNW4'
urllib.request.urlretrieve(source_video, 'airport_video_source.mp4')

В нашем распоряжении находятся три ключевых файла: yolov8sair.pt, который содержит веса модели YOLOv8, Aerial_AirBase.jpg — образец изображения, полученного с беспилотника, предназначенного для детекции объектов, и airport_video_source.mp4 — видеофайл, который будет использоваться для последующего распознавания объектов.

model = YOLO('yolov8sair.pt')

results = model.predict('Aerial_AirBase.jpg')
annotated_frame = results[0].plot()
cv2_imshow(annotated_frame)

На этом этапе мы инициализируем объект YOLO, используя параметры нашей предварительно обученной модели. После этого мы приступаем к процессу детекции объектов на изображении Aerial_AirBase.jpg. В завершение, мы выводим на экран первый аннотированный кадр, полученный в результате работы модели.

5d1a458be9f70f454cea147fa093b1e3.png

На представленном изображении наблюдается обнаружение трех самолетов с вероятностями около 84%, что свидетельствует о высокой достоверности результатов. Это позволяет с легкостью подсчитать количество объектов, просто просматривая массив results[]. Стоит отметить, что уровень достоверности может меняться в зависимости от таких факторов, как погодные условия. Несмотря на определенные ограничения, например, облачность, данный метод обнаружения остается важным инструментом для планирования военных операций и координации боевых действий.

Как вы уже убедились, благодаря простоте внедрения, требующей всего нескольких строк кода, данный подход может быть адаптирован для широкого спектра приложений, включая автономные дроны с компактными бортовыми контроллерами.

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

Еще один хороший пример, который можно использовать для своих военных решений:

model = YOLO('yolov8sair.pt')

# Обнаружение объектов в видеопотоке
cap = cv2.VideoCapture(f"airport_video_source.mp4")
img_array = []

while cap.isOpened():
    success, frame = cap.read()

    if success:
        results = model(frame)
        annotated_frame = results[0].plot()
        img_array.append(annotated_frame)
    else:
        break

cap.release()

# Сохранение в выходной видеофайл
size = img_array[0].shape[1], img_array[0].shape[0]  # (384, 640)
writer = cv2.VideoWriter(f"airport_video_output.mp4", cv2.VideoWriter_fourcc(*"mp4v"), 25, size)
for frame in img_array:
    img_n = cv2.resize(frame, size)
    writer.write(img_n)
writer.release()

Процедура, о которой идет речь, заключается в анализе видеопотока для выявления объектов. В данном случае мы работаем с видеофайлом airport_video_source.mp4. Этот файл разделяется на отдельные кадры, в каждом из которых с помощью алгоритма происходит обнаружение воздушных судов. Полученные данные собираются и сохраняются в итоговый видеофайл airport_video_output.mp4, который доступен для загрузки в рабочей среде Google Compute Engine.

041ac6a05fbc3dd33756977f4ac46da0.png

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

Ниже вы найдете полный перечень файлов, использованных для демонстрации возможностей обнаружения объектов с применением YOLOv8:

Предлагаю вам проявить творческий подход и разработать уникальные решения, используя предложенные материалы. Спасибо за внимание!

Habrahabr.ru прочитано 9801 раз