目标检测笔记(十三): 使用YOLOv5-7.0版本对图像进行目标检测完整版(从自定义数据集到测试验证的完整流程))

news/2024/7/11 0:32:23 标签: 目标检测, 笔记, YOLO

文章目录

  • 一、目标检测介绍
  • 二、YOLOv5介绍
    • 2.1 和以往版本的区别
  • 三、代码获取
    • 3.1 视频代码介绍
  • 四、环境搭建
  • 五、数据集准备
    • 5.1 数据集转换
    • 5.2 数据集验证
  • 六、模型训练
  • 七、模型验证
  • 八、模型测试
  • 九、评价指标

一、目标检测介绍

目标检测(Object Detection)是计算机视觉领域的一个重要研究方向,其主要任务是从图像或视频中识别并定位出感兴趣的目标对象。目标检测技术在许多实际应用中具有广泛的用途,如自动驾驶、视频监控、医学影像分析等。

目标检测的主要方法可以分为两大类:基于传统机器学习的方法和基于深度学习的方法。

  • 基于传统机器学习的方法:这些方法主要依赖于手工设计的特征提取器和分类器。常用的特征提取器包括SIFT、SURF、HOG等,而分类器则可以是支持向量机(SVM)、随机森林(Random Forest)、K-近邻(KNN)等。这类方法通常需要大量的标注数据进行训练,但在一些特定场景下,它们仍具有一定的性能。

  • 基于深度学习的方法:近年来,深度学习在目标检测领域取得了显著的进展。深度学习方法主要包括卷积神经网络(CNN)和区域卷积神经网络(R-CNN)。

    • 卷积神经网络(CNN):CNN通过多层卷积层和池化层来自动学习图像的特征表示。著名的目标检测网络有Faster R-CNN、Faster R-CNN v2和YOLO(You Only Look Once)。这些网络可以生成候选框,然后使用非极大值抑制(NMS)等技术去除重叠的框,从而得到最终的目标检测结果。
    • 区域卷积神经网络(R-CNN):R-CNN通过引入Region Proposal Network (RPN)来生成候选框。RPN首先在图像中生成一系列可能包含目标的区域,然后将这些区域送入CNN进行特征提取和分类。著名的R-CNN网络有Fast R-CNN、Faster R-CNN和Mask R-CNN。这些网络相较于传统的目标检测方法具有更高的准确率和速度。

随着深度学习技术的发展,目标检测的性能得到了显著提升,同时计算复杂度也得到了降低。这使得目标检测技术在各种应用场景中得到了广泛应用。

YOLOv5_16">二、YOLOv5介绍

YOLOv5是一种目标检测算法,是YOLO(You Only Look Once)系列的较新版本。它由ultralytics团队开发的,采用PyTorch框架实现。

YOLOv5相较于之前的版本,有以下几个显著的改进

  • 更高的精度YOLOv5在精度上有了显著提升,特别是在小目标检测方面。
  • 更快的速度YOLOv5相较于YOLOv4,速度更快,可以实时运行在较低的硬件设备上。
  • 更小的模型YOLOv5相较于YOLOv4,模型大小更小,占用更少的存储空间。
  • 更好的可扩展性YOLOv5可以很容易地进行模型的扩展和修改,以适应不同的任务和数据集。

YOLOv5的工作流程如下:

  1. 输入图像被分割成一系列的网格。
  2. 每个网格预测一系列的边界框,以及每个边界框属于不同类别的概率。
  3. 使用非极大值抑制(NMS)算法,去除重叠较多的边界框,并选择最终的检测结果。

YOLOv5可以用于各种目标检测任务,如人脸检测、车辆检测、行人检测等。它在许多计算机视觉竞赛中取得了优异的成绩,并且被广泛应用于实际应用中,如自动驾驶、视频监控等。

2.1 和以往版本的区别

YOLOv1:

  • 主干部分主要由卷积层、池化层组成,输出部分由两个全连接层组成用来预测目标的位置和置信度。
  • 原理:将每一张图片平均的分成7x7个网格,每个网格分别负责预测中心点落在该网格内的目标。
  • 优点:检测速度快、迁移能力强
  • 缺点:输入尺寸是固定的,有较大的定位误差

YOLOv2:

  • 在继续保持处理速度的基础上,从预测更准确(Better)速度更快(Faster),**识别对象更多(Stronger)**这三个方面进行了改进
  • 加入BN层,加速收敛;加入先验框解决物体漏检问题;多尺度训练,网络可自动改变尺寸等等
  • 优点:收敛速度快、可自动改变训练尺寸。
  • 缺点:对于小目标检测不友好

YOLOv3:

  • 针对v2的缺点,1)加入了更好的主干网络(Darknet53),而不是VGG;2)为了提升小目标检测还加入了FPN网络;3)通过聚类生成先验框(一个框:长宽,根据纵横比和它的尺寸生成的先验框);4)加入了更好的分类器-二元交叉熵损失。
  • 优点:增强了对于小目标的检测
  • 缺点:参数量太大

YOLOv4:

  • 差别
    • 特征提取网络的不同:1)Darknet53变成CSPDarknet53(降低了计算量,丰富了梯度信息,降低了梯度重用)相当于多个一个大残差边,再将这部分融合;2)加入了SPP-空间金字塔池化,增加感受野;3)加入了PAN操作,增加一条下采样操作
    • 激活函数不同:由leakyrelu变为mish激活函数
    • loss不同:余弦退火衰减,学习率会先上升再下降
    • 数据增强方法:采用了Cutout(随机剪切框)、GridMask(图像的区域隐藏在网格中)、MixUp(两张图混合)、Mosaic(四张图混合)等方法
  • 优点:激活函数无边界,从而避免饱和;融合了多种tricks提升网络性能;参数量相比v3更低,速度更快。
  • 缺点:不够灵活,代码对用户体验不好

YOLOv5:

  • 差别
    • 自定锚框定义:自动预先利用聚类自定义锚框
    • 控制模型大小:通过控制深度和宽度控制模型的大小,从而区分出s,m,l,x的不同尺寸的模型
    • 优化函数:提供了两个优化函数Adam和SGD,并都预设了与之匹配的训练超参数
    • 非极大值抑制:DIoU-nms变为加权nms。
    • Focus操作:加入切片操作,提升训练速度
  • 优点:灵活性更强,速度更快;使用Pytorch框架对用户更好,精度高。
  • 缺点:Focus的切片操作对嵌入式并不友好,网络量化不支持Focus;精度和速度不平衡。
  • 正负样本匹配策略:通过k-means聚类获得9个从小到大排列的anchor框,一个GT可以同时分配给多个anchor,它们是直接使用Anchor模板与GT Boxes进行粗略匹配,如果GT与某个anchor的iou大于给定的阈值,GT则分配给该Anchor,也就是说可以定位到对应cell的对应Anchor。以前是一个GT只分配给一个anchor。
  • 坐标定义1:xyxy→通常为(x1, y1, x2, y2),先两个表示左上角的坐标,再两个表示右下角的坐标。具体来说,这里的‘x1’表示bbox左上角的横坐标,‘y1’表示bbox左上角的纵坐标,‘x2’表示bbox右下角的横坐标,‘y2’表示bbox右下角的纵坐标。
  • 坐标定义2:xywh→通常为(x, y, w, h),也就是先两个表示bbox左上角的坐标,再两个表示bbox的宽和高,因此被称为 ‘xywh’ 表示。具体来说,这里的‘x’表示bbox左上角的横坐标,‘y’表示bbox左上角的纵坐标,‘w’表示bbox的宽度,‘h’表示bbox的高度。

三、代码获取

https://github.com/ultralytics/yolov5

3.1 视频代码介绍

可参考这个视频代码讲解:点击

四、环境搭建

安装ultralytics、cuda、pytorch、torchvision,然后执行pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple
如果是cpu,则直接安装cpu对应的pytorch和torchvision


http://www.niftyadmin.cn/n/5009275.html

相关文章

深度学习(十一)---zed 调用yolov5 进行识别目标并实时测距

1. 前言 zed 相机测距有2种方式:一种是根据点云数据进行测试,二是根据zed获取深度值进行测距。上篇文章 调用yolov5模型进行实时图像推理及网页端部署 我们讲述了zed调用yolov5进行目标识别,我们在此基础上进一步实现目标测距功能。 2.深度…

RabbitMQ: SpringBoot 整合 RabbitMQ

一、生产者模块 1.导入依赖 重点是这个依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency> <properties><maven.compiler.source>8</maven.…

Chrome 108版(64-bit 108.0.5359.125)网盘下载

还在用Selenium的朋友们注意了&#xff0c;目前Chrome的最新版是116&#xff0c;而官方的Chromedriver只支持到115版。 可惜Google不提供旧版Chrome的下载方式&#xff0c;需要旧版的很难回去了。如果真的想要旧版的Chrome&#xff0c;只能民间自救。 我在2022年12月备份了C盘…

uniapp的两个跳转方式

uniapp内置多种跳转方式&#xff0c;我这里介绍两个最常用的跳转&#xff0c;uni.navigateTo和uni.switchTab&#xff0c;前者为跳转到非TabBar页面&#xff0c;后者为跳转到TabBar页面&#xff0c;所谓TabBar就是底部导航栏配置的页面&#xff0c;例如下方的index.vue。 在pa…

LeetCode热题100 【cpp】题解(一)哈希表和双指针

文章目录 1. 两数之和49. 字母异位词分组128. 最长连续序列283. 移动零11. 盛最多水的容器15. 三数之和42. 接雨水 题单链接&#xff1a; LeetCode 热题 100 1. 两数之和 leetcode题目链接 题解1&#xff1a;暴力枚举 时间复杂度&#xff1a; O ( n 2 ) O(n^2) O(n2) class …

Linux:LVS (NAT群集搭建)

模拟环境 外网入口服务器 外网 192.168.8.88 内网ip 192.168.254.4 web1 服务器 ip 192.168.254.1 网关&#xff1a; 192.168.254.4 web2 服务器 ip 192.168.254.2 网关&#xff1a; 192.168.254.4 共享存储服务器 ip 192.168.254.3 介绍 访问 外网192.16…

语义分割实践思考记录(个人备忘录)

一、任务管理器、NVDIA的GPU利用率显示[1][2] 若需要在任务管理器中查看基于Pytorch框架的GPU利用率&#xff0c;那么&#xff0c;我们需要将监控面板监测内容调整为cuda。图一&#xff08;左&#xff09;即为英伟达命令行工具面板。 图一 英伟达GPU使用率监控 二、基于混淆矩阵…

Bootstrap的一些主要作用

Bootstrap是一个流行的前端开发框架&#xff0c;它主要用于快速构建响应式、移动优先的网站和网络应用程序。它提供了一套CSS样式和JavaScript插件&#xff0c;帮助开发者轻松地创建漂亮、一致和交互丰富的用户界面。 以下是Bootstrap的一些主要作用&#xff1a; 响应式布局&a…