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的源代码逻辑。
相关文章:
25/1/11 算法笔记 Yolov8物体识别
这几天做了给Yolov8检测物体的小任务,今天来做下总结。 首先介绍下整个Yolov8检测的步骤吧,安装库那些就不讲了。 这是我的文件包的对象树。 有images包,里面装了训练和验证的图像。 labels包,装了标注好的labels的txt文件&…...
水水水水水水
为了拿推广卷,但不想把我原本完整的文章拆成零散的多篇,只能出此下策随便发一篇,认真写的都笔记专栏里 网络技术:数字时代的基础设施 在当今社会,网络技术无疑是推动现代生活和经济发展的核心动力之一。从简单的信息传…...
XS5037C一款应用于专业安防摄像机的图像信号处理芯片,支持MIPI和 DVP 接口,内置高性能ISP处理器,支持3D降噪和数字宽动态
XS5037C是一款应用于专业安防摄像机的图像信号处理芯片,支持MIPI和 DVP 接口,最 大支持 5M sensor接入。内置高性能ISP处理器,支持3D降噪和数字宽动态。标清模拟输出支 持960H,高清模拟输出支持HDCCTV 720P/1080P/4M/5M。高度集成…...
机器学习无处不在,AI顺势而为,创新未来
机器学习无处不在: 1、推荐广告和搜索:推广搜不分家,属于数据科学中,对人的行为进行理解 2、计算机视觉CV:对人看到的东西进行理解 3、自然语言处理:对人交流的东西进行理解 4、数据挖掘和数据分析&…...
pandas处理json的相关操作
Pandas 是一个强大的数据处理库,它提供了丰富的功能来处理 JSON 数据。以下是 Pandas 中处理 JSON 的所有常见操作: 1. 读取 JSON 文件 使用 pandas.read_json() 函数可以从 JSON 文件或 JSON 字符串中读取数据。 从 JSON 文件读取 import pandas as …...
linux内存泄露定位过程(kmemleak和slab debug)
1,当遇到内存增加过多时,或者由于内存导致系统oom时我们怎么定位呢,定位时需要确认是内核态还是用户态内存泄露。 排查步骤 top查看VIRT和RES内存 rootubuntu2004:~# top top - 21:05:39 up 7 min, 1 user, load average: 5.01, 4.09, 2.…...
2025年安卓面试复习总结
文章目录 深入理解并熟练运用常用设计模式及反射原理,能够自定义注解及泛型,多次通过设计模式对 app 代码进行高效重构,显著提升代码的可维护性与扩展性。设计模式自定义注解泛型Kotlin泛型 精通多线程原理,对 ThreadPoolExecutor…...
JS scrollIntoView 技巧揭秘:解锁网页流畅交互
文章目录 一.基本概念二.语法和参数基本语法:element.scrollIntoView();参数详解: 三.应用场景和示例场景一:点击目录点位到相应的位置React 示例代码:Vue3 示例代码: 场景二:轮播图定位到指定图片示例代码…...
【Ubuntu 24.04】常见问题解决
1.24开启3D加速黑屏 参考文章:Ubuntu24开机黑屏,VMware卡死,虚拟机繁忙解决方案 没有3D加速就没有动画,所以我们需要开启3D加速,但是直接开启3D加速会黑屏 由于Ubuntu24内部的图形加速驱动异常,因此需要更新…...
前端依赖安装指南
前端依赖安装指南 一、NVM管理工具安装 1.在 Windows 上安装 下载 NVM for Windows 的安装程序:(最新版本可以在 nvm-windows Releases 页面 找到)运行下载的安装程序并按步骤操作。 2.配置 NVM exe安装自动配置环境变量 3. 验证 NVM 安装 验证 NVM 是否成功…...
灌区闸门自动化控制系统-精准渠道量测水-灌区现代化建设
项目背景 本项目聚焦于黑龙江某一灌区的现代化改造工程,该灌区覆盖广阔,灌溉面积高达7.5万亩,地域上跨越6个乡镇及涵盖17个村庄。项目核心在于通过全面的信息化建设,强力推动节水灌溉措施的实施,旨在显著提升农业用水的…...
ELK实战(最详细)
一、什么是ELK ELK是三个产品的简称:ElasticSearch(简称ES) 、Logstash 、Kibana 。其中: ElasticSearch:是一个开源分布式搜索引擎Logstash :是一个数据收集引擎,支持日志搜集、分析、过滤,支持大量数据…...
《大型语言模型与强化学习的融合:探索问题的新解决方案与开源验证需求》
强化学习在2020年代初期通过开源项目如CleanRL的多学习者PPO算法取得了显著进展,但在语言模型领域未能充分利用其潜力 1. 开源项目CleanRL的贡献 CleanRL 是一个致力于提供简单、高效且易于理解的强化学习(RL)算法实现的开源项目。该项目通…...
springboot 默认的 mysql 驱动版本
本案例以 springboot 3.1.12 版本为例 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.1.12</version><relativePath/> </parent> 点击 spring-…...
10分钟快速了解OceanGPT(沧渊)
10分钟快速了解OceanGPT(沧渊) 海洋科学任务的大语言模型——OceanGPT OceanGPT是如何训练的?为了训练 OceanGPT (沧渊) ,收集了一个跨越多个领域的海洋科学语料库。由于每个子领域和主题都有其独特的数据特征和模式,因此提出了一个特定于领域的指令生成框架,称为 DoDirec…...
蓝桥杯嵌入式速通(1)
1.工程准备 创建一文件夹存放自己的代码,并在mdk中include上文件夹地址 把所有自身代码的头文件都放在headfile头文件中,之后只需要在新的文件中引用headfile即可 headfile中先提前可加入 #include "stdio.h" #include "string.h"…...
Redis优化建议详解
Redis优化建议详解 1. 内存优化 1.1 内存配置 设置最大内存 maxmemory 4gb 内存淘汰策略 maxmemory-policy allkeys-lru 样本数量 maxmemory-samples 51.2 内存优化策略 数据结构优化 使用压缩列表(ziplist)合理设置hash-max-ziplist-entries使用整数…...
ceph 存储 full 阈值调整
前言 在 Ceph 集群中,默认情况下,当某些 OSD(对象存储守护进程)的使用率达到 85% 时,系统会发出 nearfull 警告,并可能限制进一步的写入操作,以防止数据丢失或集群不稳定。 要允许在 OSD 使用率超过 85% 的情况下继续写入,您可以调整以下两个参数: mon_osd_nearful…...
后端技术选型 sa-token校验学习 下 结合项目学习 后端鉴权
目录 后端注册拦截器 实现对 WebMvcConfigurer 接口的类实现 静态变量 方法重写 注册 Spring Framework拦截器 Sa-Token中SaServletFilter拦截器 思考 为什么使用两个拦截器 1. Spring Framework 拦截器 2. SaServletFilter 为什么要注册两个拦截器? 总结 …...
Vue.js组件开发-实现组件切换效果的两种方法 条件渲染、动态组件
在Vue.js中,实现组件切换效果通常依赖于条件渲染或动态组件。 方法一:条件渲染 条件渲染使用v-if、v-else-if和v-else指令来根据条件展示或隐藏组件。这种方法适用于需要在不同条件下展示不同组件的场景。 <template><div><button cli…...
测试微信模版消息推送
进入“开发接口管理”--“公众平台测试账号”,无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息: 关注测试号:扫二维码关注测试号。 发送模版消息: import requests da…...
synchronized 学习
学习源: https://www.bilibili.com/video/BV1aJ411V763?spm_id_from333.788.videopod.episodes&vd_source32e1c41a9370911ab06d12fbc36c4ebc 1.应用场景 不超卖,也要考虑性能问题(场景) 2.常见面试问题: sync出…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
Keil 中设置 STM32 Flash 和 RAM 地址详解
文章目录 Keil 中设置 STM32 Flash 和 RAM 地址详解一、Flash 和 RAM 配置界面(Target 选项卡)1. IROM1(用于配置 Flash)2. IRAM1(用于配置 RAM)二、链接器设置界面(Linker 选项卡)1. 勾选“Use Memory Layout from Target Dialog”2. 查看链接器参数(如果没有勾选上面…...
从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...
JDK 17 新特性
#JDK 17 新特性 /**************** 文本块 *****************/ python/scala中早就支持,不稀奇 String json “”" { “name”: “Java”, “version”: 17 } “”"; /**************** Switch 语句 -> 表达式 *****************/ 挺好的ÿ…...
第 86 场周赛:矩阵中的幻方、钥匙和房间、将数组拆分成斐波那契序列、猜猜这个单词
Q1、[中等] 矩阵中的幻方 1、题目描述 3 x 3 的幻方是一个填充有 从 1 到 9 的不同数字的 3 x 3 矩阵,其中每行,每列以及两条对角线上的各数之和都相等。 给定一个由整数组成的row x col 的 grid,其中有多少个 3 3 的 “幻方” 子矩阵&am…...
全面解析各类VPN技术:GRE、IPsec、L2TP、SSL与MPLS VPN对比
目录 引言 VPN技术概述 GRE VPN 3.1 GRE封装结构 3.2 GRE的应用场景 GRE over IPsec 4.1 GRE over IPsec封装结构 4.2 为什么使用GRE over IPsec? IPsec VPN 5.1 IPsec传输模式(Transport Mode) 5.2 IPsec隧道模式(Tunne…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
让回归模型不再被异常值“带跑偏“,MSE和Cauchy损失函数在噪声数据环境下的实战对比
在机器学习的回归分析中,损失函数的选择对模型性能具有决定性影响。均方误差(MSE)作为经典的损失函数,在处理干净数据时表现优异,但在面对包含异常值的噪声数据时,其对大误差的二次惩罚机制往往导致模型参数…...
