如何根据基于训练好的无人机海滩垃圾检测数据集的YOLOv8权重文件 建立深度学习yolov8 无人机海滩垃圾检测系统


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

无人机海洋(海滩)垃圾检测数据集
在这里插入图片描述

无人机:DJI Mavic 2
数据类型:分类后的图片
总内存大小:1949张
图片分辨率:640*640,2K
采集时间:2023.07
采集高度:30~60m
采集角度:90度
总类别:垃圾
细分类别:
Glass,Plastic Bottle,Retort Pouch,Take-away Container,Tin/Aluminium Cans在这里插入图片描述

应用场景:用于环保,海洋,河道水利低空目标检测等领域
在这里插入图片描述

无人机海洋(海滩)垃圾检测数据集,使用YOLOv8来训练一个模型,并建立一个系统用于识别和分类不同类型的海洋垃圾。以下是详细的步骤,包括数据集准备与预处理、创建data.yaml文件、环境搭建、模型训练、推理与部署、性能评估以及模型导出。

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

1. 数据集准备与预处理

假设你的数据集已经按照以下结构组织:

beach_waste_dataset/
├── images/
│   ├── train/
│   ├── val/
│   └── test/
└── labels/
    ├── train/
    ├── val/
    └── test/

确保所有的图像文件和对应的YOLO格式标签文件(.txt)都已正确命名并放置在相应的目录中。如果尚未划分数据集,可以参考之前提供的Python脚本进行划分。

2. 创建 data.yaml 文件

在项目根目录下创建一个 data.yaml 文件,用于定义数据集路径、类别数量及名称等信息。内容如下:

train: ./beach_waste_dataset/images/train
val: ./beach_waste_dataset/images/val
test: ./beach_waste_dataset/images/test

nc: 5 # 类别数量
names: ['Glass', 'Plastic Bottle', 'Retort Pouch', 'Take-away Container', 'Tin/Aluminium Cans'] # 类别名称

3. 环境搭建

安装必要的依赖库,特别是Ultralytics YOLOv8:

pip install ultralytics opencv-python

4. 模型训练

加载YOLOv8并使用上面创建的data.yaml进行模型训练。下面是一个简单的Python脚本示例:

from ultralytics import YOLO

# 加载YOLOv8模型,可以选择不同尺寸如'n' (nano), 's' (small), 'm' (medium), 'l' (large), 'x' (extra-large)
model = YOLO('yolov8n.yaml')  # 或者直接加载预训练模型例如 'yolov8n.pt'

# 开始训练
results = model.train(data='path/to/data.yaml', epochs=100, imgsz=640, batch=16)

# 注意:可以根据需要调整参数,比如增加epoch数量、修改学习率等

5. 推理与部署

完成训练后,可以使用模型对新的图像或视频流进行推理。这里提供了一个简单的例子,演示如何对单张图像进行检测:

import cv2

def detect_beach_waste(image_path):
    # 读取图像
    img = cv2.imread(image_path)
    
    # 使用模型进行预测
    results = model(img)  # 返回的结果包含边界框、置信度等信息
    
    for result in results:
        boxes = result.boxes  # 获取所有检测到的对象的边界框
        for box in boxes:
            x1, y1, x2, y2, confidence, class_id = box.xyxy.tolist() + [box.conf.item(), int(box.cls.item())]
            label = model.names[class_id]  # 根据class_id获取类别名称
            
            print(f"Detected {label} at ({x1}, {y1}) - ({x2}, {y2}), Confidence: {confidence}")
            
            # 在原图上绘制边界框和标签
            cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
            cv2.putText(img, f'{label}: {confidence:.2f}', (int(x1), int(y1)-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2)
    
    # 显示结果图像
    cv2.imshow('Beach Waste Detection', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

对于实时视频流(比如无人机实时传输的视频),可以对上述代码稍作修改,以从摄像头或视频文件中读取帧并进行检测:

cap = cv2.VideoCapture('video.mp4')  # 或者使用数字索引如0来捕获摄像头视频流

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    # 使用模型进行预测
    results = model(frame)
    
    for result in results:
        boxes = result.boxes
        for box in boxes:
            x1, y1, x2, y2, confidence, class_id = box.xyxy.tolist() + [box.conf.item(), int(box.cls.item())]
            label = model.names[class_id]
            
            # 绘制边界框和标签
            cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
            cv2.putText(frame, f'{label}: {confidence:.2f}', (int(x1), int(y1)-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2)
    
    # 显示帧
    cv2.imshow('Beach Waste Detection', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

6. 性能评估

使用验证集评估模型性能:

yolo task=detect mode=val model=path/to/best.pt data=path/to/data.yaml

它会输出 mAP、Precision、Recall 等指标。

7. 模型导出

如果你想将模型导出为其他格式(如ONNX),以便于部署在不同的环境中,可以使用以下命令:

yolo export model=path/to/best.pt format=onnx

支持的格式包括:onnx, engine(TensorRT), coreml, tflite, pb(tensorflow) 等。

如何根据基于训练好的无人机海滩垃圾检测数据集的YOLOv8权重文件 建立深度学习yolov8 无人机海滩垃圾检测系统

要基于训练好的YOLOv8权重文件建立一个深度学习无人机海滩垃圾检测系统,你需要完成以下几个步骤:加载模型、实现推理逻辑、处理输入数据(如图像或视频流)、结果展示以及系统的部署。以下是详细的指南和代码示例。

1. 加载训练好的模型

首先确保你的环境中安装了必要的依赖库:

pip install ultralytics opencv-python

然后,使用训练好的权重文件(例如best.pt)来加载模型:

from ultralytics import YOLO

# 加载训练好的模型
model = YOLO('path/to/your/best.pt')

2. 实现推理逻辑

编写代码以处理无人机拍摄的图像或视频,并利用模型进行预测。这里提供了一个简单的例子,演示如何对单张图像进行检测:

import cv2

def detect_beach_waste(image_path):
    # 读取图像
    img = cv2.imread(image_path)
    
    # 使用模型进行预测
    results = model(img)  # 返回的结果包含边界框、置信度等信息
    
    for result in results:
        boxes = result.boxes  # 获取所有检测到的对象的边界框
        for box in boxes:
            x1, y1, x2, y2, confidence, class_id = box.xyxy.tolist() + [box.conf.item(), int(box.cls.item())]
            label = model.names[class_id]  # 根据class_id获取类别名称
            
            print(f"Detected {label} at ({x1}, {y1}) - ({x2}, {y2}), Confidence: {confidence}")
            
            # 在原图上绘制边界框和标签
            cv2.rectangle(img, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
            cv2.putText(img, f'{label}: {confidence:.2f}', (int(x1), int(y1)-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2)
    
    # 显示结果图像
    cv2.imshow('Beach Waste Detection', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()

对于实时视频流(比如无人机实时传输的视频),可以对上述代码稍作修改,以从摄像头或视频文件中读取帧并进行检测:

cap = cv2.VideoCapture('video.mp4')  # 或者使用数字索引如0来捕获摄像头视频流

while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break
    
    # 使用模型进行预测
    results = model(frame)
    
    for result in results:
        boxes = result.boxes
        for box in boxes:
            x1, y1, x2, y2, confidence, class_id = box.xyxy.tolist() + [box.conf.item(), int(box.cls.item())]
            label = model.names[class_id]
            
            # 绘制边界框和标签
            cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
            cv2.putText(frame, f'{label}: {confidence:.2f}', (int(x1), int(y1)-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0,255,0), 2)
    
    # 显示帧
    cv2.imshow('Beach Waste Detection', frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

3. 系统部署

为了将这个检测系统部署到实际应用中,可以根据具体需求选择不同的部署方式:

  • Web服务:使用Flask或Django等框架创建一个Web服务,通过API接收图片或视频流并返回检测结果。

    示例:使用Flask创建一个简单的Web服务

    from flask import Flask, request, jsonify
    import numpy as np
    from PIL import Image
    import io
    
    app = Flask(__name__)
    
    @app.route('/detect', methods=['POST'])
    def detect():
        if 'image' not in request.files:
            return jsonify({'error': 'No image provided'}), 400
        
        file = request.files['image']
        img_bytes = file.read()
        img = Image.open(io.BytesIO(img_bytes))
        
        # 转换为适合YOLO模型输入的格式
        img_array = np.array(img)
        
        # 使用模型进行预测
        results = model(img_array)
        
        detections = []
        for result in results:
            for box in result.boxes:
                x1, y1, x2, y2, confidence, class_id = box.xyxy.tolist() + [box.conf.item(), int(box.cls.item())]
                detections.append({
                    'bbox': [x1, y1, x2, y2],
                    'confidence': confidence,
                    'class': model.names[class_id]
                })
        
        return jsonify(detections)
    
    if __name__ == '__main__':
        app.run(host='0.0.0.0', port=5000)
    
  • 边缘设备部署:如果目标是部署在无人机或其他嵌入式系统上,考虑优化模型以便于在资源受限的设备上运行,或者使用专门的硬件加速器(如NVIDIA Jetson系列)。

  • 云端解决方案:利用云服务提供商(如AWS, Azure)提供的计算资源,构建基于容器(如Docker)的微服务架构。

4. 性能评估

使用验证集评估模型性能:

yolo task=detect mode=val model=path/to/best.pt data=path/to/data.yaml

它会输出 mAP、Precision、Recall 等指标。

5. 模型导出

如果你想将模型导出为其他格式(如ONNX),以便于部署在不同的环境中,可以使用以下命令:

yolo export model=path/to/best.pt format=onnx

支持的格式包括:onnx, engine(TensorRT), coreml, tflite, pb(tensorflow) 等。

总结

通过以上步骤,可以根据基于训练好的YOLOv8权重文件建立一个深度学习无人机海滩垃圾检测系统。仅供参考学习使用。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐