如何根据基于训练好的无人机海滩垃圾检测数据集的YOLOv8权重文件 建立深度学习yolov8 无人机海滩垃圾检测系统
如何根据基于训练好的无人机海滩垃圾检测数据集的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权重文件建立一个深度学习无人机海滩垃圾检测系统。仅供参考学习使用。
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐
所有评论(0)