无人机视觉定位数据集,将无人机拍摄的地面俯视图与相应的遥感影像进行匹配,可以实现无人机的精确快速定位,且不会产生误差累积,能作为当前无人机组合导航系统的重要补充,无人机影像收集自国内多个地区,涵盖不同地形特征和大部分国内地区;匹配的底图影像则是从谷歌地图获取的卫星图像。数据集旨在通过提供多样化的数据来支持无人机视觉定位模型的训练和测试。该数据集包含 6,742 幅无人机图像和 11 幅卫星影像。无人机图像空间分辨率为0.1-0.2m,卫星影像空间分辨率为0.3m,数据集大小为16.4GB。、
该数据集专注于通过无人机拍摄的地面俯视图与相应的高分辨率卫星影像进行匹配,实现无人机的精确快速定位。数据集包含6,742幅无人机图像和11幅卫星影像,旨在支持无人机视觉定位模型的训练和测试。无人机图像的空间分辨率为0.1-0.2米,而卫星影像的空间分辨率为0.3米。整个数据集的大小为16.4GB。
假设数据集的根目录为 drone_visual_localization_dataset
,其结构可能如下所示:
drone_visual_localization_dataset/
├── drone_images/
│ ├── image_0001.jpg
│ ├── image_0002.jpg
│ └── ...
├── satellite_images/
│ ├── satellite_01.tif
│ ├── satellite_02.tif
│ └── ...
├── metadata/
│ ├── drone_gps_coordinates.csv
│ ├── satellite_coverage_areas.csv
│ └── dataset_description.txt
└── data_info.txt # 数据集信息文件
data_info.txt
此文件可能包含关于数据集的元信息,例如数据集的采集日期、覆盖区域、采集设备等。
这些数据集可以应用于以下几种场景:
以下是一个使用Keras框架进行模型训练的基本代码示例:
import os
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing.image import ImageDataGenerator
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten, Dense, Dropout
from tensorflow.keras.optimizers import Adam
from tensorflow.keras.callbacks import EarlyStopping, ModelCheckpoint
from tensorflow.keras.losses import MeanSquaredError
from tensorflow.keras.metrics import RootMeanSquaredError
# 参数设置
IMAGE_SIZE = (224, 224) # 图像尺寸
BATCH_SIZE = 32
EPOCHS = 50
PATIENCE = 5 # EarlyStopping patience
# 数据路径
drone_images_dir = 'drone_visual_localization_dataset/drone_images'
satellite_images_dir = 'drone_visual_localization_dataset/satellite_images'
metadata_file = 'drone_visual_localization_dataset/metadata/drone_gps_coordinates.csv'
# 读取元数据
import pandas as pd
metadata = pd.read_csv(metadata_file)
# 数据生成器
# 由于这是一个匹配问题,我们不需要传统的ImageDataGenerator
# 而是需要一个自定义的数据生成器来配对无人机图像和卫星图像
class CustomDataGenerator(tf.keras.utils.Sequence):
def __init__(self, metadata, batch_size, image_shape, satellite_shape):
self.metadata = metadata
self.batch_size = batch_size
self.image_shape = image_shape
self.satellite_shape = satellite_shape
def __len__(self):
return int(np.ceil(len(self.metadata) / float(self.batch_size)))
def __getitem__(self, idx):
batch = self.metadata[idx * self.batch_size:(idx + 1) * self.batch_size]
X_drone = []
X_satellite = []
for i, row in batch.iterrows():
drone_img_path = os.path.join(drone_images_dir, row['drone_image'])
satellite_img_path = os.path.join(satellite_images_dir, row['satellite_image'])
X_drone.append(tf.keras.preprocessing.image.load_img(drone_img_path, target_size=self.image_shape))
X_satellite.append(tf.keras.preprocessing.image.load_img(satellite_img_path, target_size=self.satellite_shape))
X_drone = np.array(X_drone) / 255.
X_satellite = np.array(X_satellite) / 255.
return [X_drone, X_satellite], None # 模型的输出可能是一个匹配分数或者直接预测无人机位置
# 构建模型
model = Sequential([
Conv2D(32, (3, 3), activation='relu', input_shape=(IMAGE_SIZE[0], IMAGE_SIZE[1], 3)),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(64, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(128, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Conv2D(256, (3, 3), activation='relu'),
MaxPooling2D(pool_size=(2, 2)),
Flatten(),
Dense(512, activation='relu'),
Dropout(0.5),
Dense(2) # 输出层,假设预测无人机的位置(x, y)
])
# 编译模型
model.compile(loss=MeanSquaredError(),
optimizer=Adam(lr=0.0001),
metrics=[RootMeanSquaredError()])
# 设置回调
checkpoint = ModelCheckpoint('best_model.h5', monitor='val_loss', verbose=1, save_best_only=True, mode='min')
early_stopping = EarlyStopping(monitor='val_loss', patience=PATIENCE, verbose=1, mode='auto')
# 数据生成器实例
train_gen = CustomDataGenerator(metadata[:int(len(metadata)*0.8)], BATCH_SIZE, IMAGE_SIZE, IMAGE_SIZE)
val_gen = CustomDataGenerator(metadata[int(len(metadata)*0.8):], BATCH_SIZE, IMAGE_SIZE, IMAGE_SIZE)
# 训练模型
history = model.fit(
train_gen,
steps_per_epoch=len(train_gen),
epochs=EPOCHS,
validation_data=val_gen,
validation_steps=len(val_gen),
callbacks=[checkpoint, early_stopping]
)
print("Training complete.")
这个数据集和代码示例为进行无人机视觉定位提供了一个良好的起点。通过使用这些资源,可以有效地训练出一个能够实现无人机精确快速定位的模型。在实际应用中,可以根据具体需求调整模型结构和训练参数。