yolov10 学习笔记
目录
推理代码,source可以是文件名,路径,
预测可视化:
预测可视化加nms
训练自己的数据集,
训练一段时间报错:dill库
解决方法:
推理代码,source可以是文件名,路径,
保存结果:
from ultralytics import YOLOv10# model = YOLOv10.from_pretrained('jameslahm/yolov10{n/s/m/b/l/x}')
# or
# wget https://github.com/THU-MIG/yolov10/releases/download/v1.1/yolov10{n/s/m/b/l/x}.pt
model = YOLOv10('yolov10s.pt')# model.val(data='coco.yaml', batch=256)source = 'http://images.cocodataset.org/val2017/000000039769.jpg'
source = 'F:\data\qijun\dao\pics_re_1'
model.predict(source=source, save=True)
预测可视化:
import cv2
import time
# import torch
from ultralytics import YOLOv10cv2.namedWindow('window', cv2.WINDOW_NORMAL)
cv2.resizeWindow('window', 640, 480)model = YOLOv10('yolov10s.pt')# 打开摄像头
cap = cv2.VideoCapture(0)# 检查摄像头是否打开
if not cap.isOpened():print("无法打开摄像头")exit()# 获取视频帧的宽度和高度
width = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
height = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
print(width, height)# 计时器和FPS初始化
prev_time = 0
fps = 0while True:# 读取帧ret, frame = cap.read()if not ret:print("无法读取帧")break# 改变输入图像尺寸,加快推理速度# frame = cv2.resize(frame, (width // 4, height // 4))# frame = cv2.resize(frame,(128,128) )prev_time = time.time()# 将帧传递给模型进行预测,并明确指定使用CPUresults = model(frame, device='0')curr_time = time.time()# 获取预测结果并绘制在帧上for result in results:boxes = result.boxes.xyxy.cpu().numpy()confidences = result.boxes.conf.cpu().numpy()class_ids = result.boxes.cls.cpu().numpy().astype(int)for i in range(len(boxes)):box = boxes[i]x1, y1, x2, y2 = map(int, box[:4])confidence = confidences[i]class_id = class_ids[i]label = result.names[class_id]cv2.rectangle(frame, (x1, y1), (x2, y2), (0, 255, 0), 2)cv2.putText(frame, f'{label} {confidence:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (36, 255, 12), 1)fps = (curr_time - prev_time)cv2.putText(frame, f'FPS: {fps:.2f}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)cv2.imshow('window', frame)if cv2.waitKey(1) & 0xFF == ord('q'):break# 释放摄像头并关闭窗口
cap.release()
cv2.destroyAllWindows()
预测可视化加nms
import cv2
import timeimport numpy as np
import torchfrom img_reader import ImgReader
# import torch
from ultralytics import YOLOv10# cv2.namedWindow('window', cv2.WINDOW_NORMAL)
# cv2.resizeWindow('window', 640, 480)# model = YOLOv10('yolov10s.pt')
model = YOLOv10('runs/train/exp2/weights/best.pt')# 计时器和FPS初始化
prev_time = 0
fps = 0f_type='img'
source = r'B:\project\qijun\data\dataSet-coins\images\train'# file_reader = ImgReader(source, f_type=f_type)f_type='cam'
source=0
f_type='mp4'
source = r"B:\project\qijun\data\test\shuiguo1.mp4"
file_reader = ImgReader(source, f_type=f_type)for img_i in range(file_reader.total_frames):img_o, img_index, img_file = file_reader.get_img()if max(img_o.shape[:2]) > 1500:x_scale = 1500 / max(img_o.shape[:2])img_o = cv2.resize(img_o, None, fx=x_scale, fy=x_scale, interpolation=cv2.INTER_AREA)img=img_oframe=img_o.copy()if img_file is not None:print(img_file)# 改变输入图像尺寸,加快推理速度# frame = cv2.resize(frame, (width // 4, height // 4))# frame = cv2.resize(frame,(128,128) )prev_time = time.time()# 将帧传递给模型进行预测,并明确指定使用CPUresults = model(frame, device='0')curr_time = time.time()# 获取预测结果并绘制在帧上for result in results:boxes = result.boxes.xyxy.cpu().numpy()confidences = result.boxes.conf.cpu().numpy()class_ids = result.boxes.cls.cpu().numpy().astype(int)for i in range(len(boxes)):box = boxes[i]x1, y1, x2, y2 = map(int, box[:4])confidence = confidences[i]class_id = class_ids[i]label = result.names[class_id]cv2.rectangle(img, (x1, y1), (x2, y2), (0, 0, 255), 3)# cv2.putText(img, f'{label} {confidence:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (36, 255, 12), 1)final_boxes = []final_confidences = []final_class_ids = []# 对每个类别单独进行NMSunique_classes = set(class_ids)for cls in unique_classes:cls_indices = (class_ids == cls)# 提取当前类别的boxes, confidencesboxes_cls = torch.tensor(boxes[cls_indices])confidences_cls = torch.tensor(confidences[cls_indices])# 对当前类别进行NMSkeep_indices = torch.ops.torchvision.nms(boxes_cls, confidences_cls, iou_threshold=0.5) # 设置你的IoU阈值num_filtered = len(boxes_cls) - len(keep_indices)if num_filtered>0:print(f"Class {cls}: {num_filtered} boxes filtered out by NMS")# 过滤当前类别的boxes, confidences, class_idsfinal_boxes.append(boxes_cls[keep_indices].numpy())final_confidences.append(confidences_cls[keep_indices].numpy())final_class_ids.append([cls] * len(keep_indices))# 合并所有类别的结果final_boxes = np.concatenate(final_boxes, axis=0)final_confidences = np.concatenate(final_confidences, axis=0)final_class_ids = np.concatenate(final_class_ids, axis=0)for i in range(len(final_boxes)):box = final_boxes[i]x1, y1, x2, y2 = map(int, box[:4])confidence = final_confidences[i]class_id = final_class_ids[i]label = result.names[class_id]cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)cv2.putText(img, f'{label} {confidence:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (36, 255, 12), 1)# for result in results:# boxes = result.boxes.xyxy.cpu().numpy()# confidences = result.boxes.conf.cpu().numpy()# class_ids = result.boxes.cls.cpu().numpy().astype(int)## for i in range(len(boxes)):# box = boxes[i]# x1, y1, x2, y2 = map(int, box[:4])# confidence = confidences[i]# class_id = class_ids[i]# label = result.names[class_id]# cv2.rectangle(img, (x1, y1), (x2, y2), (0, 255, 0), 2)# cv2.putText(img, f'{label} {confidence:.2f}', (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (36, 255, 12), 1)fps = (curr_time - prev_time)cv2.putText(img, f'{img_i} FPS: {fps:.2f}', (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 1)cv2.imshow('window', img)waitkey=0if f_type == 'cam':waitkey=2if cv2.waitKey(waitkey) & 0xFF == ord('q'):break
训练自己的数据集,
原版标签是txt格式
我下载了完整代码,自己修改数据集
https://download.csdn.net/download/qq_38408785/89356134
from ultralytics import YOLOv10if __name__ == '__main__':model = YOLOv10('ultralytics/cfg/models/v10/yolov10n.yaml')model.load('yolov10n.pt') # loading pretrain weightsmodel.train(data='data/NEU-DET.yaml',cache=False,imgsz=640,epochs=200,batch=16,close_mosaic=10,device='0',optimizer='SGD', # using SGDproject='runs/train',name='exp',)
训练一段时间报错:dill库
File "D:\ProgramData\miniconda3\envs\py310\lib\pickle.py", line 603, in saveself.save_reduce(obj=obj, *rv)File "D:\ProgramData\miniconda3\envs\py310\lib\pickle.py", line 717, in save_reducesave(state)File "D:\ProgramData\miniconda3\envs\py310\lib\site-packages\dill\_dill.py", line 388, in saveStockPickler.save(self, obj, save_persistent_id)File "D:\ProgramData\miniconda3\envs\py310\lib\pickle.py", line 560, in savef(self, obj) # Call unbound method with explicit selfFile "D:\ProgramData\miniconda3\envs\py310\lib\site-packages\dill\_dill.py", line 1186, in save_module_dictStockPickler.save_dict(pickler, obj)File "D:\ProgramData\miniconda3\envs\py310\lib\pickle.py", line 972, in save_dictself._batch_setitems(obj.items())File "D:\ProgramData\miniconda3\envs\py310\lib\pickle.py", line 997, in _batch_setitemssave(k)File "D:\ProgramData\miniconda3\envs\py310\lib\site-packages\dill\_dill.py", line 388, in saveStockPickler.save(self, obj, save_persistent_id)File "D:\ProgramData\miniconda3\envs\py310\lib\pickle.py", line 539, in savepid = self.persistent_id(obj)File "D:\ProgramData\miniconda3\envs\py310\lib\site-packages\torch\serialization.py", line 622, in persistent_idstorage_type = normalize_storage_type(type(obj))File "D:\ProgramData\miniconda3\envs\py310\lib\site-packages\torch\serialization.py", line 226, in normalize_storage_typereturn getattr(torch, storage_type.__name__)
AttributeError: module 'torch' has no attribute 'str'
解决方法:
pip install dill -U
升级为dill-0.3.8 后报错没有了。
相关文章:
yolov10 学习笔记
目录 推理代码,source可以是文件名,路径, 预测可视化: 预测可视化加nms 训练自己的数据集, 训练一段时间报错:dill库 解决方法: 推理代码,source可以是文件名,路径…...
NAT概述
NAT概念 NAT(Network Address Translation,网络地址转换)是一种用于修改网络地址信息的技术,主要用于在路由器或防火墙上进行地址转换,以解决 IPv4 地址短缺问题、提高网络安全性以及实现私有网络与公有网络之间的通信…...
Ansys Mechanical|学习方法
Ansys Mechanical是Ansys的旗舰产品之一,涉及的学科体系全面丰富,包括的力学分支主要有理论力学,振动理论,连续介质力学,固态力学,物理力学,爆炸力学及应用力学等。 在自媒体及数字经济飞速发展…...
热门开源项目ChatTTS: 国内语音技术突破,实现弯道超车
✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…...
环形链表2证明
解法 快慢指针相遇后,其中一个指回头部,然后同步前进 代码 /*** Definition for singly-linked list.* struct ListNode {* int val;* ListNode *next;* ListNode(int x) : val(x), next(NULL) {}* };*/ class Solution { public:ListNod…...
fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden的解决方案
零、实验报告地址 计算机视觉实验二:基于支持向量机和随机森林的分类(Part one: 编程实现基于支持向量机的人脸识别分类 )-CSDN博客 一、代码报错 fetch_lfw_people()报错urllib.error.HTTPError: HTTP Error 403: Forbidden 二、报错原因 通常是由于访问权限不足导致的…...
Verilog-Behavior Level 和 RTL Level 和 GATE Level的区别
硬件设计中对硬件的描述可以具有不同的抽象级别,以Verilog为例: Behavior Level。描述的是硬件的行为,当我们在看到如下关键字时就是行为级别的代码:#,wait,while,force,release等&…...
华为OD机考题HJ1 字符串最后一个单词的长度
前言 描述 计算字符串最后一个单词的长度,单词以空格隔开,字符串长度小于5000。(注:字符串末尾不以空格为结尾) 输入描述: 输入一行,代表要计算的字符串,非空,长度小…...
C语言---------深入理解指针
目录 一、字符指针 二、指针数组: 三、数组指针: 1、定义: 2、&数组名和数组名区别: 3、数组指针的使用: 四、数组参数,指针参数: 1、一维数组传参: 2、二维数组传参&am…...
C++ 算法教程
归并排序 #include<iostream> using namespace std; template <class T> void Merge(T data[],int start,int mid,int end) {int len1 mid - start 1, len2 end - mid;int i, j, k;T* left new int[len1];T* right new int[len2];for (i 0; i < len1; i)…...
【支持向量机】问题梳理
学完支持向量机后我有些地方不太清楚,故做如下梳理: 1.为什么支持向量机模型认为一个点划分正确的标志是y(wxb)>1呢,为什么不是y(wxb)>0,比如y为1,wxb为0.5,大于0,则预测正确。 2.所以意思…...
车载网络安全指南 网络安全框架(二)
返回总目录->返回总目录<- 目录 一、概述 二、网络安全组织管理 三、网络安全活动 四、支撑保障 一、概述 汽车电子系统网络安全活动框架包含汽车电子系统网络安全活动、组织管理以及支持保障。其中,网络安全管理活动是框架的核心,主要指汽车电子系统生命周期各阶段…...
元数据、数据元、数据字典、数据模型及元模型的区别详解
在数据管理和分析领域,有许多相似的概念,如元数据、数据元、数据字典、数据模型和元模型。这些概念的定义和应用往往容易混淆。 数据元 数据元是通过一系列属性描述的数据单元,包括定义、标识、表示以及允许值等。这些属性帮助我们理解和使用…...
【百度智能体】零代码创建职场高情商话术助手智能体
一、前言 作为一个程序猿,工科男思维,走上职场后,总会觉得自己不会处理人际关系,容易背锅说错话,这时候如果有个助手能够时时刻刻提醒自己该如何说话如何做事情就好了。 而我们现在可以通过百度文心智能体平台构建各…...
实战项目: 负载均衡
0. 前言 这个项目使用了前后端,实现一个丐版的LeetCode刷题网站,并根据每台主机的实际情况,选择对应的主机,负载均衡的调度 0.1 所用技术与开发环境 所用技术: C STL 标准库 Boost 准标准库 ( 字符串切割 ) cpp- httplib 第三方开源网络库 ctemplate 第三方开源前端网…...
运维监控系统
做监控系统集成,持续更新ing 1.Prometheus k8s安装prometheusdocker部署prometheusthanos实现prometheus高可用部署 2.Grafana docker安装grafanagrafana的admin密码忘记了grafana使用mysql远程存储 3.Alertmanager 4.Consul 5.夜莺系统 6.时序数据库 6.1 …...
第3章 Unity 3D着色器系统
3.1 从一个外观着色器程序谈起 新建名为basic_diffuse.shader的文件,被一个名为basic_diffuse.mat的材质文件所引用,而basic_diffuse.mat文件则被场景中名为Sphere的game object的MeshRenderer组件所使用。 basic_diffuse.shader代码文件的内容如下所示…...
Qt项目天气预报(1) - ui界面搭建
ui中部 效果演示 ui效果 显示效果 控件列表 配合右图查看 居中对齐-label 设置label居中对齐(别傻傻的空格对齐了) 间距配置 widget03 外围的widget对象: 包含label 和 widget0301,如下图 widget0301 内围的widget对象,如下图 样式表 widget03 …...
一、从C语言到C++(一)
一、从C语言到C(一) C介绍C语言和C的联系C介绍 头文件命名空间定义命名空间使用命名空间中的名称使用using声明或指令命名空间与C语言的对比给命名空间起别名注意事项std 标准输入输出std::endl使用std::cout进行输出使用std::cin进行输入格式化输出 C介…...
MySQL(5)
聚合函数 GROUP BY 的使用 需求:查询各个部门的平均工资,最高工资SELECT department_id,AVG(salary),SUM(salary)FROM employeesGROUP BY department_id;需求:查询各个job_id的平均工资SELECT job_id,AVG(salary)FROM employeesGROUP BY jo…...
区块链之快照
定义 区块链快照是区块链技术中一个非常重要的概念,它可以帮助区块链系统提高性能和数据管理效率。 什么是区块链快照 区块链快照是指在某个时间点对整个区块链的状态进行保存和备份的过程。 快照会记录区块链上所有账户的余额、合约状态等信息,并将其序列化存储起来。 这样…...
自学前端第一天
HTML标签 ’HTML‘全程是‘hypertext Markup langage(超文本标记语言) HTML通过一系列的’标签(也称为元素)‘来定义文本、图像、链接。HTML标签是由尖括号包围的关键字。 标签通常成对存在,包括开始标签和结束标签(也称为双标签…...
SQL Server几种琐
SQL Server 中的锁类型主要包括以下几种,它们用于控制并发访问和数据一致性: 1. 共享锁(Shared Lock,S 锁): - 用于读取操作(如 SELECT 语句)。 - 允许多个事务同时读取同一资…...
redis 一些笔记1
redis 一、redis事务二、管道2.1 事务与管道的区别 三、主从复制3.13.2 权限细节3.3 基本操作命令3.4 常用3.4.1 一主几从3.4.2 薪火相传3.4.3 反客为主 3.5 步骤3.6 缺点 一、redis事务 放在一个队列里,依次执行,并不保证一致性。与mysql事务不同。 命…...
【计网复习】应用层总结(不含HTTP和错题重点解析)
应用层总结(不含HTTP和错题重点解析) 应用层简介 应用层的主要功能常见的应用层协议小林对于应用层通常的解释 网络应用模型 客户端-服务器模型(Client-Server Model, C/S) 特点优点缺点应用场景 对等网络模型(Peer-to…...
carbondata连接数优化
一,背景 carbondata的入库采用arbonData Thrift Server方式提供,由于存在异常的入库segments但是显示状态是success,所以每天运行另一个博客中的脚本,出现连接超时,运行不正常,排查是每天连接数太多&#x…...
云和运维(SRE)的半生缘-深读实证02
这个标题不算太夸张,云计算和很多IT岗位都有缘,但是和运维(SRE)岗位的缘分最深。 “深读实证”系列文章都会结合一些外部事件,点明分析《云计算行业进阶指南》书中的内容。本次分享介绍了下列内容: 我以运维…...
java基础操作5——java自定义获取任意年、月、日的起始和结束时间
在实际项目开发过程中,获取任意时间的起始和结束时间是常用操作,尤其对于统计业务来说,更是必要操作,理解了时间自定义的规律,对于开发人员的效率提升是大有裨益的。 一.获取任意年的起始和结束时间 1.获取任意年的起…...
【Java04】引用变量数组初始化的内存机制
引用类型数组指向的元素也是引用。其本质是: 由一个在栈上的引用数组变量指向一块堆内存;这块堆内存里存储的元素是引用,又分别指向其他堆内存。 class Person // Person是一个自定义的类 {public int age;puiblic double height;public vo…...
基于JSP的足球赛会管理系统
你好呀,我是计算机学长猫哥!如果有相关需求,文末可以找到我的联系方式。 开发语言:Java 数据库:MySQL 技术:JSP技术 工具:IDEA/Eclipse、Navicat、Maven 系统展示 首页 个人中心 球队介绍…...
企业网站建设费如何列支/网络推广怎么找客户
这是悦乐书的第306次更新,第325篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第173题(顺位题号是733)。图像由二维整数数组表示,每个整数表示图像的像素值(从0到65535)。给定表示泛洪填充的…...
做外汇需要了解的网站/seo优化一般包括哪些内容()
http://velocity.oreilly.com.cn/...
wordpress换域名把家/seo推广是做什么的
CORS(跨域资源共享,Cross-Origin Resource Sharing)CORS其实出现时间不短了,它在维基百科上的定义是:跨域资源共享(CORS )是一种网络浏览器的技术规范,它为Web服务器定义了一种方式&…...
济南卓远网站建设/系统优化软件推荐
发布一个k8s部署视频:https://edu.csdn.net/course/detail/26967 课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产…...
wordpress安装模版500/如何做网页设计
一、官网下载: 先去官网下载安装包: postman的官网 二、下载后,创建安装包,postman会自动安装成功。直接打开即可。 三、如果没有账号,退出再次登录即可...
企业网站建设的重要性/百度账户推广登陆
前言对于HTML,css和JavaScript是如何变成页面的,这个问题你了解过吗?浏览器究竟在背后都做了些什么事情呢?让我们去了解浏览器的渲染原理,是通往更深层次的开发必不可少的事情,能让我们更深层次,…...