此数据集涵盖了带有和不带有掩膜的无人机拍摄城市建筑物图像,包含众多清晰标注的城市建筑屋顶照片,非常适合用于训练目标检测模型。数据集已经过标注,可以直接投入使用,支持多种格式输出,属于单一类别。
1
1
1
所提供的数据集包括高分辨率的城市建筑屋顶航空影像,具有边界框和掩膜标注,适用于目标检测与实例分割任务。
一、数据集核心特点
| 特性 | 描述 |
|---|---|
| 图像来源 | 无人机或卫星遥感影像 |
| 标注类型 | 边界框(YOLO 格式) 实例掩膜(多边形或RLE编码) |
| 标注质量 | 精确至建筑轮廓,包括不规则形状、部分遮挡及多层结构 |
| 场景多样性 | 涵盖城市中心、郊区、工业区和乡村地区 |
| 支持格式 | YOLOv5/v8()、COCO(JSON)、Pascal VOC、DeepLab 等 |
二、主要应用场景
- 智慧城市与城市规划
自动绘制城市建筑布局图
分析建筑密度、监控城市扩展
土地用途分类(居住/商业/工业)
政府机构用于人口统计、房地产登记
示例:利用AI技术快速生成“城市三维模型”的基础数据 - 地理信息系统(GIS)与遥感
更新高精度地图(例如Google Earth、百度地图)
建设数字孪生城市
地形建模与空间分析
结合LiDAR数据进行三维重建
示例:自动识别新建筑,帮助测绘公司更新数据库 - 灾害评估与应急管理
地震、洪水后迅速评估建筑物受损状况
识别坍塌、倾斜、开裂的建筑物
规划紧急救援路线
估计损失(根据建筑物数量与面积)
示例:灾后1小时内完成全市建筑状态评估 - 自动驾驶与机器人导航
构建高精度地图(建筑边界作为道路网络参考)
室外环境理解(建筑作为静态障碍物)
无人机自主飞行路径规划(避开建筑物群体)
示例:自动驾驶汽车在复杂城市环境中识别建筑边缘以避免碰撞 - 生态环境与可持续发展
监测建筑屋顶绿化(光伏板与植物)
分析城市热岛效应(建筑密度对温度的影响)
评估太阳能潜力(屋顶面积+方向)
示例:政府推行“绿色屋顶”政策,AI监测实施情况
提供带有掩膜和无掩膜的城市建筑屋顶数据集的完整训练代码,支持目标检测(边界框)和实例分割(实例分割)两种任务。使用Ultralytics YOLOv8框架(截至2025年最稳定、功能最全面的官方YOLO实现),并提供从数据准备到模型导出的全过程。
一、项目结构
Building_Dataset/ ├── dataset.yaml # 数据集配置文件 ├── train.py # 训练脚本 ├── predict_demo.py # 推理演示 ├── dataset/ │ ├── images/ │ │ ├── train/ │ │ ├── val/ │ │ └── test/ │ └── labels/ │ ├── train/ # YOLO格式:*.txt(含box + 可选polygon) │ ├── val/ │ └── test/ └── requirements.txt
支持两种操作模式:
- 仅检测:
labels/*.txt每行格式为:
class_id x y w h- 实例分割:
labels/*.txt每行格式为:
class_id x1 y1 x2 y2 ... xn yn(归一化坐标)
二、依赖安装(requirements.txt
)
requirements.txtultralytics==8.2.0
torch>=1.10.0
torchvision>=0.11.0
opencv-python>=4.6.0
numpy>=1.21.0
matplotlib>=3.7.0
scipy>=1.10.0
安装命令:
pip install -r requirements.txt
三、数据集配置文件
dataset.yaml
- 场景1:仅目标检测(无掩膜)
# dataset.yaml (Detection Only)
path: ./dataset
train: images/train
val: images/val
test: images/test
nc: 1
names: ['building']
- 场景2:实例分割(带掩膜)
# dataset.yaml (Segmentation)
path: ./dataset
train: images/train
val: images/val
test: images/test
nc: 1
names: ['building']
# 注意:YOLOv8-seg 自动识别 labels 文件夹中的多点坐标作为 mask
四、标注示例(labels/train/001.txt
)
labels/train/001.txt0 0.5 0.5 0.2 0.3 # 检测模式
0 0.4 0.4 0.6 0.4 0.6 0.6 0.4 0.6 # 分割模式(4个点的矩形)
五、完整训练代码
train.py
# train.py from ultralytics import YOLO import torch import os def main():
device = 'cuda' if torch.cuda.is_available() else 'cpu'
print(f"当前使用设备: {device}")
# ==================================
# 选择任务类型
# ==================================
TASK = "segment" # 可选: "detect" 或 "segment"
if TASK == "detect":
model_name = "yolov8s.pt" # 目标检测模型
project_name = "building_detection"
elif TASK == "segment":
model_name = "yolov8s-seg.pt" # 实例分割模型
project_name = "building_segmentation"
else:
raise ValueError("TASK 必须是 'detect' 或 'segment'")
# 加载预训练模型
model = YOLO(model_name)
# 训练参数
results = model.train(
data='dataset.yaml',
epochs=100,
imgsz=640, # 建筑细节丰富,建议设置为 ≥640
batch=16, # 根据 GPU 调整(例如32G显存可以设置为32)
name=project_name,
device=device,
patience=25, # 早期停止
save=True,
plots=True, # 生成 PR 曲线、混淆矩阵等
exist_ok=False,
workers=8,
optimizer='AdamW',
lr0=0.01,
lrf=0.01,
augment=True, # 开启 Mosaic、HSV、旋转等增强
degrees=10.0, # ±10° 旋转(适用于航拍)
translate=0.1,
scale=0.5,
flipud=0.0, # 航拍图通常不上下翻转
fliplr=0.5, # 左右翻转安全
mosaic=1.0,
mixup=0.1
)
# 在测试集上评估
metrics = model.val(data='dataset.yaml', split='test')
print("\n测试集结果:")
if TASK == "detect":
print(f" mAP@0.5: {metrics.box.map50:.5f}")
print(f" mAP@0.5:0.95: {metrics.box.map:.5f}")
else:
print(f" mAP@0.5 (Box): {metrics.box.map50:.5f}")
print(f" mAP@0.5 (Mask): {metrics.seg.map50:.5f}")
if __name__ == '__main__':
main()
运行训练:
python train.py
五、推理与可视化
predict_demo.py# predict_demo.py
from ultralytics import YOLO
import cv2
# 加载训练完成的模型
model = YOLO('runs/segment/building_segmentation/weights/best.pt') # 或者使用 detect 路径
# 对单张图像进行推理
results = model.predict(
source='test_image.jpg',
conf=0.25,
iou=0.45,
save=True, # 保存带有标注的图像
show=True # 实时显示
)
# 获取推理结果
for result in results:
boxes = result.boxes # 边界框
masks = result.masks # 掩码(如果为分割任务)
print(f"检测到 {len(boxes)} 座建筑")
if masks is not None:
print(f"生成 {len(masks)} 个掩码")
六、模型导出(用于部署)
# export_model.py
from ultralytics import YOLO
首先,我们加载了预训练的YOLO模型,该模型专用于建筑分割任务:
model = YOLO('runs/segment/building_segmentation/weights/best.pt')
接下来,我们将模型导出为不同的格式,以便在不同类型的硬件上高效运行。
- 对于通用用途,我们将模型导出为ONNX格式:
model.export(format='onnx', imgsz=640, simplify=True)
- 为了在Jetson或NVIDIA GPU上使用,我们将模型导出为TensorRT格式:
model.export(format='engine', imgsz=640, half=True, device=0)
- 最后,为了在Intel CPU上运行,我们将模型导出为OpenVINO格式:
model.export(format='openvino', imgsz=640)
七、预期性能(基于类似数据集的经验)
根据我们在类似数据集上的经验,以下是预期的性能指标:
| 任务 | 模型 | 预期 mAP@0.5 | 推理速度(RTX 3090) |
|---|---|---|---|
| 目标检测 | YOLOv8s | 0.92–0.96 | 120 FPS |
| 实例分割 | YOLOv8s-seg | 0.88–0.93 | 45 FPS |
当建筑物轮廓清晰且背景简单时,实现 mAP > 0.9 是完全可行的。


雷达卡


京公网安备 11010802022788号







