Linux 搭建与使用yolov5训练和检验自建模型的步骤

Linux 搭建与使用yolov5训练和检验自建模型的步骤

硬件设备

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

环境搭建(无cuda)

下载anaconda

wget https://repo.anaconda.com/archive/Anaconda3-2024.06-1-Linux-x86_64.sh
bash Anaconda3-2024.06-1-Linux-x86_64.sh
# 看完许可证后, yes, 后面选择安装路径, 可以按默认路径/home/[用户名]/anaconda3

当看到后面的内容, 可以选择是否自动初始化conda, 如果选择默认no, 则需要手动先source [path/to/anaconda]/bin/activate

WARNING:You currently have a PYTHONPATH environment variable set. This may causeunexpected behavior when running the Python interpreter in Anaconda3.For best results, please verify that your PYTHONPATH only points todirectories of packages that are compatible with the Python interpreterin Anaconda3: /home/smile/anaconda3
Do you wish to update your shell profile to automatically initialize conda?
This will activate conda on startup and change the command prompt when activated.
If you'd prefer that conda's base environment not be activated on startup,run the following command when conda is activated:conda config --set auto_activate_base falseYou can undo this by running `conda init --reverse $SHELL`? [yes|no]
[no] >>> 

激活anaconda

如果是一路敲回车

source ~/anaconda3/bin/activate

如果修改了默认路径, 则需要将上面的路径修改为新路径

当看到在用户名以及主机名前面出现(base)就说明安装完成了
image-20240816100944802

创建虚拟环境

这里的代码只能复制 $ 后面的, 前面只是为了显示当前的环境

# 创建以python38为基础的虚拟环境
(base) smile@smile: ~/$ conda create -n yolo python=3.8 # 查询是否创建成功
(base) smile@smile:~/$ conda env list
# conda environments:
#
base                     /home/smile/anaconda3
yolo                  *  /home/smile/anaconda3/envs/yolo# 激活yolo虚拟环境
(base) smile@smile: ~/$ conda activate yolo# 执行完以后, 终端应该以(yolo)开头
(yolo) smile@smile: ~/$

下载yolo源码

注: 以下操作均在虚拟环境(yolo)中进行, 尤其是下载依赖时, 一定要在虚拟环境, 否则会影响系统的python环境, 可能发生系统异常或程序异常

mkdir ~/MachineLearning
git clone https://github.com/ultralytics/yolov5.git #注这里的是yolov5
cd yolov5
which pip # 检查当前使用的pip是否是虚拟环境中的pip
# 如果返回的内容类似: /home/smile/anaconda3/envs/yolo/bin/pip 看到anaconda3就可以放心执行下面的命令
pip install -r requirements.txt # 注: 这里一定要是虚拟环境!!!!# 下载依赖的过程会比较慢(墙), 建议手动指定使用阿里源进行下载
pip install -r requirements.txt -i https://mirrors.aliyun.com/pypi/simple/

修改yolo源码(非必需, 出错再来看)

getsize找不到

默认下载的pillow版本比较新, 新版本的pillow弃用了 getsize(label) 方法, 应该使用getbbox(label)

如果报错类似

with torch.cuda.amp.autocast(amp):
Exception in thread Thread-6:
Traceback (most recent call last):File "/home/zc/MachineLearning/anaconda3/envs/yolo/lib/python3.8/threading.py", line 932, in _bootstrap_innerself.run()File "/home/zc/MachineLearning/anaconda3/envs/yolo/lib/python3.8/threading.py", line 870, in runself._target(*self._args, **self._kwargs)File "/home/zc/MachineLearning/yolov5/utils/plots.py", line 305, in plot_imagesannotator.box_label(box, label, color=color)File "/home/zc/MachineLearning/yolov5/utils/plots.py", line 91, in box_labelw, h = self.font.getsize(label)  # text width, height
AttributeError: 'FreeTypeFont' object has no attribute 'getsize'

按照下面的步骤修改代码即可(不影响训练, 只是无法绘制标定框上面的文字, 在训练完成后没有输出图片, 可能会影响识别, 毕竟写不了字, 可能导致程序异常退出)

路径: /path/to/yolov5/utils/plots.py

修改项:

# 修改前
w, h = self.font.getsize(label) # 第91行(或差不多的位置, 可以直接查询font.getsize)
# 修改后
w, h = self.font.getbbox(label)[2:4]  # text width, heightw, h = self.font.getsize(text)  # 第170行(或差不多的位置, 可以直接查询font.getsize)
# 修改后
w, h = self.font.getbbox(text)[2:4]  # text width, height

潜在风险

0%|          | 0/97 00:00train.py:307: FutureWarning: `torch.cuda.amp.autocast(args...)` is deprecated. Please use `torch.amp.autocast('cuda', args...)` instead.` 

有一个方法被弃用了, 只是暂时还支持该方法, 后面可能会出问题, 因此先找找, 可以先不改, 但是得知道
image-20240927113224565

一共4处, 可以修改为(暂未验证, 只是查了一下)

with torch.amp.autocast(device_type='cuda', enabled=amp):pred = model(imgs)  # forwardloss, loss_items = compute_loss(pred, targets.to(device))  # loss scaled by batch_sizeif RANK != -1:loss *= WORLD_SIZE  # gradient averaged between devices in DDP modeif opt.quad:loss *= 4.

使用默认的模型对图片或视频流进行检测

开始检测

  1. –weights: 指定模型权重文件路径(.pt)
    • 示例:--weights yolov5s.pt
  2. –source: 输入源,可以是视频文件、图片文件、文件夹、或者摄像头(例如 0
    • 示例:--source 0(摄像头, 这里一般是笔记本自带的)、--source ./images(文件夹)
  3. –img-size: 输入图像的大小,默认是 640
    • 示例:--img-size 640
  4. –conf-thres: 置信度阈值,默认为 0.25,低于此值的检测将被过滤
    • 示例:--conf-thres 0.25
  5. –classes: 选择要检测的类别(用逗号分隔的类别索引)
    • 示例:--classes 0,2(只检测类别 0 和 2)
  6. –name: 指定保存结果的子目录名称
    • 示例:--name runs/detect/exp

常见的使用场景

注: yolov5s.pt 可以检测的类别可以参考/path/to/yolo/data/coco128.yaml, 总计80种不同类别

注: 以下操作均在虚拟环境(yolo)中进行

# 检测视频流(摄像头)
python detect.py --weights yolov5s.pt --source 0# 仅检测特定类别(例如人和车)这里的类别的标签来自上述的coco128.yaml
python detect.py --weights yolov5s.pt --source ./images --classes 0,2# 检测图片
python detect.py --weights yolov5s.pt --source ./images/image.jpg

训练自己的模型

准备数据集

公开数据集

可以先去Roboflow查找是否存在成品数据集, 例如托盘类(pallet)

在这里可以上传自己的图像, 进行模型的实验, 不过这里都是通过API进行访问的, 似乎无法直接使用该模型

但是它的数据集是可以直接下载的, 因此可以作为很好的数据集来源
image-20240927104240230

在下载数据集时, 注意选择标签的格式, 因为是yolov5, 因此需要选择yolov5支持的数据格式
image-20240927104641224

自建数据集

如果对公开数据集不满意, 可以自己建立数据集进行针对性训练

下载一个标注器, 或找一个在线标注的网站(这个数据可能会被网站运营方保存并商用, 如果无所谓, 就可以选择这种方法)

以在线标注为例, 选择目标检测

上传图片后, 需要创建标签, 例如pallet
image-20240927105722374
image-20240927105944614

选择拉框标注(当然, 也能选其他的), 圈定范围, 选择标签, 例如pallet
image-20240927110108507
image-20240927110205772

完成后, 导出, 选择yolo格式的zip压缩包
image-20240927110237069

解压该压缩包就可以看到一组txt文件, 例如

image-20240927110332862

这里的文件名称与图像名称是一一对应的, 不要修改文件名, 只需要把这里的文件解压即可

里面的内容是

0 0.554698 0.515444 0.794080 0.472329

第一个指的是类型编码, 即在标注时第一个类别, 例如上述标注时的0就是pallet, 1就是others

后面4个代表的是坐标, 用的是比例制

数据集构成

dataset : 该目录为数据集总目录, 一般包含train, val两个文件夹, 里面存放训练数据以及验证数据, 因此在做数据集时, 可以将图片与标签分成两组, 例如95%的图片用作训练, 剩下的5%用于验证, 注: 需要包含标签!!!>

dataset/train: 该目录下存放的是用于训练的图片及其标签, 分别位于train/images 以及train/labels目录下, 这里的图片名称需要和标签名称一致, 只是后缀一个是.jpg一个是.txt

dataset/val: 与train类似

dataset/data.yaml: 这是一个yaml文件, 用于指定上述数据集的路径, 在yolo的train.py中需要传入该文件, 后面会提到该参数

train: /home/smile/MLPallet/dataset/train/images
val: /home/smile/MLPallet/dataset/valid/images# 这里需要对分类的信息给出描述, 例如一共有几种类型, 需要按顺序填写, 例如0是pallet, 1是others, 按实际情况进行修改
nc: 1
names: ['pallet']# 添加 'path' 字段,指向数据集的根目录
path: /home/smile/MLPallet/dataset

开始训练

–data: 指定数据集的 YAML 文件,定义训练和验证集路径及类别, 这里的yaml文件就是上面自己定义的dataset/data.yaml

  • 示例:--data data/coco128.yaml

–weights: 预训练模型的路径,可以是自定义权重文件

  • 示例:--weights yolov5s.pt

–epochs: 训练的总轮数

多多益善? 最终收敛的时候不一定会完全跑完所有轮次, 建议拉大一点

  • 示例:--epochs 50

–batch-size: 每次训练的样本数,默认为 16

这个参数的含义就是, 在训练时会把n张图片拼接到一张图片上进行训练, 加快训练过程, 但是这也会导致内存需求激增, 在3060上跑64会中断

  • 示例:--batch-size 32

–img-size: 输入图像的大小,支持多种尺寸

  • 示例:--img-size 640

注: 以下操作均在虚拟环境(yolo)中进行

可以有两种方式, 一种是在之前预训练模型的基础上进行微调, 另一种是直接从零开始训练一个新的模型,

一般而言第二种更精确, 但是需要更大的数据量以及更多的训练轮次

# 根据yolov5s.pt进行微调
python train.py --data /home/smile/MachineLearning/dataset/data.yaml --img-size 640 --batch-size 32 --epochs 500 --weights yolov5s.pt
# 从零开始训练
python train.py --data /home/smile/MachineLearning/dataset/data.yaml --img-size 640 --batch-size 32 --epochs 500 --weights ''

后面就是等待训练完成即可, 也可以在每完成一轮后, 检查验证结果, 看是否正在收敛

这就是训练完成后的结果, 可以通过mAP50来看目前准确度

image-20240927111946699

使用自己的模型进行推理

在完成训练后, 可以在/path/to/yolov5/runs/train/expX目录下找到本次训练时的一些数据, 包含损失函数等图片, 以及在训练及验证时的剪影(jpg)

下图就是batch size为16时的剪影, 可以看到是16张图片被拼接到一起进行检测的

image-20240927112532924

模型保存在/path/to/yolov5/runs/train/expX/weights/

这里会有一个best.pt以及一个last.pt这两个都是训练的结果, best.pt是针对last.pt优化后的权重, last.pt是最终训练好的权重, 一般情况下会采用best.pt

检测:

python detect.py --weights /path/to/best.pt --source ./images/image.jpg

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

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

相关文章

打造高效合同管理平台,提升企业运营效率

在现代企业的日常运营中,合同管理扮演着至关重要的角色。无论是劳动协议、采购订单还是销售合同,各类合同都承载着企业的重要信息和业务节点。然而,面对日益复杂的商业环境和海量合同数据,如何有效管理和利用这些合同成为众多企业…

一些写论文必须要知道的神仙级网站!芝士AI(paperzz)

说实话,写论文真的是挺头疼,尤其到了毕业季的时候,没有过任何写作毕业论文的经验的毕业生而言更是如此,相信大家都有过这种状态,不知从何下笔,还需要面对论文进度的压力,并且时常需要寻找各种资…

基于Python大数据可视化的短视频推荐系统

作者:计算机学姐 开发技术:SpringBoot、SSM、Vue、MySQL、JSP、ElementUI、Python、小程序等,“文末源码”。 专栏推荐:前后端分离项目源码、SpringBoot项目源码、Vue项目源码、SSM项目源码 精品专栏:Java精选实战项目…

刘诗诗现身上海参加可隆自然而然露营节,户外风活力清新生图绝美!

9月26日,刘诗诗现身上海可隆自然而然露营节,活动现场,刘诗诗身着可隆OBLI-K露营冲锋衣外套,经典石库门配色既高级又具有质感,内里搭配简单白T与浅灰色短裙,户外运动风完美拿捏,所穿的鞋子是可隆…

vue单点登录异步执行请求https://xxx.com获取并处理数据

一、请求一个加密地址获取access_token再拼接字符串再次请求 接口返回数据 异步执行请求该地址获取数据并处理 二、请求代码第二步使用 access_token 获取 auth_key // 第二步:使用 access_token 获取 auth_keyconst access_token tokenData.access_token;const …

通配符与Powershell

通配符与正则表达式 通配符 通配符是一种特殊的语句,主要有*、?和[],用来模糊搜索文件。 通配符表达意思举例说明*星号、匹配任何字符*.cpp匹配.cpp文件?问号、匹配任意一个字符*.?d匹配具有特定格式的文件[]中括号、匹配括号中的一个字符.[a-z]d代…

原生APP开发成本计算

原生APP开发的成本是一个复杂的问题,受到众多因素的影响,很难给出一个精确的数字。但我们可以通过了解影响成本的因素,以及常见的估算方法,来对开发成本有一个大致的了解。 影响原生APP开发成本的因素 功能复杂度: 功…

AI视频技术:引领影视剧拍摄的未来

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 当科技遇见艺术,一场视听盛宴正…

如何正确连接和使用滑动变阻器?

滑动变阻器是可以改变电阻值的电子元件,广泛应用于各种电子设备和电路中。正确连接和使用滑动变阻器对于保证电路的正常工作和延长设备的使用寿命至关重要。以下是关于如何正确连接和使用滑动变阻器的一些建议: 了解滑动变阻器的基本原理和结构&#xf…

Linux上的C/C++编程

Linux上的C/C编程 yum软件包管理器Linux编辑器-vimvim命令模式指令集vim末行模式指令集 gcc/g的使用Linux自动化编译工具-make/MakefileLinux调试器-gdb调试命令 多人合作工具git yum软件包管理器 yum 是Linux上常用的包管理器,类似于Windows上的“应用商店”。 语…

深度伪造语音检测(Deepfake Speech Detection, DSD)全面概述

近期,深度学习技术和神经网络在生成型人工智能领域已取得重大突破。如今,关键的通信媒介,如音频、图像、视频和文本,均能实现自动生成,并广泛应用于诸多领域,包括聊天机器人系统(如ChatGPT&…

漏洞挖掘 | 发现隐藏子域的虚拟主机

高效虚拟主机发现的工具和技术 在进行外部渗透测试或漏洞赏金狩猎时,我们从各个角度探索目标系统,收集尽可能多的信息来识别潜在的攻击向量。这涉及识别所有可用的资产、域和子域。 在这个过程中,我们关注的事情之一就是枚举虚拟主机。通过…

阿里云服务器挖矿木马清除

这里写自定义目录标题 阿里云服务器挖矿木马清除清除步骤: 阿里云服务器挖矿木马清除 直接看图: 清除步骤: 是的,根据您提供的 systemctl 输出,c3pool_miner.service 看起来非常可疑,因为它的描述是 “…

VLM系列文章7-Molmo and PixMo

近期涌入了大量的MLLM模型,包括Llama-3.2-11B-Vision-Instruct、Qwen2-VL、mPLUG-Owl3、Ovis1.6-Gemma2-9B、InternVL2、MiniCPM-V 2.6 等工作。笔者看来,多模态模型可能不仅仅在刷榜上,可能更多的需要解决实际任务。因此,更能衡量…

倾斜传感器倾斜仪的工作原理

倾斜仪是一种用来测量物体倾斜角度的仪器,广泛应用于工程、建筑、地质等领域。以下是关于倾斜仪工作原理的文章: 倾斜仪工作原理详解 倾斜仪是一种高精度的测量仪器,用于检测和记录物体或结构的倾斜角度。它在许多领域,如建筑工程…

SpringBoot养老院管理系统—计算机毕业设计源码36270

摘 要 随着我国老年人口数量的逐年增加,人口抚养比也在迅速攀升,越来越多的老年人将走出家门进入养老院安度自己的晚年。同时国家和地方也相继出台了加快发展老龄事业的政策方针,作为机构养老主要组成部分的养老院将迅猛发展。在养老院规模扩…

这样做快速除甲醛入住新家 科学分解甲醛的产品哪个好

这样做快速除甲醛入住新家 科学分解甲醛的产品哪个好 在新房装修的喜悦之余,业主们不得不面对一个常见却又棘手的问题——甲醛污染。甲醛,这种无形的敌人,以其难以察觉的存在,对家人和孩子的健康造成潜在威胁。很多业主们在装修期…

OJ在线评测系统 原生Java代码沙箱程序漏洞讲解 原生超时资源权限控制

核心流程实现四 原生实现Java程序漏洞讲解 我们的程序并不安全 到目前为止 核心流程已经实现 但是想要上线 安全么 首先如果用户提交恶意代码怎么办 执行阻塞 占用资源不释放 程序卡死 注意类名要改为Main 包名一定要去掉 如果这种代码放到服务器中 会无限占用时间 pac…

在GPU计算型实例中安装Tesla驱动超详细过程

摘要:在深度学习、AI等通用计算业务场景或者OpenGL、Direct3D、云游戏等图形加速场景下,安装了Tesla驱动的GPU才可以发挥高性能计算能力,或提供更流畅的图形显示效果。如果您在创建GPU计算型实例(Linux)时未同时安装Te…

[深度学习]循环神经网络

1 自然语言处理概述 语料:一个样本,句子/文章语料库:由语料组成词表:分词之后的词语去重保存成为词表 2 词嵌入层 import jieba import torch.nn as nn import torch # 文本数据 text北京东奥的进度条已经过半,不少外…