全部版块 我的主页
论坛 经济学论坛 三区 区域经济学
183 1
2025-11-20

此数据集涵盖了带有和不带有掩膜的无人机拍摄城市建筑物图像,包含众多清晰标注的城市建筑屋顶照片,非常适合用于训练目标检测模型。数据集已经过标注,可以直接投入使用,支持多种格式输出,属于单一类别。

1

1

1

所提供的数据集包括高分辨率的城市建筑屋顶航空影像,具有边界框和掩膜标注,适用于目标检测与实例分割任务。

一、数据集核心特点

特性 描述
图像来源 无人机或卫星遥感影像
标注类型 边界框(YOLO 格式)
实例掩膜(多边形或RLE编码)
标注质量 精确至建筑轮廓,包括不规则形状、部分遮挡及多层结构
场景多样性 涵盖城市中心、郊区、工业区和乡村地区
支持格式 YOLOv5/v8(
.txt
)、COCO(JSON)、Pascal VOC、DeepLab 等

二、主要应用场景

  1. 智慧城市与城市规划
    自动绘制城市建筑布局图
    分析建筑密度、监控城市扩展
    土地用途分类(居住/商业/工业)
    政府机构用于人口统计、房地产登记
    示例:利用AI技术快速生成“城市三维模型”的基础数据
  2. 地理信息系统(GIS)与遥感
    更新高精度地图(例如Google Earth、百度地图)
    建设数字孪生城市
    地形建模与空间分析
    结合LiDAR数据进行三维重建
    示例:自动识别新建筑,帮助测绘公司更新数据库
  3. 灾害评估与应急管理
    地震、洪水后迅速评估建筑物受损状况
    识别坍塌、倾斜、开裂的建筑物
    规划紧急救援路线
    估计损失(根据建筑物数量与面积)
    示例:灾后1小时内完成全市建筑状态评估
  4. 自动驾驶与机器人导航
    构建高精度地图(建筑边界作为道路网络参考)
    室外环境理解(建筑作为静态障碍物)
    无人机自主飞行路径规划(避开建筑物群体)
    示例:自动驾驶汽车在复杂城市环境中识别建筑边缘以避免碰撞
  5. 生态环境与可持续发展
    监测建筑屋顶绿化(光伏板与植物)
    分析城市热岛效应(建筑密度对温度的影响)
    评估太阳能潜力(屋顶面积+方向)
    示例:政府推行“绿色屋顶”政策,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

ultralytics==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

0 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 是完全可行的。

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2025-11-20 10:22:38
谢谢分享!
二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群