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

无脑——010 复现yolov8 使用yolov8和rt detr 对比,并训练自己的数据集

1.配置环境

1.

首先去官网下载yolov8的zip
https://github.com/ultralytics/ultralytics
存放在我的目录下G:\bsh\yolov8
然后使用conda创建新的环境

conda create -n yolov8 python=3.8
#然后激活环境
conda activate yolov8

然后安装pytorch,注意 ,pytorch1.10.1以后的版本才支持rtdetr.pt的两个权重文件。

 conda install pytorch==1.10.1 torchvision==0.11.2 torchaudio==0.10.1 cudatoolkit=10.2 -c pytorch

安装 ultralytics

pip install ultralytics

(然后我需要降低pillow的版本来适配我的pytorch,因为报错ImportError: DLL load failed while importing _imaging: 找不到指定的模块。:解决方法参考附录1,如果你们不需要请略过)

然后下载官网的权重文件:
https://github.com/ultralytics/assets/releases
这里我下载了一堆进行测试:
在这里插入图片描述
然后照一张图片进行测试,
可以参考官方文档
https://docs.ultralytics.com/modes/predict/#inference-arguments
自己照一张图片,放在G:\bsh\yolov8\datademo\bug.jpg里边

yolo detect predict model=weights/yolov8n.pt source=datademo\bus.jpg

运行结果如下图:
在这里插入图片描述
再拿一张自己随便拍的做测试,只能说种类越来越多了,之前yolov5那好像没有鼠标垫?
在这里插入图片描述
ps:
检测目录设置成文件夹就行。遍历文件夹里的所有文件进行检测。

yolo detect predict model=weights/yolov8n.pt source=datademo

顺便附上yolov8支持的检测参数

Usage - sources:$ yolo mode=predict model=yolov8n.pt source=0                               # webcamimg.jpg                         # imagevid.mp4                         # videoscreen                          # screenshotpath/                           # directorylist.txt                        # list of imageslist.streams                    # list of streams'path/*.jpg'                    # glob'https://youtu.be/Zgi9g1ksQHc'  # YouTube'rtsp://example.com/media.mp4'  # RTSP, RTMP, HTTP streamUsage - formats:$ yolo mode=predict model=yolov8n.pt                 # PyTorchyolov8n.torchscript        # TorchScriptyolov8n.onnx               # ONNX Runtime or OpenCV DNN with dnn=Trueyolov8n_openvino_model     # OpenVINOyolov8n.engine             # TensorRTyolov8n.mlpackage          # CoreML (macOS-only)yolov8n_saved_model        # TensorFlow SavedModelyolov8n.pb                 # TensorFlow GraphDefyolov8n.tflite             # TensorFlow Liteyolov8n_edgetpu.tflite     # TensorFlow Edge TPUyolov8n_paddle_model       # PaddlePaddle

测了刚才一圈,这些模型,除了yolov_nas的三个模型,都可以正常使用,据作者说暂时不打算加入yolo-NAS,那不知道为什么会有推理的模型,好奇怪
在这里插入图片描述
在这里插入图片描述

我还意外发现,yolov8s可以检测到键盘,其他的不行
在这里插入图片描述

2.训练自己的数据集

正在更新ing
2023年8月11日
还是使用yolov5准备的数据集,准备方法可以看我之前的文章
http://t.csdn.cn/MhxVF
然后运行代码:

 yolo task=detect mode=train model=weights/yolov8s.pt data=./data/datazaoj1.yaml batch=4 epochs=50 imgsz=640 workers=4 device=0 close_mosaic=50

这里要把batch和worker调小,因为我的GTX 1060的显卡只有6G的显存,不然 就会电脑死机,记得,训练的过程中,不要打开谷歌浏览器,这玩意占用内存太多了,很容易导致训练失败。最后马赛克增强去掉,不然显存也不够
训练结果比yolov5效果好多了

Validating runs\detect\train16\weights\best.pt...
Ultralytics YOLOv8.0.150  Python-3.8.17 torch-1.10.1 CUDA:0 (NVIDIA GeForce GTX 1060, 6144MiB)
Model summary (fused): 168 layers, 11127906 parameters, 0 gradientsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 2/2 [00:00<00:00,  7.51it/s]all         11         45       0.89      0.915      0.982      0.818yuanguojia         11         14      0.774          1      0.986      0.893naiguojia         11          6      0.866          1      0.995      0.879huanhuogai         11          7      0.848          1      0.995      0.795dianchi         11          6      0.883          1      0.995      0.829shuomingshu         11          6      0.966          1      0.995      0.851paomoban         11          6          1      0.491      0.924      0.662
Speed: 0.6ms preprocess, 14.5ms inference, 0.0ms loss, 1.5ms postprocess per image
Results saved to runs\detect\train16
名称默认值描述
batch16训练的批量大小
modelnull训练模型权重,可指定具体位置,如yolov8n.pt,yolov8n.yaml等
epochs100训​​练的轮次
imgsz640输入图像压缩后的尺寸
devicenull用于训练的设备,可选0或1或cpu等
workers8多线程数据加载,默认8
datanull数据路径,使用自定义的yaml文件或者官方yaml
lr0float初始学习率
lrffloat最终学习率(lr0 * lrf)
patience50早期训练时,准确率如果没有显著上升则停止的轮次
saveTrue是否需要保存训练的模型和预测结果
cacheFalse使用缓存进行数据加载,可选True/ram, disk 或者 False
projectnull项目名称
namenull实验的名称
exist_okFalse是否覆盖现有实验
pretrainedFalse是否使用预训练模型
optimizer‘SGD’优化器,可选[‘SGD’, ‘Adam’, ‘AdamW’, ‘RMSProp’]
verboseFalse是否打印详细输出
seed0重复性实验的随机种子
deterministicTrue是否启用确定性模式
single_clsFalse是否将多类数据训练为单类
image_weightsFalse是否使用加权图像选择进行训练
rectFalse是否支持矩形训练
cos_lrFalse是否使用余弦学习率调度器
close_mosaic10禁用最后 10 个 epoch 的马赛克增强
resumeFalse是否从上一个检查点恢复训练
lr00.01初始学习率(SGD=1E-2, Adam=1E-3)
lrf0.01余弦退火超参数 (lr0 * lrf)
momentum0.937学习率动量
weight_decay0.0005权重衰减系数
warmup_epochs3.0预热学习轮次
warmup_momentum0.8预热学习率动量
warmup_bias_lr0.1预热学习率
box7.5giou损失的系数
cls0.5分类损失的系数
dfl1.5dfl损失的系数
fl_gamma0.0焦点损失的gamma系数 (efficientDet默认gamma=1.5)
label_smoothing0.0标签平滑
nbs64名义批次,比如实际批次为16,那么64/16=4,每4 次迭代,才进行一次反向传播更新权重,可以节约显存
overlap_maskTrue训练期间掩码是否重叠(仅限分割训练)
mask_ratio4掩码下采样率 (仅限分割训练)
dropout0.0使用 dropout 正则化 (仅限分类训练)

然后如果有验证机可以试一下效果:

yolo task=detect mode=val model=runs/detect/train3/weights/best.pt data=data/fall.yaml device=0

有这么多参数可以选择

名称默认值描述
valTrue在训练期间验证/测试
save_jsonFalse将结果保存到 JSON 文件
save_hybridFalse保存标签的混合版本(标签+附加预测)
conf0.001用于检测的对象置信度阈值(预测时默认 0.25 ,验证时默认0.001)
iou0.6NMS 的交并比 (IoU) 阈值
max_det300每张图像的最大检测数
halfTrue使用半精度 (FP16)
dnnFalse使用 OpenCV DNN 进行 ONNX 推理
plotsFalse在训练期间显示图片

其实如果正常训练完成,会自动进行验证评估的,就是最后显示的那一些精准度
然后推理测试(模型预测)

yolo task=detect mode=predict model=runs/detect/train3/weights/best.pt source=data/images device=0
名称默认值描述
source‘ultralytics/assets’图片或视频的源目录
saveFalse是否保存结果
showFalse是否显示结果
save_txtFalse将结果保存为 .txt 文件
save_confFalse保存带有置信度分数的结果
save_cropFasle保存裁剪后的图像和结果
conf0.3置信度阈值
hide_labelsFalse隐藏标签
hide_confFalse隐藏置信度分数
vid_strideFalse视频帧率步幅
line_thickness3边界框厚度(像素)
visualizeFalse可视化模型特征
augmentFalse将图像增强应用于预测源
agnostic_nmsFalse类别不可知的 NMS
retina_masksFalse使用高分辨率分割蒙版
classesnull只显示某几类结果,如class=0, 或者 class=[0,2,3]

结果比较满意
在这里插入图片描述
在这里插入图片描述
然后用rtdetr-x.pt试试,进行对比
同样的训练代码,worker=4训练不起来,改成了=2也不行,
然后就用rtdetr-l.pt测试了

yolo task=detect mode=train model=weights/rtdetr-l.pt data=./data/datazaoj1.yaml batch=2 epochs=50 imgsz=640 workers=1 device=0 close_mosaic=50

这是我的参数
然后结果:

Validating runs\detect\train20\weights\best.pt...
Ultralytics YOLOv8.0.150  Python-3.8.17 torch-1.10.1 CUDA:0 (NVIDIA GeForce GTX 1060, 6144MiB)
rt-detr-l summary: 498 layers, 31996070 parameters, 0 gradientsClass     Images  Instances      Box(P          R      mAP50  mAP50-95): 100%|██████████| 3/3 [00:00<00:00,  3.91it/s]all         11         45      0.687      0.941      0.951      0.738yuanguojia         11         14      0.699          1      0.885       0.79naiguojia         11          6      0.552          1      0.927      0.868huanhuogai         11          7      0.719          1      0.995      0.729dianchi         11          6      0.475          1      0.995       0.79shuomingshu         11          6      0.676          1      0.995      0.787paomoban         11          6          1      0.644      0.909      0.466
Speed: 1.0ms preprocess, 60.0ms inference, 0.0ms loss, 1.3ms postprocess per image
Results saved to runs\detect\train20

就到这里,然后去重新装个pytorch。
1.10.1 + 10.2cuda的torch官方配的是0.11.2的torchvision,即使版本对的,也是会出现这个问题。
后来给降到了1.10.0torch + 0.11.0torchvision,
正在配置ing

conda install pytorch==1.10.0 torchvision==0.11.0 torchaudio==0.10.0 cudatoolkit=10.2 -c pytorch

附录1

1.pillow库报错

ImportError: DLL load failed while importing _imaging: 找不到指定的模块。
(yolov8) PS G:\bsh\yolov8> pip show pillow
Name: Pillow
Version: 9.3.0

看出,报错是因为pillow版本过高,直接安装8.0版本即可

pip install pillow==8.0

2.yolo_nas测试问题

安装pip install super_gradients之后还是报错LooseVersion = distutils.version.LooseVersion
AttributeError: module ‘distutils’ has no attribute ‘version’
然后又安装的pip install setuptools==59.5.0

相关文章:

无脑——010 复现yolov8 使用yolov8和rt detr 对比,并训练自己的数据集

1.配置环境 1. 首先去官网下载yolov8的zip https://github.com/ultralytics/ultralytics 存放在我的目录下G:\bsh\yolov8 然后使用conda创建新的环境 conda create -n yolov8 python3.8 #然后激活环境 conda activate yolov8然后安装pytorch&#xff0c;注意 &#xff0c;py…...

如何给Google Chrome增加proxy

1. 先打开https://github.com/KaranGauswami/socks-to-http-proxy/releases 我的电脑是Liunx系统所以下载第一个 2. 下载完之后把这个文件变成可执行文件&#xff0c;可以是用这个命令 chmod x 文件名 3. 然后执行这个命令&#xff1a; ./sthp-linux -p 8080 -s 127.0.0.1:…...

设计模式——原型模式

原型模式就是有时我们需要多个类的实例&#xff0c;但是一个个创建&#xff0c;然后初始化&#xff0c;这样太麻烦了&#xff0c;此时可以使用克隆&#xff0c;来创建出克隆对象&#xff0c;就能大大的提高效率。具体就是要让此类实现Cloneable接口&#xff0c;然后重写Object类…...

Spring框架中的Bean生命周期

目录 Bean的实例化 BeanFactoryPostProcessor 属性赋值 循环依赖 初始化 处理各种Aware接口 执行BeanPostProcessor前置处理 执行InitializingBean初始化方法或执行init-method自定义初始化方法 执行BeanPostProcessor后置处理 销毁 Spring Bean 的生命周期总体分为…...

async和await修饰符

async和await是JavaScript中用来处理异步操作的关键字 。 async和await也是解决回调地域的终极方案&#xff0c;简单&#xff0c;而Promise链混杂难以看懂。 async关键字用于定义一个函数&#xff0c;使其返回一个Promise对象。这意味着该函数可以通过await关键字来暂停执行&…...

vivado tcl创建工程和Git管理

一、Tcl工程创建 二、Git版本管理 对于创建完成的工程需要Git备份时&#xff0c;不需要上传完整几百或上G的工程&#xff0c;使用tcl指令创建脚本&#xff0c;并只将Tcl脚本上传&#xff0c;克隆时&#xff0c;只需要克隆tcl脚本&#xff0c;使用vivado导入新建工程即可。 优…...

田间农业数字管理系统-高标准农田建设

政策背景 2019年11月&#xff0c;国务院办公厅印发的《国务院办公厅关于切实加强高标准农田建设提升粮食安全保障能力的意见》明确提出&#xff0c;到2022年&#xff0c;全国要建成10亿亩高标准农田。 2021年9月16日&#xff0c;由农业农村部印发的《全国高标准农田建设规划&a…...

【网络安全】等保测评系列预热

【网络安全】等保测评系列预热 前言1. 什么是等级保护&#xff1f;2. 为什么要做等保&#xff1f;3. 路人甲疑问&#xff1f; 一、等保测试1. 渗透测试流程1.1 明确目标1.2 信息搜集1.3 漏洞探索1.4 漏洞验证1.5 信息分析1.6 获取所需1.7 信息整理1.8 形成报告 2. 等保概述2.1 …...

解决: git拉取报错 git 未能顺利结束 (退出码 1)

拉取代码失败信息 解决方法: 执行一下"git push -f origin master"命令即可 步骤: 1.项目文件夹右击选择"Git Bash Here",打开命令窗口 2. 输入"git push -f origin master"后,回画 执行结束 3.再拉取代码,成功...

【深度学习中的批量归一化BN和层归一化LN】BN层(Batch Normalization)和LN层(Layer Normalization)的区别

文章目录 1、概述2、BN层3、LN层4、Pytorch的实现5、BN层和LN层的对比 1、概述 归一化(Normalization) 方法&#xff1a;指的是把不同维度的特征&#xff08;例如序列特征或者图像的特征图等&#xff09;转换为相同或相似的尺度范围内的方法&#xff0c;比如把数据特征映射到[…...

开发一个RISC-V上的操作系统(六)—— 中断(interrupt)和异常(exception)

目录 往期文章传送门 一、控制流 &#xff08;Control Flow&#xff09;和 Trap 二、Exceptions, Traps, and Interrupts Contained Trap Requested Trap Invisible Trap Fatal Trap 异常和中断的异同 三、RISC-V的异常处理 mtvec&#xff08;Machine Trap-Vector Ba…...

心跳跟随的心形灯(STM32(HAL)+WS2812+MAX30102)

文章目录 前言介绍系统框架原项目地址本项目开发开源地址硬件PCB软件功能 详细内容硬件外壳制作WS2812级联及控制MAX30102血氧传感器0.96OLEDFreeRTOS 效果视频总结 前言 在好几年前&#xff0c;我好像就看到了焊武帝 jiripraus在纪念结婚五周年时&#xff0c;制作的一个心跳跟…...

5. 服务发现

当主机较少时&#xff0c;在抓取配置中手动列出它们的IP地址和端口是常见的做法&#xff0c;但不适用于较大规模的集群。尤其不适用使用容器和基于云的实例的动态集群&#xff0c;这些实例经常会变化、创建或销毁的情况。 Prometheus通过使用服务发现解决了这个问题&#xff1…...

算法备案背后的原因:确保技术透明度与公正

随着现代技术的发展&#xff0c;算法逐渐渗透到我们日常生活的各个方面&#xff0c;从金融决策到个性化的商品推荐&#xff0c;再到医疗诊断和司法系统。然而&#xff0c;这种无所不在的应用也带来了一系列的社会和伦理问题&#xff0c;尤其是在算法的透明度和公正性上。这正是…...

Linux centos 常用命令 【持续更新】

一、查看文件信息 indoe和目录项 # df命令查看每个硬盘分区的inode总数和已经使用的数量 df -i# 查看inode的大学 xfs_growfs /dev/sda1|grep "isize"# 查看文件的indoe号码 ls -istat查看文件信息 # 文件的详细信息 stat anaconda-ks.cfg # -t参数是在一行内输出…...

《使用 VMware 在 Windows 上搭建 Linux 系统的完整指南》

《使用 VMware 在 Windows 上搭建 Linux 系统的完整指南》 1、准备工作1.1 安装 VMware 软件1.2 下载 Linux 发行版镜像文件1.3 安装SSH工具 2、创建新的虚拟机2.1 VMware页面2.2 打开VMware页面并点击创建新的虚拟机&#xff0c;选择自定义2.3 选择系统兼容性&#xff0c;默认…...

大数据Flink(六十):Flink 数据流和分层 API介绍

文章目录 Flink 数据流和分层 API介绍 一、​​​​​​​​​​​​​​Flink 数据流...

软件测试面试题——如何测试App性能?

为什么要做App性能测试&#xff1f; 如果APP总是出现卡顿或网络延迟的情况&#xff0c;降低了用户的好感&#xff0c;用户可能会抛弃该App&#xff0c;换同类型的其他应用。如果APP的性能较好&#xff0c;用户体验高&#xff0c;使用起来丝滑顺畅&#xff0c;那该应用的用户粘…...

玩转C链表

链表是C语言编程中常用的数据结构&#xff0c;比如我们要建一个整数链表&#xff0c;一般可能这么定义&#xff1a; struct int_node {int val;struct int_node *next;}; 为了实现链表的插入、删除、遍历等功能&#xff0c;另外要再实现一系列函数&#xff0c;比如&#xff1a…...

MySQL表的基础的增删改查

增(insert into) 插入所有列的数据 不写具体列名要确保字段都对应正确 -- 假设你有一个名为 "employees" 的表&#xff0c;有多个列 INSERT INTO employees VALUES (101, Alice, Manager, 50000);插入指定列的数据 -- 假设你有一个名为 "students" 的表&…...

rknn优化教程(二)

文章目录 1. 前述2. 三方库的封装2.1 xrepo中的库2.2 xrepo之外的库2.2.1 opencv2.2.2 rknnrt2.2.3 spdlog 3. rknn_engine库 1. 前述 OK&#xff0c;开始写第二篇的内容了。这篇博客主要能写一下&#xff1a; 如何给一些三方库按照xmake方式进行封装&#xff0c;供调用如何按…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析&#xff08;97/126&#xff09;&#xff1a;邮件营销与用户参与度的关键指标优化指南 在数字化营销时代&#xff0c;邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天&#xff0c;我们将深入解析邮件打开率、网站可用性、页面参与时…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

回溯算法学习

一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...

Mysql中select查询语句的执行过程

目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析&#xff08;Parser&#xff09; 2.4、执行sql 1. 预处理&#xff08;Preprocessor&#xff09; 2. 查询优化器&#xff08;Optimizer&#xff09; 3. 执行器…...

JVM 内存结构 详解

内存结构 运行时数据区&#xff1a; Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器&#xff1a; ​ 线程私有&#xff0c;程序控制流的指示器&#xff0c;分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 ​ 每个线程都有一个程序计数…...

【电力电子】基于STM32F103C8T6单片机双极性SPWM逆变(硬件篇)

本项目是基于 STM32F103C8T6 微控制器的 SPWM(正弦脉宽调制)电源模块,能够生成可调频率和幅值的正弦波交流电源输出。该项目适用于逆变器、UPS电源、变频器等应用场景。 供电电源 输入电压采集 上图为本设计的电源电路,图中 D1 为二极管, 其目的是防止正负极电源反接, …...

NPOI Excel用OLE对象的形式插入文件附件以及插入图片

static void Main(string[] args) {XlsWithObjData();Console.WriteLine("输出完成"); }static void XlsWithObjData() {// 创建工作簿和单元格,只有HSSFWorkbook,XSSFWorkbook不可以HSSFWorkbook workbook new HSSFWorkbook();HSSFSheet sheet (HSSFSheet)workboo…...