深度学习目标检测算法 YOLOv8训练卫星图像中火点火灾和烟雾数据集检测的模型 识别卫星图像中的火点烟雾检测

深度学习目标检测算法 YOLOv8训练卫星图像中火点火灾和烟雾数据集检测的模型 识别卫星图像中的火点烟雾检测


以下文字及代码仅供参考。

卫星图像火点烟雾检测数据集,

在这里插入图片描述

类别标注框数量
Smoke(烟雾)1311
Wildfire(火点)22138

总计:

  • 图片总数:30480张
    -两种标注:YOLO和VOC
    在这里插入图片描述
    1
    在这里插入图片描述
    使用深度学习模型对卫星图像中的火点和烟雾进行检测,采用YOLOv8作为目标检测框架。YOLO格式和VOC格式的标注文件,我们将直接使用YOLO格式进行训练。

仅供参考
在这里插入图片描述

1. 数据集准备

假设你的数据集结构如下:
在这里插入图片描述

satellite_fire_smoke/
├── images/
│   ├── train/
│   │   ├── img1.jpg
│   │   └── ...
│   ├── val/
│   │   ├── img1.jpg
│   │   └── ...
│   └── test/
│       ├── img1.jpg
│       └── ...
└── labels/
    ├── train/
    │   ├── img1.txt
    │   └── ...
    ├── val/
    │   ├── img1.txt
    │   └── ...
    └── test/
        ├── img1.txt
        └── ...
data_fire_smoke.yaml

data_fire_smoke.yaml 文件内容示例:

train: ./satellite_fire_smoke/images/train/
val: ./satellite_fire_smoke/images/val/

nc: 2  # 类别数量:Smoke 和 Wildfire
names: ['Smoke', 'Wildfire']

确保每个标签文件的内容符合YOLO格式,即每行包含一个对象的类别ID、中心点x, y坐标(归一化到0-1),宽度和高度(同样归一化)。

2. 安装依赖库

确保安装了必要的库:

pip install ultralytics opencv-python-headless tensorboard

3. 模型训练

创建一个Python脚本来开始训练过程。这里我们以YOLOv8为例说明如何训练模型。

训练脚本
from ultralytics import YOLO

def main_train():
    # 加载预训练的YOLOv8n模型或从头开始定义模型
    model = YOLO('yolov8n.yaml')  # 或者直接加载预训练权重,如 'yolov8n.pt'
    
    results = model.train(
        data='./data_fire_smoke.yaml',
        epochs=100,  # 根据需要调整
        imgsz=640,
        batch=16,
        project='./runs/detect',
        name='fire_smoke_detection',
        optimizer='SGD',
        device='0',  # 使用GPU编号
        save=True,
        cache=True,
        verbose=True,
    )

if __name__ == '__main__':
    main_train()

4. 推理与结果可视化

训练完成后,我们可以利用训练好的模型对新图片进行预测,并将结果可视化。

推理脚本
import cv2
from PIL import Image
from ultralytics import YOLO

model = YOLO('./runs/detect/fire_smoke_detection/weights/best.pt')

def detect_objects(image_path):
    results = model.predict(source=image_path)
    img = cv2.imread(image_path)
    for result in results:
        boxes = result.boxes.numpy()
        for box in boxes:
            r = box.xyxy
            x1, y1, x2, y2 = int(r[0]), int(r[1]), int(r[2]), int(r[3])
            label_id = int(box.cls)
            label = result.names[label_id]
            confidence = box.conf
            if confidence > 0.5:  # 设置置信度阈值
                cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)  # 绘制矩形框
                cv2.putText(img, f'{label} {confidence:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
    return img

# 示例调用
result_image = detect_objects('your_test_image.jpg')  # 确保测试图像路径正确
Image.fromarray(cv2.cvtColor(result_image, cv2.COLOR_BGR2RGB)).show()  # 使用PIL显示图像

5. 可视化界面

为了监控训练过程,可以使用TensorBoard。在训练脚本中添加 tensorboard=True 参数,然后运行以下命令启动TensorBoard:

tensorboard --logdir runs/

然后在浏览器中访问 http://localhost:6006 查看训练进度和结果。

训练YOLOv8模型用于卫星图像中的火点和烟雾检测涉及多个步骤,包括数据准备、环境搭建、配置超参数、训练模型、进行推理及性能评估。以下是详细的指南和代码示例:

1. 数据准备

格式转换

假设你的数据集包含两种标注格式(YOLO和VOC),我们将主要使用YOLO格式。如果需要从VOC转换为YOLO格式,可以编写一个简单的脚本完成转换。

import xml.etree.ElementTree as ET
import os

def convert_voc_to_yolo(voc_annot_path, yolo_annot_path, img_width, img_height):
    tree = ET.parse(voc_annot_path)
    root = tree.getroot()
    
    with open(yolo_annot_path, 'w') as f:
        for member in root.findall('object'):
            class_name = member[0].text
            if class_name == "Smoke":
                class_id = 0
            elif class_name == "Wildfire":
                class_id = 1
            
            x_min = int(member.find('bndbox/xmin').text)
            y_min = int(member.find('bndbox/ymin').text)
            x_max = int(member.find('bndbox/xmax').text)
            y_max = int(member.find('bndbox/ymax').text)
            
            x_center = ((x_min + x_max) / 2.0) / img_width
            y_center = ((y_min + y_max) / 2.0) / img_height
            width = (x_max - x_min) / img_width
            height = (y_max - y_min) / img_height
            
            f.write(f"{class_id} {x_center} {y_center} {width} {height}\n")

# 示例调用
convert_voc_to_yolo('path/to/voc_annotation.xml', 'path/to/yolo_annotation.txt', 640, 480)
数据划分

将数据划分为训练集、验证集和测试集。

import random
import shutil

data_dir = 'path/to/dataset'
images = [f for f in os.listdir(os.path.join(data_dir, 'images')) if f.endswith('.jpg')]
random.shuffle(images)

split_ratio = {'train': 0.7, 'val': 0.2, 'test': 0.1}
start_idx = 0
for set_name, ratio in split_ratio.items():
    end_idx = start_idx + int(len(images) * ratio)
    subset_images = images[start_idx:end_idx]
    subset_dir = os.path.join(data_dir, set_name)
    os.makedirs(subset_dir, exist_ok=True)
    for img in subset_images:
        shutil.move(os.path.join(data_dir, 'images', img), os.path.join(subset_dir, 'images', img))
        annot_file = img.replace('.jpg', '.txt')
        shutil.move(os.path.join(data_dir, 'labels', annot_file), os.path.join(subset_dir, 'labels', annot_file))
    start_idx = end_idx

2. 环境搭建

安装YOLOv8及相关依赖:

pip install ultralytics

3. 数据配置

创建data.yaml文件来定义数据集路径和类别信息:

train: path/to/train/images
val: path/to/val/images
nc: 2
names: ['Smoke', 'Wildfire']

4. 模型训练

使用YOLOv8进行训练:

from ultralytics import YOLO

model = YOLO('yolov8n.yaml')  # 或者选择其他预训练模型如'yolov8s.pt', 'yolov8m.pt'等
results = model.train(data='path/to/data.yaml', epochs=100, imgsz=640)

5. 配置超参数

train()函数中直接调整超参数,例如学习率、批次大小等:

results = model.train(data='path/to/data.yaml', epochs=100, imgsz=640, batch=16, lr0=0.01)

6. 模型推理

进行单张图片推理:

img_path = 'path/to/image.jpg'
results = model.predict(source=img_path, save=True)

批量推理:

folder_path = 'path/to/folder'
results = model.predict(source=folder_path, save=True)

7. 性能评估

评估模型性能通常涉及到计算准确率、召回率、F1分数等指标。可以在验证集上进行评估:

metrics = model.val()
print(metrics.box.map)  # mAP@0.5:0.95
print(metrics.box.map50)  # mAP@0.5
print(metrics.box.map75)  # mAP@0.75

YOLOv8训练卫星图像中火点和烟雾检测的模型,并对其进行推理和性能评估。仅供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值