Yolov5

这里写目录标题

    • Yolov5
      • Anchor
      • yolov5s.yaml
    • .pt文件 训练文件
    • detect.py
    • 运行结果
      • 进行实时检测,rstp链接
      • 弹幕教学
    • train.py

Yolov5

Anchor

1.Anchor是啥?
anchor字面意思是锚,是个把船固定的东东(上图),anchor在计算机视觉中有锚点或锚框,目标检测中常出现的anchor box是锚框,表示固定的参考框。

目标检测是"在哪里有什么"的任务,在这个任务中,目标的类别不确定、数量不确定、位置不确定、尺度不确定。传统非深度学习方法和早期深度学习方法,都要金字塔多尺度+遍历滑窗的方式,逐尺度逐位置判断"这个尺度的这个位置处有没有认识的目标",这种穷举的方法非常低效。

最近SOTA的目标检测方法几乎都用了anchor技术。首先预设一组不同尺度不同位置的anchor,覆盖几乎所有位置和尺度,每个anchor负责检测与其交并比大于阈值 (训练预设值,常用0.5或0.7) 的目标,anchor技术将问题转换为"这个固定参考框中有没有认识的目标,目标框偏离参考框多远",不再需要多尺度遍历滑窗,真正实现了又好又快,如在Faster R-CNN和SSD两大主流目标检测框架及扩展算法中anchor都是重要部分。

目标检测中的固定的参考框

yolov5s.yaml

# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license# Parameters
nc: 80  # number of classes
# 控制模型的大小
depth_multiple: 0.33  # model depth multiple
width_multiple: 0.50  # layer channel multiple
anchors:- [10,13, 16,30, 33,23]  # P3/8 目标框anchor是原图 八分之一stride的大小- [30,61, 62,45, 59,119]  # P4/16 十六分之一- [116,90, 156,198, 373,326]  # P5/32
#感受野比较小,适合小目标检测,浅层次的feature
#往下,感受野变大??适合检测大物体
# YOLOv5 v6.0 backbone
backbone:# [from, number, module, args]
#  number(layer重复的次数 实际上会乘上depth_multiple: 0.33,1*0.33)
#  args(每层输出的channel,实际上会乘上width_multiple: 0.50 ,64*0.50
#  向上取整
#每行是一个layer的类别,
#  第一列,输入的feature从哪儿来的,-1表示输入来自上一层的输出
# [64, 6, 2, 2] 64是输出的channel,输入channel由上一层决定,6是卷积核大小,stride,padding[[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2[-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
#   1-P2/4,第一层,p2 ,4 :featuremap的大小变成了原图的 四分之一[-1, 3, C3, [128]],[-1, 1, Conv, [256, 3, 2]],  # 3-P3/8[-1, 6, C3, [256]],[-1, 1, Conv, [512, 3, 2]],  # 5-P4/16[-1, 9, C3, [512]],[-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32[-1, 3, C3, [1024]],[-1, 1, SPPF, [1024, 5]],  # 9# SPPF :不同尺度feature的融合]# YOLOv5 v6.0 head
head:[[-1, 1, Conv, [512, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 6], 1, Concat, [1]],  # cat backbone P4[-1, 3, C3, [512, False]],  # 13[-1, 1, Conv, [256, 1, 1]],[-1, 1, nn.Upsample, [None, 2, 'nearest']],[[-1, 4], 1, Concat, [1]],  # cat backbone P3[-1, 3, C3, [256, False]],  # 17 (P3/8-small)[-1, 1, Conv, [256, 3, 2]],[[-1, 14], 1, Concat, [1]],  # cat head P4[-1, 3, C3, [512, False]],  # 20 (P4/16-medium)[-1, 1, Conv, [512, 3, 2]],[[-1, 10], 1, Concat, [1]],  # cat head P5[-1, 3, C3, [1024, False]],  # 23 (P5/32-large)
#20*20*1024的feature map[[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)]
bottleneck 和detect部分

.pt文件 训练文件

路径在这
在这里插入图片描述

detect.py

核心部分

# 通过命令行设置其中的一些参数
# 不同文件对应不同的模型(weights不同,目标检测的置信度不同# --source,输入是个文件夹,会对文件夹下所有的文件进行检测
也可以指定一张图片的相对路径,
可以是视频,会分成一帧一帧来处理
只支持YouTube视频链接,别的视频要下载下来
检测不到的objections 是因为没有进行标记
if __name__ == '__main__':parser = argparse.ArgumentParser()parser.add_argument('--weights', nargs='+', type=str, default='yolov5l.pt', help='model.pt path(s)')parser.add_argument('--source', type=str, default='data/images', help='source')  # file/folder, 0 for webcamparser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')parser.add_argument('--conf-thres', type=float, default=0.25, help='object confidence threshold')置信度,检测结果某个区域置信度大于0.25就当作是个物体实际运用过程中,对参数进行调整和确认的parser.add_argument('--iou-thres', type=float, default=0.45, help='IOU threshold for NMS')default=0.45,iou的值大于阈值就当作一个objection,从两个框中任选一个来表示这个物体,小于阈值就当作不同的物体设置为0,框和框之间不会有交集parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')-- device:使用CPU还是GPU,可以不同设置,默认是空parser.add_argument('--view-img', action='store_true', help='display results')在命令行中制定了这个参数,就会parser.add_argument('--save-txt', action='store_true', help='save results to *.txt')parser.add_argument('--save-conf', action='store_true', help='save confidences in --save-txt labels')parser.add_argument('--nosave', action='store_true', help='do not save images/videos')parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --class 0, or --class 0 2 3')parser.add_argument('--agnostic-nms', action='store_true', help='class-agnostic NMS')增强检测结果的一些方式 parser.add_argument('--augment', action='store_true', help='augmented inference')parser.add_argument('--update', action='store_true', help='update all models')parser.add_argument('--project', default='runs/detect', help='save results to project/name')parser.add_argument('--name', default='exp', help='save results to project/name')parser.add_argument('--exist-ok', action='store_true', help='existing project/name ok, do not increment')opt = parser.parse_args()print(opt)check_requirements(exclude=('pycocotools', 'thop'))
通过命令行设置其中的一些参数不同文件对应不同的模型(weights不同,目标检测的置信度不同
# --source,输入是个文件夹,会对文件夹下所有的文件进行检测
也可以指定一张图片的相对路径,
可以是视频,会分成一帧一帧来处理
只支持YouTube视频链接,别的视频要下载下来
检测不到的objections 是因为没有进行标记
 parser.add_argument('--img-size', type=int, default=640, help='inference size (pixels)')
对输入的image进行 resize,再送入神经网络中
这些训练模型,指定image size是640
训练过程,网络运算过程中对图片大小进行缩放,会恢复,输入输出尺寸其实保持不变,
最好是和训练模型指定的image size进行匹配,不匹配也没关系

运行结果

在这里插入图片描述

进行实时检测,rstp链接

通过手机电脑摄像头检测
在这里插入图片描述

弹幕教学

git clone默认最新版本 如果非用命令行可以加上-b 5.0参数选择分支

进不去pytorch的,可以尝试setting→Tools→Terminal修改shell path的路径为cmd.exe,然后关闭终端再打开

Pip安装快!!真的,血的经验!别用pycharm那个自动安装

没反应可以看土堆“PyTorch 入门深度学习环境安装与配置”视频P29,切换到anaconda的终端

就是input image的size大小不一样

意思是官方下载的5s是640,所以预测时img-size最好也用640

那是需要你们去安装annie才能使用
安妮工具
去csdn搜lux如何下载,有教程

网上有制作中文标签的教程,yolo标签是可以显示中文的

改名了,现在叫lux

UP主没有显卡吧,用的CPU太慢了,苹果电脑还是不适合做深度学习啊

手机下载ip摄像头,路径改为http://admin:admin@手机上打开之后显示的ip地址,就可以实时检测

电脑要和他在同一WiFi下,ip地址:后面的也写

手机下载ip摄像头,路径改为http://admin:admin@手机上打开之后显示的ip地址,就可以实时检测,电脑要和他在同一WiFi下,ip地址:后面的也写

所以标记框是一个归一化的比例,不是具体像素坐标

iou 全名Intersection over Union用来去除差不多概率的锚框

通俗来说iou的大小阈值用来确定这多个框是不是检测的是同一个物体,如果是,通过非最大值抑制NMS框处最大概率的那个框

python detect.py --view-img

训练train.py

0的话跑大模型慧巨慢。cpu io操作太慢成瓶颈了。gpu就容易空闲。8就差不多

win10之后好像workers就可以接受参数0了

下载失败的话可以复制链接用迅雷下载

下载之后在yolov5同级目录下新建名为datasets的文件夹,把解压缩的coco128放在datasets中就可以运行了

5.0版本下载后放到与项目平行的文件中,不要放到项目文件下,刚刚试了一下 coco128和yolov5应该在同一个文件夹里

detect是别人已经训练好的,现在是我们自己训练

detect的意思就是识别 用已经预训练过的模型进行预测

最新的第七版代码里,这个coco128放在了datasets下

你也可以在此基础上再训练 类似迁移学习

友友们,千万不用去注册这个wandb,一个大坑。。。。

跑失败的,看看是不是报错内存不足,试着调低batch-size
out of memory 的同学可以把参数里的batch_size调成2或者4
显卡内存不够的,可以试试把batch_size 设置为1

best.pt所有epoch中 ,哪一轮训练中效果最好的网络模型参数
last最后一个训练的网络模型

hyp.haml模型的超参数

weights没有文件的看下最新的exp 每运行一次就产生一个exp文件
标注的分布
标注的相关矩阵
训练结果的记录
训练的图片

cuda out of memory可以改batch size和epoch,都调小就行了

train.py

参数权重的初始虎啊
训练好的模型,作为训练过程中的参数初始化(好像叫 迁移学习)如yolov5x.pt
从头开始训练,默认为空,程序当中 很简单的初始化

关于模型的配置,模型的结构,可以选用训练好的文件,例如yolov5.yaml,模型的深度模型的配置,

指定训练数据集,制定了在哪里下载数据集,数据集中类别是什么

在这里插入图片描述
超参数

batch-size 多少个数据打包成一个batch,送到网络当中

parser.add_argument('--rect', action='store_true', help='rectangular training')

–rect 减少冗余填充,提升计算效率 rectangular training
rect矩阵的训练方式
减少不必要信息

跟土堆学yolov5目标检测p7训练yolov5模型(本地)(一)
跟土堆学yolov5目标检测p7训练yolov5模型(本地)(二)
【yolov5】 train.py详解
yolov5学习(二)Colab上使用自己的数据集训练yolov5
学习yolov5核心脚本的各种参数,调试运行,在colab上运行

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Python从入门到进阶】42、使用requests的Cookie登录古诗文网站

接上篇《41、有关requests代理的使用》 上一篇我们介绍了requests代理的基本使用,本篇我们来学习如何利用requests的Cookie登录古诗文网。 一、登录网站及目的介绍 我们需要Cookie模拟登录的网站为:https://www.gushiwen.cn/(古诗文网&…

SpringBoot项目连接linux服务器数据库两种解决方法(linux直接开放端口访问本机通过SSH协议访问,以mysql为例)

最近找个springboot脚手架重新熟悉一下springboot相关框架的东西,结果发现好像项目还不能直接像数据库GUI工具一样填几个SSH参数就可以了,于是就给他再整一下看看如何解决 linux开放3306(可修改)端口直接访问 此方法较为方便&am…

从0开始学习数据结构 C语言实现 1.前篇及二分查找算法

一、前篇 1、什么是数据结构? 数据结构是带有结构特性的数据元素的集合,它研究的是数据的逻辑结构和数据的物理结构以及它们之间的相互关系 2、时间复杂度与空间复杂度 大O符号是用于描述函数渐进行为的数学符号 常用函数的增长表 阶乘O(n!) > 指数…

LeetCode - 26. 删除有序数组中的重复项 (C语言,快慢指针,配图)

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 思路一:快慢指针 在数组中,快慢指针就是两个整数下标,定义 fast 和 slow 这里我们从下标1开始(下标0的数据就1个,没有重复项)&…

Flutter最新稳定版3.16 新特性介绍

Flutter 3.16 默认采用 Material 3 主题,Android 平台预览 Impeller,DevTools 扩展等等 Flutter在每个季度通常都会有个稳定版本的发布。在2023 Q4的更新中为大家带来的是Flutter 3.16。这个版本将 Material 3 设为新的默认主题,并为 Android…

人生阶段总结

--回顾一下我迷茫、努力、不开心又失败的阶段人生自我介绍一下,我是一个智力平平,记忆力差,适合自学的长睡眠者。 大专之前 国内的应试教育基本上不适合我,厌恶补课厌恶机械式听课刷题,所有的优势学科都是自学&#xf…

Unity中Shader法线贴图(上)

文章目录 前言一、法线纹理的作用二、为什么法线贴图长这样?(蓝色)三、法线贴图能使纹理采样时,进行偏移采样四、在Shader中使用法线贴图1、在属性面板定义一个变量来接收法线贴图2、在使用前声明 _NormalTex3、在片元着色器中&am…

【Go入门】Web工作方式

【Go入门】 Web工作方式 我们平时浏览网页的时候,会打开浏览器,输入网址后按下回车键,然后就会显示出你想要浏览的内容。在这个看似简单的用户行为背后,到底隐藏了些什么呢? 对于普通的上网过程,系统其实是这样做的&…

内容运营工具:标签体系

一.分类和标签的区别 ■标签是扁平的,分类是层级的。 ■标签是精确的,分类是粗糙的。 ■标签是多维的,分类是一维的。 二.标签的本质:元数据 事实上,在数据领域,有一个鼎鼎大名的词汇与标签极其雷同&…

Python爬虫的七个常用技巧总结,这些你一定得知道!

文章目录 前言1、基本抓取网页2、使用代理IP3、Cookies处理4、伪装成浏览器5、验证码的处理6、gzip压缩7、多线程并发抓取关于Python技术储备一、Python所有方向的学习路线二、Python基础学习视频三、精品Python学习书籍四、Python工具包项目源码合集①Python工具包②Python实战…

锐捷EG易网关login.php以及其后台cli.php/branch_passw.php RCE漏洞复现 [附POC]

文章目录 锐捷EG易网关login.php以及其后台cli.php/branch_passw.php远程代码执行漏洞复现 [附POC]0x01 前言0x02 漏洞描述0x03 影响版本0x04 漏洞环境0x05 漏洞复现1.访问漏洞环境2.构造POC3.复现 锐捷EG易网关login.php以及其后台cli.php/branch_passw.php远程代码执行漏洞复…

Mysql -常见函数

目录 字符串函数 数值函数 日期函数 流程函数 字符串函数 -- 拼接 SELECT CONCAT(Hello, World); -- 小写 SELECT LOWER(Hello); -- 大写 SELECT UPPER(Hello); -- 左填充 SELECT LPAD(01, 5, -); -- 右填充 SELECT RPAD(01, 5, -); -- 去除空格 SELECT TRIM( Hello World )…

批量替换WordPress文章内图片链接

在WordPress使用过程中,如果中途更换了域名,原先文章内的图片使用的是原来的域名,就会造成文章页里面的图片链接无法显示。如果从后台文章挨个修改就比较麻烦。可以通过数据库进行批量替换即可。 使用 PHPMyadmin 打开 数据库,登…

【C++】一文全解C++中的异常:标准库异常体系&自定义异常体系(含代码演示)

前言 大家好吖,欢迎来到 YY 滴C系列 ,热烈欢迎! 本章主要内容面向接触过C的老铁 主要内容含: 欢迎订阅 YY滴C专栏!更多干货持续更新!以下是传送门! 目录 一.C语言传统的处理错误的方式二.C异常…

修完这个 Bug 后,MySQL 性能提升了 300%

最近 MySQL 官方在 8.0.35 上修复了一个 bug: 这个 bug 是由 Mark Callaghan 发现的。Mark 早年在 Google MySQL 团队,后来去了 Meta MySQL,也主导了 RocksDB 的开发。 Mark 在 #109595 的 bug report 给出了非常详细的复现步骤 在官方修复后…

【网络通信】探索UDP与TCP协议、IP地址和端口号的奥妙

🌺个人主页:Dawn黎明开始 🎀系列专栏:网络奇幻之旅 ⭐每日一句:往前走,朝着光 📢欢迎大家:关注🔍点赞👍评论📝收藏⭐️ 文章目录 📋前…

【Web】Ctfshow SSTI刷题记录1

目录 ①web361 362-无过滤 ②web363-过滤单双引号 ③web364-过滤单双引号和args ④web365-过滤中括号[]、单双引号、args ⑤web366-过滤单双引号、args、中括号[]、下划线 ⑦web367-过滤单双引号、args、中括号[]、下划线、os ⑧web368-过滤单双引号、args、中括号[]、下…

如何在 Nginx Proxy Manager(NPM)上部署静态网站

前言 众所周知,我们在之前介绍过 Nginx Proxy Manager(以下简称 NPM) 这个反向代理的神器,对于一些 Docker 搭建的 Web 项目,NPM 能够很轻松地给他们做反向代理。 然而对于一些静态网站,小伙伴们可能不知道怎么用 NP…

Ubuntu 安装VMware Tools选项显示灰色,如何安装VMware Tools

切换apt源为阿里云: https://qq742971636.blog.csdn.net/article/details/134291339 只要你的网络没问题,你直接执行这几个命令,重启ubuntu虚拟机即可、 sudo dpkg --configure -a sudo apt-get autoremove open-vm-tools sudo apt-get ins…

LangChain 2模块化prompt template并用streamlit生成网站 实现给动物取名字

上一节实现了 LangChain 实现给动物取名字, 实际上每次给不同的动物取名字,还得修改源代码,这周就用模块化template来实现。 1. 添加promptTemplate from langchain.llms import OpenAI # 导入Langchain库中的OpenAI模块 from langchain.p…