深度学习框架目标检测算法YOLOv8模型 训练自然灾害滑坡落石塌方检测数据集 通过训练出的权重推理 识别检测滑坡 倒树塌方 落石检测识别

深度学习框架目标检测算法YOLOv8模型 训练自然灾害滑坡落石塌方检测数据集 通过训练出的权重推理 识别检测滑坡 倒树塌方 落石检测识别


以下文字及代码仅供参考。学习,同学。
自然灾害滑坡落石塌方检测数据集
4 类:
在这里插入图片描述

  • landslide(滑坡):7818 个标注框
  • fallen tree(倒树):11037 个标注框
  • stone(落石):25155 个标注框
  • road collapse(道路塌陷):6416 个标注框
  • 总图像数量:21357 张

在这里插入图片描述

📊 一、类别数量统计表格

类别 ID类别名称标注框数量
0landslide7818
1fallen tree11037
2stone25155
3road collapse6416

总标注框数:49,426

在这里插入图片描述

🧱 二、YOLOv8 训练这套自然灾害数据集

在这里插入图片描述

✅ 1. 数据准备

在这里插入图片描述

✅ 1.1 数据结构要求

YOLOv8 YOLO 格式(.txt 文件 + .jpg/.png 图像),每个图像对应一个标签文件。每行内容如下:
在这里插入图片描述

class_id x_center y_center width height
  • 所有值都是相对于图像宽度和高度的归一化坐标(0~1)
  • class_id 对应类别索引(从 0 开始)
✅ 1.2 划分训练集 / 验证集 / 测试集

建议按照 8:1:1 的比例划分:

Total images = 21357
Train: 17086
Val: 2136
Test: 2135

你可以使用以下代码来划分数据集:

import os
import random
from shutil import copyfile

# 设置路径
image_dir = 'path/to/images'
label_dir = 'path/to/labels'

output_dir = 'dataset_natural_disaster'
os.makedirs(output_dir, exist_ok=True)
for split in ['train', 'val', 'test']:
    os.makedirs(os.path.join(output_dir, 'images', split), exist_ok=True)
    os.makedirs(os.path.join(output_dir, 'labels', split), exist_ok=True)

# 获取所有图像列表
image_files = [f for f in os.listdir(image_dir) if f.endswith('.jpg') or f.endswith('.png')]
random.shuffle(image_files)

# 按照 8:1:1 分割
train_split = int(0.8 * len(image_files))
val_split = int(0.9 * len(image_files))

train_files = image_files[:train_split]
val_files = image_files[train_split:val_split]
test_files = image_files[val_split:]

def copy_data(files, src_img_dir, src_label_dir, dst_dir, split):
    for file in files:
        base_name = os.path.splitext(file)[0]
        img_src = os.path.join(src_img_dir, file)
        label_src = os.path.join(src_label_dir, base_name + '.txt')
        
        img_dst = os.path.join(dst_dir, 'images', split, file)
        label_dst = os.path.join(dst_dir, 'labels', split, base_name + '.txt')

        copyfile(img_src, img_dst)
        if os.path.exists(label_src):
            copyfile(label_src, label_dst)

copy_data(train_files, image_dir, label_dir, output_dir, 'train')
copy_data(val_files, image_dir, label_dir, output_dir, 'val')
copy_data(test_files, image_dir, label_dir, output_dir, 'test')

print("✅ Dataset split completed.")

✅ 2. 创建 YOLOv8 数据配置文件 data.yaml

train: dataset_natural_disaster/images/train/
val: dataset_natural_disaster/images/val/
test: dataset_natural_disaster/images/test/

nc: 4
names: ['landslide', 'fallen tree', 'stone', 'road collapse']

保存为 data.yaml


✅ 3. 安装 YOLOv8 环境

# 克隆仓库
git clone https://github.com/ultralytics/ultralytics.git
cd ultralytics
pip install -r requirements.txt

✅ 4. 模型选择与训练

YOLOv8 可支持多种模型结构:yolov8n, yolov8s, yolov8m, yolov8l, yolov8x

推荐使用 yolov8syolov8m 进行训练。

🚀 单卡训练命令:
yolo train data=data.yaml model=yolov8s.pt epochs=100 batch=16 imgsz=640

参数说明:

参数含义
data数据配置文件路径
model使用的预训练模型权重
epochs总训练轮次
batch批大小
imgsz输入图像尺寸

✅ 5. 可视化训练过程

训练过程中会自动在 runs/train/exp 下生成可视化日志和模型权重文件。

可以使用 TensorBoard 查看训练曲线:

tensorboard --logdir=runs

✅ 6. 推理代码

🔍 单张图片推理:
from ultralytics import YOLO

# 加载训练好的模型
model = YOLO('runs/train/exp/weights/best.pt')

# 推理单张图片
results = model('test.jpg')

# 显示结果
for r in results:
    print(r.boxes)  # 输出预测框信息
    annotated_img = r.plot()
    cv2.imshow('Detection', annotated_img)
    cv2.waitKey(0)
📦 批量推理:
results = model(['test1.jpg', 'test2.jpg'])

for result in results:
    boxes = result.boxes
    print(f"Detected {len(boxes)} objects")

✅ 7. 性能评估

验证模型性能(mAP 等指标):

yolo val data=data.yaml model=runs/train/exp/weights/best.pt imgsz=640

输出结果包括:

  • mAP@0.5
  • mAP@0.5:0.95
  • Precision / Recall
  • F1-score 等

✅ 8. 导出 ONNX 模型

部署到边缘设备或 C++/Java 环境中:

yolo export model=runs/train/exp/weights/best.pt format=onnx

导出后得到 best.onnx 模型文件。


📌 三、总结

步骤命令 / 工具
数据划分自定义 Python 脚本
数据配置data.yaml
环境搭建Ultralytics GitHub + pip
模型训练yolo train ...
推理model.predict()
性能评估yolo val ...
模型导出yolo export ...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值