当前位置: 首页 > news >正文

25/1/11 算法笔记 Yolov8物体识别

这几天做了给Yolov8检测物体的小任务,今天来做下总结。

首先介绍下整个Yolov8检测的步骤吧,安装库那些就不讲了。

这是我的文件包的对象树。

有images包,里面装了训练和验证的图像。

labels包,装了标注好的labels的txt文件,一开始标注好是json文件,要经过脚本转化,变成yolov能识别的txt文件。

这里我之前遇到一个麻烦,就是我已经开始是用多边形标注的,结果yolov8训练出来一坨,我查了查yolov8好像在目标识别这块不能用多边形。分割的话可以用多边形做。然后就改成矩形做了。

dataset.yaml文件

path: C:/Users/ren/Desktop/gm/guardrail_monitoring/datasets/guardrail
train: C:/Users/ren/Desktop/gm/guardrail_monitoring/datasets/guardrail/images/train
val: C:/Users/ren/Desktop/gm/guardrail_monitoring/datasets/guardrail/images/val# 类别信息
nc: 1
names: ['fence']

script文件里装的是运行脚本

train.py

from ultralytics import YOLOdef train_model():"""训练 YOLOv8 目标检测模型。"""# 加载预训练的目标检测模型model = YOLO("yolov8n.pt")  # 使用 YOLOv8 的目标检测模型# 训练模型results = model.train(data="C:/Users/ren/Desktop/gm/guardrail_monitoring/datasets/dataset.yaml",  # 数据集配置文件路径epochs=100,  # 训练轮数imgsz=640,   # 图像大小batch=16,    # 批量大小name="guardrail_detection",  # 训练任务名称patience=10,  # 早停机制,如果 10 轮验证集性能没有提升,则停止训练device="0",  # 使用 GPU 训练(如果有 GPU)workers=4,   # 数据加载的线程数optimizer="auto",  # 自动选择优化器lr0=0.01,    # 初始学习率lrf=0.01,    # 最终学习率weight_decay=0.0005,  # 权重衰减save=True,   # 保存训练结果save_period=10,  # 每 10 轮保存一次模型)print("训练完成!模型权重保存在 runs/detect/guardrail_detection/weights/ 目录下。")if __name__ == "__main__":train_model()

device = “0”就代表我用的GPU训练,记得要装pytorch的GPU版本。

训练完了之后权值会在run/../weight文件里面,选里面最好的best,吧它的地址换进,infer_image文件里面

from ultralytics import YOLO
from PIL import Image, ImageDraw, ImageFont
import osdef draw_boxes(image, boxes, labels, confidences):"""在图像上绘制边界框和标签。:param image: PIL 图像对象:param boxes: 边界框坐标列表:param labels: 类别标签列表:param confidences: 置信度列表:return: 绘制后的图像"""draw = ImageDraw.Draw(image)font = ImageFont.load_default()for box, label, confidence in zip(boxes, labels, confidences):x1, y1, x2, y2 = boxdraw.rectangle([x1, y1, x2, y2], outline="red", width=2)draw.text((x1, y1), f"{label} {confidence:.2f}", fill="red", font=font)return imagedef infer_image(image_path, output_dir):"""对单张图像进行推理。:param image_path: 图像路径:param output_dir: 输出目录"""# 加载训练好的模型model = YOLO("C:/Users/ren/Desktop/gm/runs/detect/guardrail_detection2/weights/best.pt")# 推理(降低置信度阈值)results = model(image_path, conf=0.1)  # 设置置信度阈值为 0.1# 处理结果for result in results:boxes = result.boxes.xyxy.tolist()  # 获取边界框坐标labels = result.boxes.cls.tolist()  # 获取类别 IDconfidences = result.boxes.conf.tolist()  # 获取置信度names = result.names  # 获取类别名称# 将类别 ID 转换为类别名称labels = [names[int(cls)] for cls in labels]# 打开图像image = Image.open(image_path)# 绘制标注if boxes:  # 如果有检测到目标image = draw_boxes(image, boxes, labels, confidences)else:print(f"{image_path} 未检测到目标!")# 创建输出目录(如果不存在)os.makedirs(output_dir, exist_ok=True)# 保存图像image_name = os.path.basename(image_path)  # 获取图像文件名output_path = os.path.join(output_dir, image_name)image.save(output_path)print(f"推理完成!结果保存在 {output_path}")def infer_validation_set(validation_dir, output_dir):"""对验证集进行批量推理。:param validation_dir: 验证集目录:param output_dir: 输出目录"""# 遍历验证集目录中的所有图像for image_name in os.listdir(validation_dir):if image_name.lower().endswith((".jpg", ".jpeg", ".png")):  # 仅处理图像文件image_path = os.path.join(validation_dir, image_name)infer_image(image_path, output_dir)if __name__ == "__main__":validation_dir = "C:/Users/ren/Desktop/gm/guardrail_monitoring/datasets/guardrail/images/val"  # 验证集目录output_dir = "C:/Users/ren/Desktop/outputs/images"  # 输出目录infer_validation_set(validation_dir, output_dir)

最后就训练好了Yolov8模型

明天来解析一下yolov8的源代码逻辑。

http://www.lryc.cn/news/519474.html

相关文章:

  • 水水水水水水
  • XS5037C一款应用于专业安防摄像机的图像信号处理芯片,支持MIPI和 DVP 接口,内置高性能ISP处理器,支持3D降噪和数字宽动态
  • 机器学习无处不在,AI顺势而为,创新未来
  • pandas处理json的相关操作
  • linux内存泄露定位过程(kmemleak和slab debug)
  • 2025年安卓面试复习总结
  • JS scrollIntoView 技巧揭秘:解锁网页流畅交互
  • 【Ubuntu 24.04】常见问题解决
  • 前端依赖安装指南
  • 灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设
  • ELK实战(最详细)
  • 《大型语言模型与强化学习的融合:探索问题的新解决方案与开源验证需求》
  • springboot 默认的 mysql 驱动版本
  • 10分钟快速了解OceanGPT(沧渊)
  • 蓝桥杯嵌入式速通(1)
  • Redis优化建议详解
  • ceph 存储 full 阈值调整
  • 后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权
  • Vue.js组件开发-实现组件切换效果的两种方法 条件渲染、动态组件
  • primitive 的 Appearance编写着色器材质
  • Seata搭建
  • 流浪猫流浪狗领养PHP网站源码
  • asammdf python 处理MF4文件库简介
  • 【“软件工程”基础概念学习】
  • 省森林防火应急指挥系统
  • 一键整理背包界面功能
  • 给DevOps加点料:融入安全性的DevSecOps
  • uniapp 使用 pinia 状态持久化
  • HarmonyOS鸿蒙-@State@Prop装饰器限制条件
  • Java Web开发进阶——Spring Boot与Spring Data JPA