YOLOV5学习记录

news2024/9/23 1:21:46

前言:

计算机视觉

什么是目标检测?

物体分类和目标检测的区别

目标检测,物体的类别和位置

学习选题,口罩检查,人脸识别

算法原理:知乎,csdn,目前还没到这种程度

大大滴崩溃:重装吧。。

打开要下载YOLO的文件夹,其中路径不能有中文

打开官方github连接

GitHub - ultralytics/ultralytics: NEW - YOLOv8 🚀 in PyTorch > ONNX > OpenVINO > CoreML > TFLite

复制HTTP项目链接

输入到git进行拉取

git clone https//....

拉取成功

使用pycharm打开项目

查询cuda版本

nvcc -V

 此处安装的为12.2的cuda

创建虚拟环境

conda create -n 环境名 python=版本号

conda create -n yolov2 python=3.8

查看是否创建成功

conda info --env

进入虚拟环境

conda activate yolov2

输入命令,下载

pip install ultralytics

直接使用这个后面会出错,最好根据下述链接来

!快速教你解决yolov8没有setup.py的问题_没有setup.py文件-CSDN博客

安装pytorch

官方链接:

PyTorch

选好配置,复制链接

安装yolo

pip install yolo

检查

新建一个est.py文件,加入以下代码并运行

import torch

#查看版本
print(torch.__version__)
#查看GPU是否可用
print(torch.cuda.is_available())
#返回设备GPU个数
print(torch.cuda.device_count())
#查看对应cuda的版本号
print(torch.backends.cudnn.version())
print(torch.version.cuda)
quit()

用命令行启动模型

官方文档:

检测 -Ultralytics YOLO 文档

推理命令:

yolo predict model=yolov8n.pt source='ultralytics/assets/bus.jpg'

推理成功

根据路径找到代码

核心配置文件

文档中下载权重文件,放到根目录下

下载coco128数据集

https://ultralytics.com/assets/coco128.zip

在datasets文件夹中建立coco128文件夹,把下载好的coco128数据集放进去

coco128的格式

images:下面的子文件夹为train2017,存放所有的训练图片

labels:下面的子文件夹为labels2017,存放所有的标注标签

yaml文件

我下的coco128没有yaml,自己新建一个txt文件改名字写内容就好

自己建立数据集

将yolov8.yaml复制到datasets文件夹下

在datasets下新建一个data .yaml

安装labelme:

labelme的安装及使用_labelme安装-CSDN博客

打开labelme:

方法一:Anaconda Prompt里输入labelme

我发现我还没完全安装labelme

但是安装完后直接输入labelme还是不能打开

方法二:Anaconda Prompt里输入python -m labelme,使用python打开

进入labelme虚拟环境

conda activate labelme

 使用python打开

python -m labelme

成功打开

方法三:在pycharm里面打开

labelme的使用:

界面

  创建文件夹

wzry为自定义数据集名字,其余需一致

images是图片

labels是标签

train用于训练

test用于测试

json转txt

在yolov5-master中创建一个.py文件,代码如下

import json  # 用于解析JSON文件
import os  # 用于与操作系统交互,如文件路径操作

name2id = {'face': 0}  # 标签名称,根据情况更改


def convert(img_size, box):  # 将边界框的像素坐标转换为归一化坐标
    dw = 1. / (img_size[0])  # 输入图像的宽度和高度
    dh = 1. / (img_size[1])
    x = (box[0] + box[2]) / 2.0 - 1  # 输入边界框的坐标(x1, y1, x2, y2)
    y = (box[1] + box[3]) / 2.0 - 1
    w = box[2] - box[0]
    h = box[3] - box[1]
    x = x * dw
    w = w * dw
    y = y * dh
    h = h * dh
    return (x, y, w, h)  # x和y是边界框中心的归一化坐标,w和h是边界框的宽度和高度的归一化值


def decode_json(json_floder_path, json_name):   # json_floder_path包含JSON文件的文件夹路径
    txt_name = 'F:\\YOLOV5\\yolov5-master\\FaceRecognition\\datasets\\labels\\txt' + json_name[0:-5] + '.txt'  # json_name要解析的JSON文件名
    # 存放txt的路径,根据情况更改
    txt_file = open(txt_name, 'w')

    json_path = os.path.join(json_floder_path, json_name)
    data = json.load(open(json_path, 'r', encoding='utf-8'))  # 让中文标签可识别

    img_w = data['imageWidth']
    img_h = data['imageHeight']

    for i in data['shapes']:

        label_name = i['label']
        if (i['shape_type'] == 'rectangle'):
            x1 = int(i['points'][0][0])
            y1 = int(i['points'][0][1])
            x2 = int(i['points'][1][0])
            y2 = int(i['points'][1][1])

            bb = (x1, y1, x2, y2)
            bbox = convert((img_w, img_h), bb)
            txt_file.write(str(name2id[label_name]) + " " + " ".join([str(a) for a in bbox]) + '\n')


if __name__ == "__main__":

    json_floder_path = 'F:\\YOLOV5\\yolov5-master\\FaceRecognition\\datasets\\labels\\train'
    # 存放json的文件夹的路径
    json_names = os.listdir(json_floder_path)
    for json_name in json_names:
        decode_json(json_floder_path, json_name)

修改配置文件

coco128.yaml->wzry_parameter.yaml

在yolov5/data/coco128.yaml中先复制一份,粘贴到wzry中,改名为wzry_parameter.yaml(意义为wzry的参数配置)

wzry_parameter.yaml文件需要修改的参数是nc与names。nc是标签名个数,names就是标签的名字

yolov5x.yaml->wzry_model.yaml

在yolov5/models先复制一份yolov5x.yaml至wzry,更名为wzry_model.yaml(意为模型),只将如下的nc修改为训练集种类即可

开始训练train

调参

参数解释:

手把手带你调参YOLOv5 (v5.0-v7.0)(推理)_yolov5调参-CSDN博客

"--weights" # 修改处 初始权重
"--cfg" # 修改处 模型训练文件 default=ROOT / 'wzry/wzry_model.yaml'
"--data" # 修改处 数据集参数文件  default=ROOT / "wzry/wzry_parameter.yaml"
"--hyp" # 超参数设置,是人为设定的参数。包括学习率啥的等等,可不改
"--epochs"# 修改处 训练轮数 default=300 
# 决定了训练时间与训练效果。如果选择训练模型是yolov5x.yaml,
# 那么大约200轮数值就稳定下来了
"--batch-size"# 修改处 batch size default=32 
# 这个要设置地小一些,
# 否则会out of memory。这个决定了我们训练的速度
"--imgsz" # 修改处 图片大小 default=384 ,
# 虽然我们训练集的图片是已经固定下来了,
# 但是传入神经网络时可以resize大小,太大了训练时间会很长,
# 且有可能报错,这个根据自己情况调小一些
"--resume" # 断续训练 如果说在训练过程中意外地中断,
# 那么下一次可以在这里填True,会接着上一次runs/exp继续训练
"--device" # 修改处 选择 填0是电脑默认的CUDA,前提是电脑已经安装了CUDA才能GPU加速训练
"--workers"# 修改处 越大读取数据越快,但是太大了也会报错,因此也要根据自己状况填小

问题一

Dataset not found , missing paths ['D:\\YOLOV5\\yolov5-master\\wzry\\datasets\\images\\train']

脚本无法找到名为 D:\\YOLOV5\\yolov5-master\\wzry\\datasets\\images\\train 的文件夹。

要把新建的文件夹建在'D:\\YOLOV5\\yolov5-master\下面

问题二

Downloading https://ultralytics.com/assets/Arial.Unicode.ttf to C:\Users\shata\AppData\Roaming\Ultralytics\Arial.Unicode.ttf...

urllib.error.HTTPError: HTTP Error 301: The HTTP server returned a redirect error that would lead to an infinite loop.

Arial.ttf下载超时

 脚本尝试从 https://ultralytics.com/assets/Arial.Unicode.ttf 下载字体文件,但在这个过程中遇到了一个 HTTP 错误 301,这是一个永久重定向的错误。这通常意味着服务器返回了一个重定向响应,但脚本没有正确处理这个重定向,导致它进入了无限循环。

将Arial.ttf下好,手动放到yolov5根目录下,改名为Arial.Unicode.ttf 

链接:​​​​​​Arial.ttf_免费高速下载|百度网盘-分享无限制 (baidu.com)
提取码:oznt

问题三

Downloading https://github.com/ultralytics/yolov5/releases/download/v7.0/yolov5x.pt to yolov5x.pt...

无法顺利下载权重文件yolov5x.pt

yolov5x.pt下好,手动放到yolov5根目录下

链接:yolov5weights.zip_免费高速下载|百度网盘-分享无限制 (baidu.com)
提取码:t845

问题四

OSError: [WinError 1455] 页面文件太小,无法完成操作。

多种方法彻底解决pycharm中: OSError: [WinError 1455] 页面文件太小,无法完成操作 的问题_pycharm里面运行中显示页面文件太小-CSDN博客

一般是因为没分配虚拟内存 

问题五

train: No labels found in F:\YOLOV5\yolov5-master\FaceRecognition\datasets\labels\train.cache, can not start training. 

这意味着在指定的路径F:\YOLOV5\yolov5-master\FaceRecognition\datasets\labels\train.cache下没有找到任何标签(labels),因此无法开始训练过程

将转换好的txt文件们放到错误提示的文件夹里面

问题六

Traceback (most recent call last): File "F:\YOLOV5\yolov5-master\utils\dataloaders.py", line 29, in <module> from utils.augmentations import ( ModuleNotFoundError: No module named 'utils'

这个错误消息表明在尝试导入一个名为utils的模块时发生了问题。具体来说,错误ModuleNotFoundError: No module named 'utils'表示Python解释器在当前的工作目录或已安装的模块中找不到名为utils的模块。

No module named ‘utils‘,untils库的安装,不是pip和conda指令,特别可以的教程,还有为什么不能的原因,绝对良心。_no module named 'utils-CSDN博客

 下面创建了名为xxx的虚拟环境,指定虚拟环境的 Python 版本为3.6:

conda create -n xxx python=3.6

进入名为xxx的虚拟环境:

source activate xxx
# or
conda activate xxx

退出当前虚拟环境:

conda deactivate

删除名为xxx的虚拟环境

conda remove -n xxx --all


查看本地已有哪些虚拟环境:

conda info --env

打开终端Anaconda Prompt输入pip install utils

无效,试一下装这个

pip install python-utils

问题七

UnicodeDecodeError: 'gbk' codec can't decode byte 0x80 in position 234: illegal multibyte sequence

【Python】解决UnicodeDecodeError: ‘gbk‘ codec can‘t decode byte 0x9A in position xxx: illegal multibyte_unicodedecodeerror: 'gbk' codec can't decode byte -CSDN博客

把 parameter.yaml 里面的注释全删了

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1934253.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

木舟0基础学习Java的第二十天(线程,实现,匿名有名,休眠,守护,加入,设计,计时器,通信)

多线程 并发执行的技术 并发和并行 并发&#xff1a;同一时间 有多个指令 在单个CPU上 交替执行 并行&#xff1a;同一时间 有多个指令 在多个CPU上 执行 进程和线程 进程&#xff1a;独立运行 任何进程 都可以同其他进程一起 并发执行 线程&#xff1a;是进程中的单个顺…

鸿蒙语言基础类库:【@system.mediaquery (媒体查询)】

媒体查询 说明&#xff1a; 从API Version 7 开始&#xff0c;该接口不再维护&#xff0c;推荐使用新接口[ohos.mediaquery]。本模块首批接口从API version 3开始支持。后续版本的新增接口&#xff0c;采用上角标单独标记接口的起始版本。 导入模块 import mediaquery from sy…

【进阶篇-Day10:JAVA中泛型、平衡二叉树、红黑树、TreeSet集合的介绍】

目录 1、泛型1.1 泛型类1.2 泛型方法1.3 泛型接口1.4 泛型通配符1.5 总结 2、数据结构&#xff08;树&#xff09;2.1 树的基本介绍2.2 二叉树的介绍2.2.1 概念&#xff1a;2.2.2 二叉查找树的介绍&#xff1a;2.2.3 二叉查找树添加节点&#xff1a;2.2.4 二叉查找树查找节点&a…

window11 部署llama.cpp并运行Qwen2-0.5B-Instruct-GGUF

吾名爱妃&#xff0c;性好静亦好动。好编程&#xff0c;常沉浸于代码之世界&#xff0c;思维纵横&#xff0c;力求逻辑之严密&#xff0c;算法之精妙。亦爱篮球&#xff0c;驰骋球场&#xff0c;尽享挥洒汗水之乐。且喜跑步&#xff0c;尤钟马拉松&#xff0c;长途奔袭&#xf…

从零开始读RocketMq源码(五)Consumer消费Message流程解析

目录 前言 准备 拉取服务和重平衡服务启动 初识PullRequest 重平衡服务 对重平衡资源进行排序 MessageQueue消息队列集合来源 Consumer消费者集合数据来源 确实分配资源策略 执行分配策略 初始化ProcessQueue 初始化PullRequest 内存队列填充PullRequest 消息拉取…

hackmyvm--Decode

环境 靶机&#xff1a;ip未知 攻击机kali&#xff1a;192.168.233.128 192.168.56.101 主机探测 锁定靶机ip为108 端口扫描 nmap -p- -T4 -A 192.168.56.108 常规套路80和22 web打点 dirsearch -u http://192.168.56.108/ 访问robots,txt文件 访问/decode 发现其自动添加了/,怀…

Chromium源码阅读(9):了解Log模块

Chromium许多日志被TraceEvent代替了&#xff0c;因此TraceEvent出现的频率要比Log高很多。 但是也有不少场景使用Log。 在blink&#xff0c;Log的实现由base提供&#xff0c;而blink/render/core/base/logging.h进行了二次封装。 日志系统的设计细节 错误对话框处理 错误消…

Qt第十二章 样式表

样式表 文章目录 样式表1.样式表盒子模型 2.选择器选择器类型伪状态选择器Pseudo-State 3.控件示例4继承自QWidget的类&#xff0c;设置qss样式表没有效果&#xff0c;需要重写paintEvent 1.样式表 盒子模型 2.选择器 样式表语法&#xff0c;选择器{属性1:值;属性2:值;}如果只…

韦东山嵌入式linux系列-驱动进化之路:设备树的引入及简明教程

1 设备树的引入与作用 以 LED 驱动为例&#xff0c;如果你要更换LED所用的GPIO引脚&#xff0c;需要修改驱动程序源码、重新编译驱动、重新加载驱动。 在内核中&#xff0c;使用同一个芯片的板子&#xff0c;它们所用的外设资源不一样&#xff0c;比如A板用 GPIO A&#xff0c…

鸿蒙仓颉语言【类型class】

类与结构&#xff08;class & struct&#xff09; 面向对象的编程语言&#xff0c;必不可少的基础元素&#xff0c;类或者叫类型&#xff0c;在仓颉中类可以抽象(abstract)、继承&#xff08;<:&#xff09;&#xff0c;公开&#xff08;Public&#xff09;或者私有&am…

在jsPsych中使用Vue

jspsych 介绍 jsPsych是一个非常好用的心理学实验插件&#xff0c;可以用来构建心理学实验。具体的就不多介绍了&#xff0c;大家可以去看官网&#xff1a;https://www.jspsych.org/latest/ 但是大家在使用时就会发现&#xff0c;这个插件只能使用js绘制界面&#xff0c;或者…

【算法专题】归并排序

目录 1. 排序数组 2. 交易逆序对的总数 3. 计算右侧小于当前元素的个数 4. 翻转对 总结 1. 排序数组 912. 排序数组 - 力扣&#xff08;LeetCode&#xff09; 今天我们使用归并排序来对数组进行排序&#xff0c;实际上&#xff0c;归并排序和快速排序是有一定相似之处的&a…

什么是蓝牙芯片?蓝牙芯片和蓝牙模块的区别

蓝牙芯片&#xff0c;是一种集成了蓝牙无线通信技术的微型电子元件。它如同一个微小的通信枢纽&#xff0c;能够在各种电子设备之间建立无线连接&#xff0c;实现数据的传输与共享。蓝牙芯片的设计精妙而复杂&#xff0c;内部集成了射频前端、数字基带、协议栈等多个功能模块&a…

Linux中nohup(no hang up)不挂起,用于在系统后台不挂断地运行命令,即使退出终端也不会影响程序的运行。

nohup的英文全称是 no hang up&#xff0c;即“不挂起”。这个命令在Linux或Unix系统中非常有用&#xff0c;主要用于在系统后台不挂断地运行命令&#xff0c;即使退出终端也不会影响程序的运行。默认情况下&#xff08;非重定向时&#xff09;&#xff0c;nohup会将输出写入一…

linux中常见的协议、服务端口整理汇总

&#x1f341;博主简介&#xff1a; &#x1f3c5;云计算领域优质创作者 &#x1f3c5;2022年CSDN新星计划python赛道第一名 &#x1f3c5;2022年CSDN原力计划优质作者 ​ &#x1f3c5;阿里云ACE认证高级工程师 ​ &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社…

排序系列 之 插入排序

&#xff01;&#xff01;&#xff01;排序仅针对于数组哦本次排序是按照升序来的哦 介绍 插入排序英文名为InsertSort 基本思路 1、认为数组当中的第一个数值已经排好序了2、定义一个游标从第二个数值开始不断地向后进行遍历3、游标指向的数据插入已经排好序的数组中 代码…

力扣刷题之2959.关闭分部的可行集合数目

题干描述 一个公司在全国有 n 个分部&#xff0c;它们之间有的有道路连接。一开始&#xff0c;所有分部通过这些道路两两之间互相可以到达。 公司意识到在分部之间旅行花费了太多时间&#xff0c;所以它们决定关闭一些分部&#xff08;也可能不关闭任何分部&#xff09;&…

AV1 编码标准屏幕内容编码技术概述

AV1 屏幕内容编码 为了提高屏幕捕获内容的压缩性能&#xff0c;AV1采用了几种编码工具&#xff0c;例如用于处理屏幕画面中重复模式的内帧内块复制&#xff08;IntraBC&#xff09;&#xff0c;以及用于处理颜色数量有限的屏幕块的调色板模式。 帧内块拷贝 AV1 编码中的 Intra …

【Vue】快速入门:构建你的第一个Vue 3应用

文章目录 一、Vue简介二、环境搭建1. 安装Node.js和npm2. 安装Vue CLI 三、创建Vue项目四、项目结构介绍五、组件基础创建一个组件使用组件 六、模板语法插值指令v-bindv-ifv-for 七、事件处理八、状态管理安装Vuex创建Store使用Store 九、路由基础安装Vue Router配置路由使用路…

FFmpeg播放视频

VS2017+FFmpeg6.2.r113110+SDL2.30.5 1.下载 ShiftMediaProject/FFmpeg 2.下载SDL2 3.新建VC++控制台应用 3.配置include和lib 4.把FFmpeg和SDL的dll 复制到工程Debug目录下,并设置调试命令