点击上方
“
小白学视觉
”,选择加"
星标
"或“
置顶
”
重磅干货,第一时间送达![](http://mmbiz.qpic.cn/mmbiz_jpg/ow6przZuPIENb0m5iawutIf90N2Ub3dcPuP2KXHJvaR1Fv2FnicTuOy3KcHuIEJbd9lUyOibeXqW8tEhoJGL98qOw/640?wx_fmt=other&wxfrom=5&wx_lazy=1&wx_co=1&tp=webp)
通过使用 YOLOv8 目标检测和侦察无人机拍摄的航空图像来利用地理空间情报(GEOINT)统计敌方飞机,从而规划军事行动。
使用 YOLOv8 识别敌方空军基地的
飞机
在本文中,我们将深入探讨地理空间情报(GEOINT)作为
跟踪敌方军事空军基地的工具。
通过有效地监控这些位置及其飞机,可以为针对它们的作战行动进行充分准备。
YOLOv8 目标检测
YOLOv8 是由 Ultralytics 开发的流行实时目标检测系统,广泛应用于包括军事监视和侦察在内的各种应用。
它旨在实时检测图像或视频帧中的物体。
在军事场景中,快速准确地指示车辆、人员或设备等目标对于态势感知和目标跟踪至关重要。
通过将 PyTorch 与深度学习和卷积神经网络(CNN)结合使用,YOLOv8 展示了同时检测场景中多个物体的能力,具有良好的速度和精度。因此,我们选择在任务中使用它。
前提条件
首先,我选择在 Google Compute Engine 后端使用 Python 3,并在 Google Colab 中执行代码。让我们安装依赖项。
在安装过程中,它会安装 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,这是一个在 Google Colab 中正确工作的 cv2 热修复程序。urllib.request 用于从公共存储下载图像示例。
YOLOv8 模型
YOLOv8 是为目标检测设计的深度学习模型,它通过将输入图像分割成网格,然后预测每个网格单元中物体的边界框和类别概率。该模型的高效性在于其能够在单次前向传递中处理整个图像。
通常,为了创建模型,我们需要通过为每个图像添加图像和标签来正确准备数据集,以教模型识别物体。然而,现有的数据库已经包含了任何项目初期所需的大多数数据集。今天,我们将在实验中使用这些数据集。让我们访问 Roboflow 网站。
AeroSat 数据集 > 概览(roboflow.com)
如上图所示,您需要为项目找到合适的数据集。在我们的示例中,我选择了 yolov8 作为模型类型,目标检测作为项目类型,并输入 aerial 作为搜索词。系统提供了广泛的数据集列表,我根据图像数量选择了一个更符合我们需求的数据集:1192 张图像和 1 个类别。
下载数
据集
一旦确定数据集适合您的任务,您需要通过选择适当的导出格式下载它。在我们的场景中,我选择了 YOLOv8 格式,因为我们之前已经决定使用它。
导出至
YOLO
v8 格
式的压缩文件
选择 ZIP 文件作为存储建议数据集的选项,如上图所示,并按照进一步的说明下载。
当您准备好后,可以解压文件并探索数据集的结构和包含的图像及其标签。
在大多数情况下,您会看到三个文件夹:
test、train 和 valid,以及一些文件,其中一个是描述数据和类别的 data.yaml。
接下来的步骤,由于我们要使用 YOLOv8,我们必须前往 Ultralytics Hub,注册,创建项目、模型,并上传数据集,最终准备好您的模型进行训练。
在 Ultralytics HUB 创建新项目
如上图所示,我输入了项目名称 AER_AIR_04s,简短描述为通过航空图像在空军基地检测飞机,并添加了一个示例图像,以便在我的列表中正确识别此项目。您可以照此操作。
接下来的步骤是转到“Datasets”并从下载文件夹中上传 ZIP 文件,选择数据集类型 Detect、数据集名称和描述,如下所示。
从 ZIP 文件上传数据集
点击“Create”按钮并完成上传过程后,您将看到数据集列表,其中包含您的新数据集。
航空飞机检测数据集
深入检查图像及其标签,然后按“Train model”按钮继续 YOLOv8 模型训练。
训练 YOLOv8 模型
在下一个窗口中,您需要从列表中选择项目,输入模型名称 YOLOv8sAir,选择 YOLOv8 架构 YOLOv8s,并点击“Continue”按钮。
选择模型名称及其架构(YOLOv8s)
Ultralytics Hub 提供了广泛的选项来训练模型,但我们将使用以下选项——“Google Colab”。
YOLOv8 模型训练的参数
如上图所示,您将获得认证密钥和 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”以加速训练,使用 NVIDIA T4 GPU 作为加速器。
Nvidia Tesla T4 GPU
完成后,您可以像通常在 Google Colab 脚本中那样启动 YOLOv8 模型训练过程。
在 Goo
gle Colab 中训练
对于如此大的数据集,训练过程大约需要 3-4 小时。然而,您不仅可以在 Google Colab 列表中监控进度,这可能不太方便,还可以使用 YOLOv8 模型网页上的特殊进度条。
在 Ultralytics Hub 中训练过程
如前所述,这可能需要一些时间。完成后,导航到“Deploy”选项卡并下载最终模型(*.pt)文件。然后,您可以使用 YOLOv8 包在任何设备上,包括 Raspberry Pi 和智能应用程序中,使用此模型进行目标检测,识别空军基地或战场上的目标,甚至在侦察无人机上进行您的任务。
YOLOv8 的使用
到目前为止,您已经拥有了 YOLOv8 模型的 PyTorch (*.pt) 文件,该文件大小为 21.4 MB。这使我们可以在任何应用程序中使用它,只需几行代码。
为了方便起见,我将 PT 文件、实验中将使用的图像和视频源上传到持久区块链存储 Arweave。
要下载这些三个文件并将它们保存到我们的 Google Compute Engine 的工作目录中,我们需要编写并执行以下代码。
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
是模型的权重文件,
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
图像中的任何物体,最后显示结果中的第0个标注框。
使用 yolov8sair 模型进行目标检测
如上图所示,检测到三架飞机,概率均约为 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]
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()