yolov5使用

news2024/11/25 16:06:05

参考网址:https://zhuanlan.zhihu.com/p/501798155

源码下载及使用

release下载source及pt文件(yolov5s.pt)
https://github.com/ultralytics/yolov5/tags
https://github.com/ultralytics/yolov5/releases/tag/v5.0

安装yolov5训练所需的第三方库
1. 安装anaconda,版本conda -V 进入yolo5目录下 cd [path_to_yolov5]
2. 新建虚拟环境 conda create -n yolov5GPU python=3.7 -y
3. 激活虚拟环境 conda activate yolov5GPU
4. pip install -r requirements.txt
5. 将xx.pt复制在yolov5文件夹下
6. PyCharm打开yolov5源码,File->Settings->Project:yolov5-5.0->Python Interpreter->Add->Conda Enviroment->Existing environment (D:\ProgramData\Anaconda3\envs\yolov5\python.exe),保存后,右下角显示Python3.7(yolo5)
7. PyCharm运行detect.py,提示错误 AttributeError: 'Upsample' object has no attribute 'recompute_scale_factor'
进入 D:\ProgramData\Anaconda3\envs\yolov5\lib\site-packages\torch\nn\modules\upsampling.py 行号:155 编辑并保存
def forward(self, input: Tensor) -> Tensor:
#return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners,
# recompute_scale_factor=self.recompute_scale_factor)
return F.interpolate(input, self.size, self.scale_factor, self.mode, self.align_corners)

train时,提示错误 
问题1:AssertionError: Label class 1 exceeds nc=1 in data/fire.yaml. Possible class labels are 0-0
解决:注释掉train.py中的一行代码 #assert mlc < nc, 'Label class %g exceeds nc=%g in %s. Possible class labels are 0-%g' % (mlc, nc, opt.data, nc - 1)

问题2:
Traceback (most recent call last):
File "G:/yolov/yolov5-5.0/train.py", line 543, in <module>
train(hyp, opt, device, tb_writer)
File "G:/yolov/yolov5-5.0/train.py", line 304, in train
loss, loss_items = compute_loss(pred, targets.to(device)) # loss scaled by batch_size
File "G:\yolov\yolov5-5.0\utils\loss.py", line 117, in __call__
tcls, tbox, indices, anchors = self.build_targets(p, targets) # targets
File "G:\yolov\yolov5-5.0\utils\loss.py", line 211, in build_targets
indices.append((b, a, gj.clamp_(0, gain[3] - 1), gi.clamp_(0, gain[2] - 1))) # image, anchor, grid indices
RuntimeError: result type Float can't be cast to the desired output type __int64

解决:loss.py 行号:1136

for i in range(self.nl):
            anchors, shape = self.anchors[i], p[i].shape
            gain[2:6] = torch.tensor(shape)[[3, 2, 3, 2]]  # xyxy gain
 
            # Match targets to anchors
            t = targets * gain  # shape(3,n,7)
            if nt:
                # Matches
                r = t[..., 4:6] / anchors[:, None]  # wh ratio
                j = torch.max(r, 1 / r).max(2)[0] < self.hyp['anchor_t']  # compare
                # j = wh_iou(anchors, t[:, 4:6]) > model.hyp['iou_t']  # iou(3,n)=wh_iou(anchors(3,2), gwh(n,2))
                t = t[j]  # filter
 
                # Offsets
                gxy = t[:, 2:4]  # grid xy
                gxi = gain[[2, 3]] - gxy  # inverse
                j, k = ((gxy % 1 < g) & (gxy > 1)).T
                l, m = ((gxi % 1 < g) & (gxi > 1)).T
                j = torch.stack((torch.ones_like(j), j, k, l, m))
                t = t.repeat((5, 1, 1))[j]
                offsets = (torch.zeros_like(gxy)[None] + off[:, None])[j]
            else:
                t = targets[0]
                offsets = 0
 
            # Define
            bc, gxy, gwh, a = t.chunk(4, 1)  # (image, class), grid xy, grid wh, anchors
            a, (b, c) = a.long().view(-1), bc.long().T  # anchors, image, class
            gij = (gxy - offsets).long()
            gi, gj = gij.T  # grid indices
 
            # Append
            indices.append((b, a, gj.clamp_(0, shape[2] - 1), gi.clamp_(0, shape[3] - 1)))  # image, anchor, grid
            tbox.append(torch.cat((gxy - gij, gwh), 1))  # box
            anch.append(anchors[a])  # anchors
            tcls.append(c)  # class

return tcls, tbox, indices, anch

测试:
conda activate yolov5GPU
python detect.py --weights yolov5s.pt --source data/images/bus.jpg # 测试结果保存在runs/detect

conda activate yolov5GPU
python detect.py --weights yolov5s.pt --source test.mp4

自己训练模型

1.收集数据集(image/train/001.jpg)

dataset #(数据集名字:例如fire) 
├── images      
       ├── train          
              ├── xx.jpg     
       ├── val         
              ├── xx.jpg 
├── labels      
       ├── train          
              ├── xx.txt     
       ├── val         
              ├── xx.txt 

2.标注数据集(label/train/001.txt),可使用yolov5目标识别实现半自动化标注,用labelimg进行校验

3.训练数据集(weight/best.pt),在yaml文件内不要使用中文

yolov5-5.0/data/fire.yaml

# Train/val/test sets as 1) dir: path/to/imgs, 2) file: path/to/imgs.txt, or 3) list: [path/to/imgs1, path/to/imgs2, ..]
path: G:\yolov\datasets\fire  # dataset root dir
train: G:\yolov\datasets\fire\images\train  # train images (relative to 'path')
val: G:\yolov\datasets\fire\images\val  # val images (relative to 'path')
test:  # test images (optional)

# Classes
nc: 1  # number of classes
names: ['fire']  # class names

yolov5-5.0/data/catdog.yaml

path: ../datasets/catdog
train: ../datasets/catdog/images/train
val: ../datasets/catdog/images/val

# Classes
nc: 2
names: ['cat', 'dog']

yolov5-5.0/models/yolov5s_catdog.yaml

修改 nc :2

python train.py --weights yolov5s.pt --data data/fire.yaml --workers 1 --batch-size 8 

python train.py --img 640 --batch 16 --epochs 300 --data ./data/catdog.yaml --cfg ./models/yolov5s_catdog.yaml --weights ./weights/yolov5s.pt --device 0

4.模型测试,目标检测(objname=people;potion=box_l, box_t, box_r, box_b;confidence=0.6;name=29)

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

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

相关文章

433MHz无线通信--模块RXB90

1、接收模块RXB90简介 两个数据输出是联通的。 2、自定义一个编码解码规则 组数据为“0x88 0x03 0xBD 0xB6”。 3、发射模块 如何使用示波器得到捕捉一个周期的图像&#xff1f; 通过date引脚连接示波器CH1&#xff0c;以及示波器探针的接地端接芯片的GND&#xff0c;分…

初识C语言——函数

目录 一、库函数 二、自定义函数 三、函数的参数 四 、函数的调用 1 、传值调用 2 、传址调用 五、函数的嵌套调用和链式访问 六、函数的声明和定义 1 函数声明&#xff1a; 2 函数定义&#xff1a; 七、函数的递归与迭代 八、总结 一、库函数 库函数查询网站&#xff…

浅谈智慧城市管廊综合管理平台的建设

摘 要&#xff1a;随着智慧城市的发展&#xff0c;地下综合管廊的建设不断增多&#xff0c;建成后的管廊需要有科学合理的综合管理平台对其进行智能化管理。本文介绍了地下综合管廊的建设内容&#xff0c;从管廊智能化管理角度出发&#xff0c;在运用GIS、可视化、传感器、物联…

多线程服务器

设计一个客户端从服务器端获取时间的程序&#xff1a; 服务器端使用多线程的方式&#xff0c;当有客户端请求到达时&#xff0c;服务器将启动一个新线程为它返回当前的时间&#xff0c;服务完后线程自动销毁&#xff0c;服务器端会显示连接的次数。 客户端比较简单&#xff0c;…

MySQL安装手册

文章目录一、系统环境二、检查是否已安装三、安装步骤1、yum安装1.1、更新yum1.2、使用wget下载mysql yum源&#xff1a;1.3、添加 mysql yum 源:1.4、安装 yum 工具 yum-utils :1.5、查看可用的 mysql :1.6、查看所有的 mysql 版本1.7、使用指定版本MySQL1.8、查看当前启用的M…

Netty源码解读-server端(一)

一、回顾NIO中的server 下面是我在学习nio时&#xff0c;写的selctor版本的服务端&#xff0c;具体代码如下&#xff1a; public static void nioSelectorServer() throws Exception{//1。创建SelectorSelector selector Selector.open();ServerSocketChannel ssc ServerSo…

c++ bind 函数讲解

1.bind 函数的使用详解 可以将bind函数看作一个通用的函数适配器&#xff0c;它接受一个可调用对象&#xff0c;生成一个新的可调用对象来“适应”原对象的参数列表。 调用bind的一般形式&#xff1a;auto newCallable bind(callable,arg_list); 其中&#xff0c;newCallab…

从零实现深度学习框架——再探多层双向RNN的实现

来源&#xff1a;投稿 作者&#xff1a;175 编辑&#xff1a;学姐 往期内容&#xff1a; 从零实现深度学习框架1&#xff1a;RNN从理论到实战&#xff08;理论篇&#xff09; 从零实现深度学习框架2&#xff1a;RNN从理论到实战&#xff08;实战篇&#xff09; 从零实现深度…

【Vue3】首页主体-面板组件封装

首页主体-面板组件封装 新鲜好物、人气推荐俩个模块的布局结构上非常类似&#xff0c;我们可以抽离出一个通用的面板组件来进行复用 目标&#xff1a;封装一个通用的面板组件 思路分析 图中标出的四个部分都是可能会发生变化的&#xff0c;需要我们定义为可配置主标题和副标题…

您可以使用 21 个很棒的搜索引擎来代替 Google

在过去的 20 年里&#xff0c;Google 一直是大多数人用于日常搜索、产品研究和了解最新消息的搜索引擎。凭借其长期的统治地位和大部分市场份额&#xff0c;很难说任何搜索引擎都能提供比谷歌更好的结果。由于这种市场主导地位&#xff0c;谷歌也一直是SEO和营销专业人士关注的…

随笔-老子不想牺牲了

18年来到这个项目组&#xff0c;当时只有8个人&#xff0c;包括经常不在的架构师和经理。当时的工位在西区1栋A座&#xff0c;办公桌很宽敞。随着项目的发展&#xff0c;入职的人越来越多&#xff0c;项目的工位也是几经搬迁。基本上每次搬迁时&#xff0c;我的工位都是挑剩下的…

Allegro如何实现同一个屏幕界面分屏显示操作指导

Allegro如何实现同一个屏幕界面分屏显示操作指导 在做PCB设计的时候,会需要分屏显示,比如一边是放大的视图,另外一边是缩小的视图,Allegro支持同一个屏幕界面下进行分屏显示,如下图 而且会实时同步起来 如何分屏,具体操作如下 点击View

(python)降低图像质量

降低数字图像质量(python实现) 目录 降低数字图像质量(python实现)一、分别采用五种不同的方式来降低图像的质量1. 给图像添加椒盐噪声2. 给图像添加高斯噪声3. 对图像进行高斯模糊4. 对图像进行运动模糊5. 对图像进行插值下采样二、实现代码一、分别采用五种不同的方式来降…

操作系统(六)磁盘调度算法与优化

操作系统&#xff08;六&#xff09;磁盘调度算法与优化 一、磁盘调度算法 时间指标 寻找时间&#xff1a;在读/写数据前&#xff0c;将磁头移动到指定磁道需要的时间延迟时间&#xff1a;通过旋转盘面&#xff0c;将磁头定位到目标扇区所需的时间传输时间&#xff1a;从磁盘…

Leetcode.1124 表现良好的最长时间段

题目链接 Leetcode.1124 表现良好的最长时间段 Rating &#xff1a; 1908 题目描述 我们认为当员工一天中的工作小时数大于 8 小时的时候&#xff0c;那么这一天就是「劳累的一天」。 所谓「表现良好的时间段」&#xff0c;意味在这段时间内&#xff0c;「劳累的天数」是严格…

argocd 调研

Argo CD 是基于 Kubernetes 的声明式&#xff0c; GitOps 持续交付工具。GitOps AgentGitOps IaC Git CI/CD&#xff0c;即基于 IaC 的版本化 CI/CD。它的核心是使用 Git 仓库来管理基础设施和应用的配置&#xff0c;并且以 Git 仓库作为基础设施和应用的单一事实来源。Git …

Windows 11 办公实用效率小技巧总结(持续更新)

Win11 办公实用效率小技巧总结:1. 虚拟桌面2. 拖拽任务窗口转移到不同虚拟桌面3. 自定义多网页名称4. Focus专注组件5. 多选项分屏6. 抖一抖最小化1. 虚拟桌面 虽然过去只有 Linux&#xff0c; Mac 系统中有虚拟桌面&#xff0c;而且在win10 中也实现了这个功能&#xff0c;但…

Springboot835学生成绩分析系统--java

开发语言&#xff1a;Java 框架&#xff1a;Springboot 技术&#xff1a;JSP JDK版本&#xff1a;JDK1.8 目 录 1 绪 论 5 1.1课题背景 5 1.2 课题研究的意义 5 1.3 系统实现的功能 5 1.4 课题研究现状 5 2系统相关技术 7 2.1 Java技术 7 2.2 B/S架构 7 2.3 MySQL 介绍 7 2.4My…

zabbix邮件报警配置

在Zabbix服务端设置邮件报警&#xff0c;当被监控主机宕机或者达到触发器预设值时&#xff0c;会自动发送报警邮件到指定邮箱。 邮件服务可以使用系统自带的邮件服务来发送邮件或者使用其他邮件服务调用第三方邮件来发送警告邮件。 一、开启发件服务器SMTP功能 这里发送邮件的…

初始C++(四):内联函数

文章目录一.内联函数概念二.内联函数用法三.内联函数的特性四.内联函数和宏一.内联函数概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率。 二.内联函…