Применим геопространственную разведку? Проведем точный количественный учет воздушных судов противника, используя технологию обнаружения объектов 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 для дальнейших действий.
На представленном выше изображении демонстрируется процесс выбора соответствующего датасета для вашего проекта. В приведённом примере была выбрана модель YOLOv8
для задачи обнаружения объектов, а термин "аэрофотосъемка
" использован в качестве ключевого слова для поиска. В результате система предложила обширный перечень датасетов, из которых был отобран наиболее подходящий по критерию количества изображений — 1192 изображения и один класс
.
После того, как установили соответствие выбранного набора данных целям проекта, следующим шагом будет его загрузка в нужном формате. В данном случае, был выбран формат YOLOv8
.
Для сохранения выбранного датасета используем опцию архивирования в формате ZIP, как указано на скрине. После скачивания архива распаковываем его и знакомимся со структурой данных, включая файлы изображений и соответствующие им аннотации. Обычно структура включает три директории: test
, train
и valid
, а также несколько вспомогательных файлов, в том числе 'data.yaml
', который содержит описание датасета и классы объектов. Далее, в контексте использования модели YOLOv8, перейдем на Ultralytics Hub, где необходимо зарегистрироваться, создать новый проект и модель, а затем загрузить датасет для последующей подготовки модели к обучению.
На представленном скрине выше демонстрируется процесс ввода данных для проекта с названием AER_AIR_04s
и описанием Aircraft detection at the airbase using aerial imagery
. Также добавлено образцовое изображение для удобства идентификации проекта в списке. Аналогичные действия рекомендуются и вам. Далее, для продолжения работы, переходим в раздел "Datasets", откуда необходимо загрузить архив ZIP из папки "Загрузки", выбрав категорию "Detect" для типа данных, а также указать название и описание вашего набора данных, согласно инструкциям ниже.
После нажатия "Create" и завершения процесса загрузки, увидим список наборов данных, включая наш новый набор среди них.
Просмотрев изображения и их метки, нажимаем "Train model", чтобы продолжить обучение модели YOLOv8.
В появившемся интерфейсе следует выбрать проект из предложенного списка. Далее, вводим название модели, например, YOLOv8sAir, определяем архитектуру модели как YOLOv8, оптимизированную для скорости (YOLOv8s), и подтверждаем выбор, нажав на "Continue".
В Ultralytics Hub есть широкий спектр вариантов, которые мы можем использовать для обучения модели, но в нашем случае — 'Google Colab'.
Как показано на скрине выше, появятся ключ аутентификации и 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 в качестве акселератора.
Как только закончим с этим, можем начать процесс обучения модели YOLOv8.
Обучение модели с использованием обширного набора данных предположительно продлится от 3 до 4 часов. Вам доступно несколько вариантов для мониторинга этого процесса: помимо стандартного списка в Google Colab, вы также можете воспользоваться интуитивно понятной полосой прогресса, размещённой на веб-странице модели YOLOv8 для более удобного отслеживания статуса обучения.
После завершения обучения, перейдем в раздел "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
. В завершение, мы выводим на экран первый аннотированный кадр, полученный в результате работы модели.
На представленном изображении наблюдается обнаружение трех самолетов с вероятностями около 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.
Ознакомьтесь с представленным видеофайлом. Несмотря на то, что система идентифицировала большинство самолетов, некоторые остались не распознанными. Рассмотрите возможные способы повышения точности алгоритма и не стесняйтесь делиться своими идеями по усовершенствованию в комментариях. Ваш вклад может помочь улучшить функциональность модели.
Ниже вы найдете полный перечень файлов, использованных для демонстрации возможностей обнаружения объектов с применением YOLOv8:
Модель PyTorch: YOLOv8sAir;
-
Источники данных с беспилотников:
Статическое изображение: Aerial_AirBase.jpg;
Видеозапись с аэропорта: AirBase_Video.mp4;
Исходный код: Google Research Colab.
Предлагаю вам проявить творческий подход и разработать уникальные решения, используя предложенные материалы. Спасибо за внимание!
Комментарии (2)
Prohard
18.05.2024 15:44+3"Подсчитаем точный количественный учет воздушных судов противника" - гуглом переводили ... или еще чем-то
Grey83
Автор оригинала заявляет в одной из своих статей на медиуме, что работал на правительство США в 2016 - 2017 годах в качестве подрядчика.
А так у него есть акки на медиуме, линкедине, гитхабе и твиттере (может ещё где есть, просто я загуглил его акк на твиттере и он выдал эти ссылки).