博客
关于我
OpenCV与AI深度学习 | 实战—使用YOLOv8图像分割实现路面坑洞检测(步骤 + 代码)
阅读量:791 次
发布时间:2023-02-23

本文共 2556 字,大约阅读时间需要 8 分钟。

YOLOv8图像分割技术在路面坑洞检测中的应用

背景

路面坑洞是道路安全的重要隐患,直接威胁车辆行驶安全。如何快速、准确地检测路面坑洞,是解决这一问题的关键。YOLOv8(You Only Look Once version 8)作为一款高效的图像分割模型,凭借其强大的实时检测能力,被广泛应用于路面坑洞检测任务中。本文将详细介绍YOLOv8在路面坑洞检测中的应用流程,包括数据准备、模型训练和推理等关键步骤。

实现步骤

1. 准备数据集

本教程使用Pothole图像分割数据集,该数据集包含大量真实场景下的路面坑洞图像。数据集可通过Kaggle获取,下载完成后,需要从压缩包中提取文件夹。

2. 安装Ultralytics并导入必要的库

首先安装Ultralytics库:

pip install ultralytics

然后导入必要的库:

import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as snsimport osimport warningsfrom ultralytics import YOLOimport cv2from PIL import Imageimport yamlimport random

3. 设置数据路径

将数据路径设置为自己的路径:

dataDir = '/content/Pothole_Segmentation_YOLOv8/'

4. 加载并绘制图像

设置训练图像路径:

trainImagePath = os.path.join(dataDir, 'train', 'images')

列出图像文件:

imageFiles = [f for f in os.listdir(trainImagePath) if f.endswith('.jpg')]

选择随机图像:

randomImages = random.sample(imageFiles, 15)

绘制图像:

plt.figure(figsize=(10, 10))for i, image_file in enumerate(randomImages):    image_path = os.path.join(trainImagePath, image_file)    image = Image.open(image_path)    plt.subplot(3, 5, i + 1)    plt.imshow(image)    plt.axis('off')plt.suptitle('Random Selection of Dataset Images', fontsize=24)plt.tight_layout()plt.show()

5. 下载并训练YOLOv8分割模型

加载预训练权重:

model = YOLO('yolov8n-seg.pt')

训练模型:

yamlFilePath = os.path.join(dataDir, 'data.yaml')results = model.train(    data= yamlFilePath,    epochs= 30,    imgsz= 640,    batch= 32,    optimizationr= 'auto',    lr0= 0.0001,    lrf= 0.01,    dropout= 0.25,    device= 0,    seed= 42)

6. 加载性能最佳的模型

加载最佳模型:

bestModelpath = '/content/runs/segment/train/weights/best.pt'bestModel = YOLO(bestModelpath)

7. 加载图像做推理

设置验证图像路径:

validImagePath = os.path.join(dataDir, 'valid', 'images')

列出验证图像文件:

imageFiles = [f for f in os.listdir(validImagePath) if f.endswith('.jpg')]

选择随机图像:

numImages = len(imageFiles)selectedImage = [imageFiles[i] for i in range(0, numImages, numImages // 9)]

绘制推断图像:

fig, axes = plt.subplots(3, 3, figsize=(10, 10))fig.suptitle('Validation Set Inferences')for i, ax in enumerate(axes.flatten()):    imagePath = os.path.join(validImagePath, selectedImage[i])    results = bestModel.predict(source= imagePath, imgsz=640)    annotatedImage = results[0].plot()    annotatedImageRGB = cv2.cvtColor(annotatedImage, cv2.COLOR_BGR2RGB)    ax.imshow(annotatedImageRGB)    ax.axis('off')plt.tight_layout()plt.show()

加载视频做推理

import shutilvideoPath = '/content/Pothole_Segmentation_YOLOv8/sample_video.mp4'bestModel.predict(source=videoPath, save=True)

结论

通过本文的详细介绍,我们可以看到YOLOv8图像分割技术在路面坑洞检测中的巨大潜力。从数据准备到模型训练,再到推理验证,全流程的实现展示了YOLOv8在实际应用中的强大能力。

转载地址:http://krsfk.baihongyu.com/

你可能感兴趣的文章
Objective-C实现高精度减法(附完整源码)
查看>>
Objective-C实现高精度除法(附完整源码)
查看>>
Objective-C实现鸡兔同笼问题(附完整源码)
查看>>
Objective-c正确的写法单身
查看>>
Objective-C语法之代码块(block)的使用
查看>>
ObjectMapper - 实现复杂类型对象反序列化(天坑!)
查看>>
ObjectProperty 类的使用
查看>>
Objects.equals有坑
查看>>
Object常用方法
查看>>
Object方法的finalize方法
查看>>
Object类有哪些方法,hashcode方法的作用,为什么要重写hashcode方法?
查看>>
Objenesis创建类的实例
查看>>
OBObjective-c 多线程(锁机制) 解决资源抢夺问题
查看>>
OBS studio最新版配置鉴权推流
查看>>
Obsidian的使用-ChatGPT4o作答
查看>>
Obsidian笔记记录GPT回复的数学公式无缝转化插件Katex to mathjax
查看>>
ObsoleteAttribute 可适用于除程序集、模块、参数或返回值以外的所有程序元素。 将元素标记为过时可以通知用户:该元素在产品的未来版本中将被移除。...
查看>>
OC block声明和使用
查看>>
OC Xcode快捷键
查看>>
oc 中的.m和.mm文件区别
查看>>