目标检测模型——One stage(YOLO v5的模型解析及应用)

1. 简介

目标检测分为Two stage和One stage,只使用一个网络同时产生候选区域并预测出物体的类别和位置,所以它们通常被叫做单阶段检测算法(One stage)。本篇文章只讲One stage模型,常见的模型有YOLO,SSD。

目标检测发展路程(一)——Two stage_樱缘之梦-CSDN博客

2. 原理

(1)YOLO(You Only Look Once)

YOLO模型已经更新了5个版本,分别是YOLO v1,YOLO v2,YOLO v3,YOLO v4,YOLO v5,模型版本的异同可以参考以下文章(已经有很多比较优秀的文章解释):

总结 | 一文读懂 YOLOv1,v2,v3,v4 发展史 - 知乎

Yolov5 系列1--- Yolo发展史以及Yolov5模型详解_g11d111的博客-CSDN博客_yolov5模型

百度PaddleDetection也出了一个PP-YOLO模型(基于YOLO v3的优化模型,在COCO数据集上的mAP和执行速度要比YOLO v4好)。

(2)SSD

SSD(Single Shot MultiBox Detector)于2016年提出,是经典的单阶段目标检测模型之一。具体算法细节可参考:

目标检测|SSD原理与实现 - 知乎

3. 模型解析

下载地址:GitHub - ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLiteYOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite. Contribute to ultralytics/yolov5 development by creating an account on GitHub.https://github.com/ultralytics/yolov5

该地址中已包含简单调用,可作为简单参考。

3.1. 文件内容解析

从上述地址下载文件,解压之后,获得如下文件:

  • data:数据文件夹

     ————hyps:超参数文件

     ————images:yolo v5测试的两张图片,zidian.jpg,bus.jpg

     ————各项数据集的yaml文件,里边包括存储路径path、train、val、分类数量(number of classes),分类名称、download(下载路径)等信息

  • models:模型文件夹

       ————hyps:模型文件,包含模型的anchors、backbone、head等参数

       ————模型配置:不同的yolo v5模型的配置,精度和效果不一样,有smxln五种。

  • runs:运行结果文件,运行之后会出现

       ————detect:测试模型,输出图片并在图片中标注出物体和概率

       ————train:训练模型,输出内容,模型(最好、最新)权重、混淆矩阵、F1曲线、超参数文件、P曲线、R曲线、PR曲线、结果文件(loss值、P、R)等

  • utils:工具文件夹
  • detect.py:测试文件
  • export.py:
  • hubconf.py
  • requirement.txt:可以通过pip install requirement进行依赖环境下载。
  • train.py:训练文件
  • tutorial.ipynb
  • val.py
  • yolov5s.pt:自行下载的,这个是yolov5轻量级的模型

3.2. 数据集

3.2.1. COCO数据集

COCO的 全称是Common Objects in COntext,是微软团队提供的一个可以用来进行图像识别/图像分割/语义标注的数据集,标注信息包括类别,位置和语义文本。MS COCO数据集中的图像分为训练、验证和测试集。COCO通过在Flickr上搜索80个对象类别和各种场景类型来收集图像,其使用了亚马逊的Mechanical Turk(AMT)。常用的场景有目标实例,目标上的关键点、看图说话,标注内容为json格式。

3.2.2. VOC数据集

PASCAL VOC(Pattern Analysis Statistical modelling,Computational and Learning Visual Object Classes)是一个用于图像分类/识别/分割的数据集。有人类、动物、交通工具,室内四个大类,20个小的目标类别。标注信息以XML格式保存。

3.3. 模型

YOLO v5的模型版本有s、m、l、x、n共5个不同精度的模型,引入了depth_multiple和width_multiple系数来得到不同大小模型,depth_multiple表示channel的缩放系数,就是将配置里面的backbone和head部分有关通道的设置,全部乘以该系数即可。而width_multiple表示BottleneckCSP模块的层缩放系数,将所有的BottleneckCSP模块的number系数乘上该参数就可以最终的层个数。可以发现通过这两个参数就可以实现不同大小不同复杂度的模型设计。比yolov4更加灵活。

4. 应用

4.1. detect(测试)

#不要有中文路径
python detect.py --source ./data/images/bus.jpg --weights yolov5s.pt

可配置参数:

#--weights,模型的权重参数文件
parser.add_argument('--weights', nargs='+', type=str, default=ROOT / 'yolov5s.pt', help='model path(s)')
#--source 数据资源(图片或视频地址)
parser.add_argument('--source', type=str, default=ROOT / 'data/images', help='file/dir/URL/glob, 0 for webcam')
#--imgsz,--img,--img-size 图像尺寸,默认为640
parser.add_argument('--imgsz', '--img', '--img-size', nargs='+', type=int, default=[640], help='inference size h,w')
#置信度阈值,默认0.25
parser.add_argument('--conf-thres', type=float, default=0.25, help='confidence threshold')
#iou(交并比)阈值,默认0.45
parser.add_argument('--iou-thres', type=float, default=0.45, help='NMS IoU threshold')
#一张图片中最大识别种类的个数,默认为1000
parser.add_argument('--max-det', type=int, default=1000, help='maximum detections per image')
#运行设备方式,GPU或者CPU
parser.add_argument('--device', default='', help='cuda device, i.e. 0 or 0,1,2,3 or cpu')
#展示结果图片
parser.add_argument('--view-img', action='store_true', help='show 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('--save-crop', action='store_true', help='save cropped prediction boxes')
#不保存图片或视频
parser.add_argument('--nosave', action='store_true', help='do not save images/videos')
#指定分类
parser.add_argument('--classes', nargs='+', type=int, help='filter by class: --classes 0, or --classes 0 2 3')
#未知的NMS
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('--visualize', action='store_true', help='visualize features')
#更新所有模型
parser.add_argument('--update', action='store_true', help='update all models')
#保存结果在项目里边
parser.add_argument('--project', default=ROOT / 'runs/detect', help='save results to project/name')
#保存结果在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')
#bbox(边界框)的边界的厚度(像素)
parser.add_argument('--line-thickness', default=3, type=int, help='bounding box thickness (pixels)')
#隐藏labels
parser.add_argument('--hide-labels', default=False, action='store_true', help='hide labels')
#隐藏置信度
parser.add_argument('--hide-conf', default=False, action='store_true', help='hide confidences')
#使用FP16 half-precision
parser.add_argument('--half', action='store_true', help='use FP16 half-precision inference')
#使用opencv的DNN
parser.add_argument('--dnn', action='store_true', help='use OpenCV DNN for ONNX inference')

4.2. train(训练)

#默认coco数据集
python train.py  --weights yolov5s.pt --epochs 5

可配置参数(未展示完全):

#模型的权重参数文件
parser.add_argument('--weights', type=str, default=ROOT / 'yolov5s.pt', help='initial weights path')
#模型yaml文件路径
parser.add_argument('--cfg', type=str, default='', help='model.yaml path')
#数据集的yaml文件
parser.add_argument('--data', type=str, default=ROOT / 'data/coco128.yaml', help='dataset.yaml path')
#超参数文件
parser.add_argument('--hyp', type=str, default=ROOT / 'data/hyps/hyp.scratch.yaml', help='hyperparameters path')
#训练批次
parser.add_argument('--epochs', type=int, default=300)
#批次大小
parser.add_argument('--batch-size', type=int, default=16, help='total batch size for all GPUs')
#图片文件大小
parser.add_argument('--imgsz', '--img', '--img-size', type=int, default=640, help='train, val image size (pixels)')

4.3. 数据标注

常用工具:Labelimg,支持yolo v5的格式,对真实框数据进行归一化处理

 常用工具:Calabeler,支持xml,json,MongoDB格式,数据集在进行yolo v3模型使用时,还需进行边框值归一化处理。

 4.4. 使用自己的数据集进行训练

python train.py --weights yolov5s.pt --data  ./data/dataset.yaml --cfg ./models/yolov5s.yaml  --epochs 50  --batch-size 8 --device 0

(1)数据集文件

如果是本地文件,数据集包含路径,分类数量,分类类别

 (2)权重文件

可以自行下载yolov5s.pt文件,这个是精度为s的yolo v5模型。

5. 总结

想要实现其他模型,步骤和现在类似,但是会出现GPU资源不够用和CPU训练较慢的问题,再者,模型的原理细节也值得反复推敲。

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

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

相关文章

腾讯回应QQ读取用户浏览器历史记录

腾讯QQ官方认证账号在知乎回应“QQ扫描读取所有浏览器的历史记录”表示,PC QQ存在读取浏览器历史用以判断用户登录安全风险的情况,读取的数据用于在PC QQ的本地客户端中判断是否恶意登录。所有相关数据不会上传至云端,不会储存,也…

【NOIP 模拟赛】 道路

题目描述在二维坐标平面里有 N 个整数点,信息班某一巨佬要访问这 N 个点。刚开始巨佬在点(0,0)处。 每一步,巨佬可以走到上、下、左、右四个点。即假设巨佬当前所在点的坐标是(x,y),那么它下一步可以移动到(x,y1), (x,y-1), (x1,y),(x-1,y)之一。巨佬目标是找到一个移动序列,满…

MySQL实用命令

windows 启动和关闭Myql服务 “net start mysql”就启动mysql服务了,停止mysql服务“net stop mysql”(注意,这里是输入的MySQL服务的名字。如果你的MySQL服务的名字是DB或其它名字,你应该输入“net start DB”或其它名&#xff0…

OCR系列——总体概述

最近参加了百度Paddle的动手学OCR课程,特此做一个学习总结。 1. 简介 OCR(Optical Character Recognition,光学字符识别)是计算机视觉重要方向,传统的OCR一般面向扫描文档类对象,现在的OCR是指场景文字识…

STM32——系统滴答定时器

STM32——系统滴答定时器 宗旨:技术的学习是有限的,分享的精神是无限的。 一、SysTick【内核中】 【风格:先描述一下库对寄存器的封装,再举例实现某些功能】 SysTick定时器被捆绑在NVIC中,用于产生SysTick异常&#…

就算是蜗牛,也有爬到树顶的那一天!~

我知道,现在的我很菜,与年龄及其不相符的菜。 因为之前一直做销售,对于计算机,自己真可算得上是白痴。 是的,我毫不讳言选择计算机是一条退路,也毫不讳言之前的自己是一个懦弱无能的男人。 借口太多了&…

你会用while(1)还是for(;;)写循环代码?

看代码看到for(;;)&#xff0c;然后觉得为什么不写成while(1)呢&#xff0c;所以就做了下面的测试。网上有解释&#xff0c;因为while需要做一次判断&#xff0c;理论上执行会花费的时间更久&#xff0c;for(;;)只是执行了两次空语句&#xff0c;执行会更快for.c#include <s…

树链剖分小结

这里没有水表 树链剖分是一个通过轻重链剖分、dfs序和线段树的使用,在有根树上维护路径和子树信息的有效算法 其预处理时间复杂度为\(O(nlog^2n)\),单次操作时间复杂度为\(O(log^2n)\),常数优秀 主要是防止自己忘记,所以只作简要说明,要学习的可以参考友链里大佬的博客 预处理 …

OCR系列——文本检测任务

1. 简介 文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务&#xff0c;目标检测不仅要解决定位问题&#xff0c;还要解决目标分类问题。 目标检测和文本检测同属于“定位”问题。但是文本检测无需对目标分类&#xff0c;并且文本形状复杂多样。 当前所说的文本…

关于ORACLE 语句中,IN 超过1000个的解决方法

在ORACLE SELECT 语句中 IN 的数据如果超过 1000&#xff0c;就会出错&#xff0c;解决方法也很简单&#xff0c;以C#代码为例&#xff1a; 1、先写一个方法&#xff0c;接收2个参数 参数1&#xff1a;接收 IN里面的数据&#xff0c;如&#xff1a;a1,a2,...a2000 &#xff1b;…

9个提高代码运行效率的小技巧你知道几个?

我们写程序的目的就是使它在任何情况下都可以稳定工作。一个运行的很快但是结果错误的程序并没有任何用处。在程序开发和优化的过程中&#xff0c;我们必须考虑代码使用的方式&#xff0c;以及影响它的关键因素。通常&#xff0c;我们必须在程序的简洁性与它的运行速度之间做出…

STM32——按键

STM32——按键 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、GPIO工作模式 1、当I/O端口配置为输入时&#xff1a; 输出缓冲器被禁止 施密特触发输入被激活 根据输入配置(上拉&#xff0c;下拉或浮动)的不同&#xff0c;弱上拉和下拉电阻被连接 …

【Flask模板】include标签

# include标签&#xff1a;1. 这个标签相当于是直接将指定的模版中的代码复制粘贴到当前位置。2. include标签&#xff0c;如果想要使用父模版中的变量&#xff0c;直接用就可以了&#xff0c;不需要使用with context。3. include的路径&#xff0c;也是跟import一样&#xff0…

深度学习——模型的压缩和加速

1. 简介 随着深度学习发展&#xff0c;越来越多的模型被发现和应用&#xff0c;模型的体量也越来越大&#xff0c;出现了模型过于庞大和参数冗余的问题。同时&#xff0c;移动端对模型的需求也是越轻量越好&#xff0c;因此&#xff0c;模型压缩和加速技术应运而生。 模型压缩…

干货,记一次解决录音杂音问题

最近在项目上遇到一个问题&#xff0c;也不能说是最近项目上的问题了&#xff0c;是之前一直存在的问题&#xff0c;但是对项目没什么影响&#xff0c;所以我就不怎么理会&#xff0c;直到最近&#xff0c;同事说这个杂音已经影响到了项目的开发&#xff0c;所以今天花了一天时…

3.5.2 冒泡排序类

那么&#xff0c;我们就以冒泡排序为例&#xff0c;把它改造成一个类。首先&#xff0c;单击菜单&#xff0c;“项目”&#xff0d;“添加类”&#xff0c;添加一个BubbleSort.cs类文件。IDE自动为我们创建如下代码&#xff1a; usingSystem;usingSystem.Collections.Generic;u…

STM32——串口通信

STM32——串口通信 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、异步串口通信协议 STM32 的串口非常强大&#xff0c;它不仅支持最基本的通用串口同步、异步通信&#xff0c;还具有 LIN 总线功能&#xff08;局域互联网&#xff09;、IRDA 功能&…

操作系统——经典同步问题

1、概念 1.1 进程同步与互斥 在多道程序环境下&#xff0c;进程是并发执行的&#xff08;并发执行是指两个或多个事件在某段时间间隔内并发&#xff09;&#xff0c;不同进程之间存在着不同的相互制约关系。为了协调进程之间的相互制约关系&#xff0c;引入了进程同步的概念。…

JavaScript权威指南(第5版)pdf

下载地址&#xff1a;网盘下载内容简介编辑第5版针对Ajax和Web 2.0技术进行了全新的改版。和上一版相比&#xff0c;更新的内容较多&#xff0c;总体上接近整个篇幅的1/2&#xff0c;而这也正是本书姗姗来迟的原因之一。具体来说&#xff0c;第5版在以下部分有所更新&#xff1…